<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>100608</bug_id>
          
          <creation_ts>2012-10-28 09:34:19 -0700</creation_ts>
          <short_desc>Canvas webkitBackingStorePixelRatio does not change on resize reset</short_desc>
          <delta_ts>2012-11-09 12:40:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Timothy Hatcher">timothy</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>752949</commentid>
    <comment_count>0</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-10-28 09:34:19 -0700</bug_when>
    <thetext>The pixel ratio should update when a resize reset happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752951</commentid>
    <comment_count>1</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-10-28 09:34:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/10822030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752952</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2012-10-28 09:34:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/12588913&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752957</commentid>
    <comment_count>3</comment_count>
      <attachid>171133</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-10-28 09:50:57 -0700</bug_when>
    <thetext>Created attachment 171133
Proposed Change

This will need new expected results for other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752997</commentid>
    <comment_count>4</comment_count>
      <attachid>171133</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-28 14:44:28 -0700</bug_when>
    <thetext>Comment on attachment 171133
Proposed Change

Attachment 171133 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14617834

New failing tests:
fast/canvas/canvas-resize-reset-pixelRatio.html
platform/chromium/virtual/gpu/fast/canvas/canvas-resize-reset-pixelRatio.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753534</commentid>
    <comment_count>5</comment_count>
      <attachid>171133</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-29 09:45:50 -0700</bug_when>
    <thetext>Comment on attachment 171133
Proposed Change

View in context: https://bugs.webkit.org/attachment.cgi?id=171133&amp;action=review

&gt; Source/WebCore/ChangeLog:6
&gt; +        The backing store was not being recreated using the current page pixel ratio
&gt; +        when a resize reset occurred.

What is a “resize reset”?

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:265
&gt; +    IntSize newSize = IntSize(w, h);

Could just use construction syntax here instead of repeating IntSize.

&gt; Source/WebCore/html/HTMLCanvasElement.cpp:308
&gt; +    // NOTE: High-DPI canvas requires the platform-specific ImageBuffer implementation to respect
&gt; +    // the resolutionScale parameter.

I do not understand this comment that you moved here. How does this comment help someone reading this function?

&gt; Source/WebCore/html/HTMLCanvasElement.h:85
&gt;      void setSize(const IntSize&amp; newSize)
&gt;      { 
&gt; -        if (newSize == size())
&gt; +        if (newSize == size() &amp;&amp; targetDeviceScaleFactor() == m_deviceScaleFactor)

It seems really strange that if a canvas is in a window that’s moved from one screen to another, the device scale factor is updated only when the canvas’s size changes. Is that really the design?

I don’t like the design of this setSize function. Before the change, the function was like changing width and height with the DOM, but optimized in two ways:

1) If the size did not change, it skipped the reset. Setting width and height through the DOM does not have that kind of optimization.
2) If the size did change, then it did one reset rather than the two you’d get if you set both width and height through the DOM.

For me, (1) does not seem like a good thing, It’s strange that this setSize function has this optimization, but setting the width and height DOM attributes or content attributes does not. On the other hand, to me (2) seems purely good because it boosts performance but otherwise is not detectable.

What code calls this function? Are those callers really relying on behavior (1)? If they are not, then we could just remove the early return rather than adding the mysterious scale factor check here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753535</commentid>
    <comment_count>6</comment_count>
      <attachid>171133</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-29 09:46:21 -0700</bug_when>
    <thetext>Comment on attachment 171133
Proposed Change

View in context: https://bugs.webkit.org/attachment.cgi?id=171133&amp;action=review

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.h:85
&gt;&gt; +        if (newSize == size() &amp;&amp; targetDeviceScaleFactor() == m_deviceScaleFactor)
&gt; 
&gt; It seems really strange that if a canvas is in a window that’s moved from one screen to another, the device scale factor is updated only when the canvas’s size changes. Is that really the design?
&gt; 
&gt; I don’t like the design of this setSize function. Before the change, the function was like changing width and height with the DOM, but optimized in two ways:
&gt; 
&gt; 1) If the size did not change, it skipped the reset. Setting width and height through the DOM does not have that kind of optimization.
&gt; 2) If the size did change, then it did one reset rather than the two you’d get if you set both width and height through the DOM.
&gt; 
&gt; For me, (1) does not seem like a good thing, It’s strange that this setSize function has this optimization, but setting the width and height DOM attributes or content attributes does not. On the other hand, to me (2) seems purely good because it boosts performance but otherwise is not detectable.
&gt; 
&gt; What code calls this function? Are those callers really relying on behavior (1)? If they are not, then we could just remove the early return rather than adding the mysterious scale factor check here.

Note, the layout test does not test this setSize change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753570</commentid>
    <comment_count>7</comment_count>
      <attachid>171133</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-10-29 10:17:32 -0700</bug_when>
    <thetext>Comment on attachment 171133
Proposed Change

View in context: https://bugs.webkit.org/attachment.cgi?id=171133&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:6
&gt;&gt; +        when a resize reset occurred.
&gt; 
&gt; What is a “resize reset”?

The fact that a canvas is reset when the size changes.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:265
&gt;&gt; +    IntSize newSize = IntSize(w, h);
&gt; 
&gt; Could just use construction syntax here instead of repeating IntSize.

Will do.

&gt;&gt; Source/WebCore/html/HTMLCanvasElement.cpp:308
&gt;&gt; +    // the resolutionScale parameter.
&gt; 
&gt; I do not understand this comment that you moved here. How does this comment help someone reading this function?

It probably can be removed, or moved back to the constructor.

&gt;&gt;&gt; Source/WebCore/html/HTMLCanvasElement.h:85
&gt;&gt;&gt; +        if (newSize == size() &amp;&amp; targetDeviceScaleFactor() == m_deviceScaleFactor)
&gt;&gt; 
&gt;&gt; It seems really strange that if a canvas is in a window that’s moved from one screen to another, the device scale factor is updated only when the canvas’s size changes. Is that really the design?
&gt;&gt; 
&gt;&gt; I don’t like the design of this setSize function. Before the change, the function was like changing width and height with the DOM, but optimized in two ways:
&gt;&gt; 
&gt;&gt; 1) If the size did not change, it skipped the reset. Setting width and height through the DOM does not have that kind of optimization.
&gt;&gt; 2) If the size did change, then it did one reset rather than the two you’d get if you set both width and height through the DOM.
&gt;&gt; 
&gt;&gt; For me, (1) does not seem like a good thing, It’s strange that this setSize function has this optimization, but setting the width and height DOM attributes or content attributes does not. On the other hand, to me (2) seems purely good because it boosts performance but otherwise is not detectable.
&gt;&gt; 
&gt;&gt; What code calls this function? Are those callers really relying on behavior (1)? If they are not, then we could just remove the early return rather than adding the mysterious scale factor check here.
&gt; 
&gt; Note, the layout test does not test this setSize change.

I had the same inclination as you (just remove it). However, this function is only used by Document::getCSSCanvasContext. That function takes a width and height and passes it to setSize. We don&apos;t want to reset the canvas each time getCSSCanvasContext is called from JavaScript. So that is why this function differs from the DOM path.

We can likely remove the optimization to only do one reset, because reset already has a fast path for consecutive calls. The fast path might not have existed when this optimization was added. Keeping it does no harm though.

The layout test does test the setSize change by calling getCSSCanvasContext before and after the pixel ratio change and passing the same size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763240</commentid>
    <comment_count>8</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2012-11-09 12:40:52 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/134099</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171133</attachid>
            <date>2012-10-28 09:50:57 -0700</date>
            <delta_ts>2012-10-29 10:17:32 -0700</delta_ts>
            <desc>Proposed Change</desc>
            <filename>0001-Source-WebCore-Reset-canvas-backing-store-pixel-rati.patch</filename>
            <type>text/plain</type>
            <size>9757</size>
            <attacher name="Timothy Hatcher">timothy</attacher>
            
              <data encoding="base64">RnJvbSBkZDhjMzJjZTM3NmU1MjM4MDU4ZjIzMTNlZmM4ZDhmODg3Yzk1MTM4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUaW1vdGh5IEhhdGNoZXIgPHRpbW90aHlAYXBwbGUuY29tPgpE
YXRlOiBTdW4sIDI4IE9jdCAyMDEyIDA5OjQ3OjQwIC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gU291
cmNlL1dlYkNvcmU6IFJlc2V0IGNhbnZhcyBiYWNraW5nIHN0b3JlIHBpeGVsIHJhdGlvIG9uCiBy
ZXNpemUgcmVzZXQuCgpUaGUgYmFja2luZyBzdG9yZSB3YXMgbm90IGJlaW5nIHJlY3JlYXRlZCB1
c2luZyB0aGUgY3VycmVudCBwYWdlIHBpeGVsIHJhdGlvCndoZW4gYSByZXNpemUgcmVzZXQgb2Nj
dXJyZWQuCgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNjA4CgpS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClRlc3Q6IGZhc3QvY2FudmFzL2NhbnZhcy1yZXNp
emUtcmVzZXQtcGl4ZWxSYXRpby5odG1sCgoqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgoo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KTogVXNlIHRhcmdl
dERldmljZVNjYWxlRmFjdG9yLgooV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KTog
RG8gYSBjbGVhciBvbmx5IGlmIHRoZSBwaXhlbCByYXRpb3MgYWxzbwptYXRjaC4gU3RvcmUgdGhl
IG5ldyBwaXhlbCByYXRpbyBpbiBtX2RldmljZVNjYWxlRmFjdG9yLgooV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OnRhcmdldERldmljZVNjYWxlRmFjdG9yKTogQWRkZWQuCiogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgooV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFNpemUpOiBS
ZXR1cm4gZWFybHkgb25seSBpZiB0aGUgc2l6ZXMgYW5kCnBpeGVsIHJhdGlvcyBtYXRjaC4KCkxh
eW91dFRlc3RzOiBUZXN0IHRoZSBjYW52YXMgYmFja2luZyBzdG9yZSBwaXhlbCByYXRpbyBvbiBy
ZXNpemUgcmVzZXQuCgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
NjA4CgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiogZmFzdC9jYW52YXMvY2FudmFzLXJl
c2l6ZS1yZXNldC1waXhlbFJhdGlvLWV4cGVjdGVkLnR4dDogQWRkZWQuCiogZmFzdC9jYW52YXMv
Y2FudmFzLXJlc2l6ZS1yZXNldC1waXhlbFJhdGlvLmh0bWw6IEFkZGVkLgotLS0KIExheW91dFRl
c3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKysrCiAu
Li4vY2FudmFzLXJlc2l6ZS1yZXNldC1waXhlbFJhdGlvLWV4cGVjdGVkLnR4dCAgICB8ICAgIDYg
KysrCiAuLi4vY2FudmFzL2NhbnZhcy1yZXNpemUtcmVzZXQtcGl4ZWxSYXRpby5odG1sICAgICB8
ICAgNTYgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArKysrKysrKwogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgICAgICAgICAgfCAgIDMxICsrKysrKystLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggICAgICAgICAgICB8ICAgIDQgKy0K
IDYgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1yZXNpemUtcmVz
ZXQtcGl4ZWxSYXRpby1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8uaHRtbAoKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAxMTJiMDYzLi41ZjVmMDBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMTAtMjggIFRp
bW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgorCisgICAgICAgIFRlc3QgdGhlIGNh
bnZhcyBiYWNraW5nIHN0b3JlIHBpeGVsIHJhdGlvIG9uIHJlc2l6ZSByZXNldC4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNjA4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9j
YW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8uaHRtbDogQWRk
ZWQuCisKIDIwMTItMTAtMjYgIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1MgRXhjbHVzaW9uc10gQmxvY2sgY2hpbGRyZW4gaGF2ZSBpbmNvcnJlY3Qgb2Zm
c2V0IHdoZW4gc2hhcGUtaW5zaWRlIGVsZW1lbnQgbGF5cyBvdXQgYmVsb3cgb3RoZXIgZWxlbWVu
dHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1yZXNpemUtcmVz
ZXQtcGl4ZWxSYXRpby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52
YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjA5Y2M1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9jYW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8tZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNiBAQAorVGVzdGluZyB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIGFm
dGVyIHJlc2l6ZQorUEFTUzogd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyBpcyAxLgorUEFT
Uzogd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyBpcyAyLgorUEFTUzogd2Via2l0QmFja2lu
Z1N0b3JlUGl4ZWxSYXRpbyBpcyAxLgorUEFTUzogd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRp
byBpcyAyLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcmVz
aXplLXJlc2V0LXBpeGVsUmF0aW8uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZh
cy1yZXNpemUtcmVzZXQtcGl4ZWxSYXRpby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjIwY2U3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9jYW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8uaHRtbApAQCAtMCwwICsxLDU2IEBA
Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gbG9nKG1l
c3NhZ2UpCisgICAgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UgKyAiXG4iKSk7Cisg
ICAgfQorCisgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgbG9nKCJUaGlzIHRl
c3QgcmVxdWlyZXMgV2ViS2l0VGVzdFJ1bm5lciBvciBEdW1wUmVuZGVyVHJlZS4iKTsKKworICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworCisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwor
ICAgIGNhbnZhcy53aWR0aCA9IDg7CisgICAgY2FudmFzLmhlaWdodCA9IDg7CisKKyAgICB2YXIg
Y29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIHZhciBjc3NDb250ZXh0ID0g
ZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4dCgiMmQiLCAidGVzdCIsIDgsIDgpOworCisgICAg
aWYgKGNvbnRleHQud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyAhPT0gMSkKKyAgICAgICAg
bG9nKCJGQUlMOiBleHBlY3RlZCB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvIG9mIDEsIHdh
cyAiICsgY29udGV4dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvICsgIi4iKTsKKworICAg
IHRlc3RSdW5uZXIuc2V0QmFja2luZ1NjYWxlRmFjdG9yKDIsIGZ1bmN0aW9uKCkgeworICAgICAg
ICB2YXIgdGVzdENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAg
ICAgICB2YXIgdGVzdENvbnRleHQgPSB0ZXN0Q2FudmFzLmdldENvbnRleHQoIjJkIik7CisKKyAg
ICAgICAgaWYgKHRlc3RDb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gPT09IDIp
IHsKKyAgICAgICAgICAgIGxvZygiVGVzdGluZyB3ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlv
IGFmdGVyIHJlc2l6ZSIpOworCisgICAgICAgICAgICBmdW5jdGlvbiBhc3NlcnRQaXhlbFJhdGlv
KGNvbnRleHQsIGV4cGVjdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gPT09IGV4cGVjdGVkKQorICAgICAg
ICAgICAgICAgICAgICBsb2coIlBBU1M6IHdlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gaXMg
IiArIGV4cGVjdGVkICsgIi4iKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIGxvZygiRkFJTDogd2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpbyBpcyAiICsgY29u
dGV4dC53ZWJraXRCYWNraW5nU3RvcmVQaXhlbFJhdGlvICsgIiwgZXhwZWN0ZWQgIiArIGV4cGVj
dGVkICsgIi4iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNzZXJ0UGl4ZWxSYXRp
byhjb250ZXh0LCAxKTsKKworICAgICAgICAgICAgY2FudmFzLndpZHRoID0gODsKKyAgICAgICAg
ICAgIGNhbnZhcy5oZWlnaHQgPSA4OworCisgICAgICAgICAgICBhc3NlcnRQaXhlbFJhdGlvKGNv
bnRleHQsIDIpOworCisgICAgICAgICAgICBhc3NlcnRQaXhlbFJhdGlvKGNzc0NvbnRleHQsIDEp
OworCisgICAgICAgICAgICBjc3NDb250ZXh0ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzQ29udGV4
dCgiMmQiLCAidGVzdCIsIDgsIDgpOworCisgICAgICAgICAgICBhc3NlcnRQaXhlbFJhdGlvKGNz
c0NvbnRleHQsIDIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGxvZygiSGlnaC1EUEkg
Y2FudmFzIGlzIG5vdCBlbmFibGVkLiIpOworCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworICAgIH0pOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgwMjg5Ny4uMjk2NmUzYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTEwLTI4ICBUaW1vdGh5IEhhdGNoZXIg
IDx0aW1vdGh5QGFwcGxlLmNvbT4KKworICAgICAgICBSZXNldCBjYW52YXMgYmFja2luZyBzdG9y
ZSBwaXhlbCByYXRpbyBvbiByZXNpemUgcmVzZXQuCisKKyAgICAgICAgVGhlIGJhY2tpbmcgc3Rv
cmUgd2FzIG5vdCBiZWluZyByZWNyZWF0ZWQgdXNpbmcgdGhlIGN1cnJlbnQgcGFnZSBwaXhlbCBy
YXRpbworICAgICAgICB3aGVuIGEgcmVzaXplIHJlc2V0IG9jY3VycmVkLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA2MDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy9j
YW52YXMtcmVzaXplLXJlc2V0LXBpeGVsUmF0aW8uaHRtbAorCisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
SFRNTENhbnZhc0VsZW1lbnQpOiBVc2UgdGFyZ2V0RGV2aWNlU2NhbGVGYWN0b3IuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQpOiBEbyBhIGNsZWFyIG9ubHkgaWYg
dGhlIHBpeGVsIHJhdGlvcyBhbHNvCisgICAgICAgIG1hdGNoLiBTdG9yZSB0aGUgbmV3IHBpeGVs
IHJhdGlvIGluIG1fZGV2aWNlU2NhbGVGYWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6dGFyZ2V0RGV2aWNlU2NhbGVGYWN0b3IpOiBBZGRlZC4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudDo6c2V0U2l6ZSk6IFJldHVybiBlYXJseSBvbmx5IGlmIHRoZSBzaXplcyBhbmQKKyAgICAg
ICAgcGl4ZWwgcmF0aW9zIG1hdGNoLgorCiAyMDEyLTEwLTI2ICBSb2IgQnVpcyAgPHJidWlzQHJp
bS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIFBsYXRmb3JtIEFic3RyYWN0aW9uIGZvciBX
ZWJLaXQgUmVzb3VyY2UvSW1hZ2UgTG9hZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAppbmRleCBmZmM2MTgyLi4yN2FjYjhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtODQsMTMgKzg0LDcgQEAgSFRNTENhbnZhc0Vs
ZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2MKICAgICAsIG1fc2l6ZShEZWZhdWx0V2lkdGgsIERlZmF1bHRIZWlnaHQpCiAg
ICAgLCBtX3JlbmRlcmVySXNDYW52YXMoZmFsc2UpCiAgICAgLCBtX2lnbm9yZVJlc2V0KGZhbHNl
KQotI2lmIEVOQUJMRShISUdIX0RQSV9DQU5WQVMpCi0gICAgICAvLyBOT1RFOiBIaWdoLURQSSBj
YW52YXMgcmVxdWlyZXMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIEltYWdlQnVmZmVyIGltcGxlbWVu
dGF0aW9uIHRvIHJlc3BlY3QKLSAgICAgIC8vIHRoZSByZXNvbHV0aW9uU2NhbGUgcGFyYW1ldGVy
LgotICAgICwgbV9kZXZpY2VTY2FsZUZhY3Rvcihkb2N1bWVudC0+ZnJhbWUoKSA/IGRvY3VtZW50
LT5mcmFtZSgpLT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkgOiAxKQotI2Vsc2UKLSAgICAs
IG1fZGV2aWNlU2NhbGVGYWN0b3IoMSkKLSNlbmRpZgorICAgICwgbV9kZXZpY2VTY2FsZUZhY3Rv
cih0YXJnZXREZXZpY2VTY2FsZUZhY3RvcigpKQogICAgICwgbV9vcmlnaW5DbGVhbih0cnVlKQog
ICAgICwgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIoZmFsc2UpCiAgICAgLCBtX2RpZENsZWFySW1h
Z2VCdWZmZXIoZmFsc2UpCkBAIC0yNDcsOSArMjQxLDExIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnJlc2V0KCkKIAogICAgIGJvb2wgb2s7CiAgICAgYm9vbCBoYWRJbWFnZUJ1ZmZlciA9IGhh
c0NyZWF0ZWRJbWFnZUJ1ZmZlcigpOworCiAgICAgaW50IHcgPSBnZXRBdHRyaWJ1dGUod2lkdGhB
dHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2sgfHwgdyA8IDApCiAgICAgICAgIHcgPSBEZWZh
dWx0V2lkdGg7CisKICAgICBpbnQgaCA9IGdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS50b0ludCgm
b2spOwogICAgIGlmICghb2sgfHwgaCA8IDApCiAgICAgICAgIGggPSBEZWZhdWx0SGVpZ2h0OwpA
QCAtMjY2LDE0ICsyNjIsMjAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAg
IH0KIAogICAgIEludFNpemUgb2xkU2l6ZSA9IHNpemUoKTsKKyAgICBJbnRTaXplIG5ld1NpemUg
PSBJbnRTaXplKHcsIGgpOworICAgIGZsb2F0IG5ld0RldmljZVNjYWxlRmFjdG9yID0gdGFyZ2V0
RGV2aWNlU2NhbGVGYWN0b3IoKTsKKwogICAgIC8vIElmIHRoZSBzaXplIG9mIGFuIGV4aXN0aW5n
IGJ1ZmZlciBtYXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBpbnN0ZWFkIG9mIHJlYWxsb2Nh
dGluZy4KICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGRvbmUgZm9yIDJEIGNhbnZh
c2VzIGZvciBub3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyICYmIG9sZFNpemUg
PT0gSW50U2l6ZSh3LCBoKSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKKyAg
ICBpZiAobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBuZXdTaXplICYmIG1f
ZGV2aWNlU2NhbGVGYWN0b3IgPT0gbmV3RGV2aWNlU2NhbGVGYWN0b3IgJiYgbV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIGlmICghbV9kaWRDbGVhckltYWdlQnVmZmVy
KQogICAgICAgICAgICAgY2xlYXJJbWFnZUJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIHNldFN1cmZhY2VTaXplKEludFNpemUodywgaCkpOworCisgICAgbV9kZXZpY2VTY2Fs
ZUZhY3RvciA9IG5ld0RldmljZVNjYWxlRmFjdG9yOworCisgICAgc2V0U3VyZmFjZVNpemUobmV3
U2l6ZSk7CiAKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRl
eHQtPmlzM2QoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKQEAgLTI5OSw2ICszMDEsMTcgQEAgdm9p
ZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgICAgICAoKml0KS0+Y2FudmFzUmVzaXpl
ZCh0aGlzKTsKIH0KIAorZmxvYXQgSFRNTENhbnZhc0VsZW1lbnQ6OnRhcmdldERldmljZVNjYWxl
RmFjdG9yKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoSElHSF9EUElfQ0FOVkFTKQorICAgIC8vIE5P
VEU6IEhpZ2gtRFBJIGNhbnZhcyByZXF1aXJlcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgSW1hZ2VC
dWZmZXIgaW1wbGVtZW50YXRpb24gdG8gcmVzcGVjdAorICAgIC8vIHRoZSByZXNvbHV0aW9uU2Nh
bGUgcGFyYW1ldGVyLgorICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpID8gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpIDogMTsKKyNlbHNlCisgICAg
cmV0dXJuIDE7CisjZW5kaWYKK30KKwogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnRzSW50
b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggNjM0M2I1MC4uNDg2YWU2NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtODIsNyArODIsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKICAgICB7
IAotICAgICAgICBpZiAobmV3U2l6ZSA9PSBzaXplKCkpCisgICAgICAgIGlmIChuZXdTaXplID09
IHNpemUoKSAmJiB0YXJnZXREZXZpY2VTY2FsZUZhY3RvcigpID09IG1fZGV2aWNlU2NhbGVGYWN0
b3IpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1faWdub3JlUmVzZXQgPSB0cnVlOyAK
ICAgICAgICAgc2V0V2lkdGgobmV3U2l6ZS53aWR0aCgpKTsKQEAgLTE1MCw2ICsxNTAsOCBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCByZXNldCgpOwogCisgICAgZmxvYXQgdGFyZ2V0RGV2aWNlU2Nh
bGVGYWN0b3IoKSBjb25zdDsKKwogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdDsK
ICAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsKIAotLSAKMS43LjEwLjIgKEFwcGxl
IEdpdC0zMykKCg==
</data>
<flag name="review"
          id="184939"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="184940"
          type_id="3"
          status="-"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>