<?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>72333</bug_id>
          
          <creation_ts>2011-11-14 17:06:57 -0800</creation_ts>
          <short_desc>[Chromium] Clear tile update rectangle properly before each update.</short_desc>
          <delta_ts>2011-11-17 16:31:08 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>71388</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Reveman">reveman</reporter>
          <assigned_to name="David Reveman">reveman</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502497</commentid>
    <comment_count>0</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-14 17:06:57 -0800</bug_when>
    <thetext>UpdatableTile::m_updateRect needs to be cleared for each tile before starting a new update. TiledLayerChromium::updateCompositorResources should only use m_updateRect to determine the tiles that need updating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502509</commentid>
    <comment_count>1</comment_count>
      <attachid>115068</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-14 17:13:33 -0800</bug_when>
    <thetext>Created attachment 115068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502518</commentid>
    <comment_count>2</comment_count>
      <attachid>115068</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-14 17:23:42 -0800</bug_when>
    <thetext>Comment on attachment 115068
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        No new tests. Covered by the existing tests.

which tests cover this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502529</commentid>
    <comment_count>3</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-14 17:28:17 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 115068 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115068&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        No new tests. Covered by the existing tests.
&gt; 
&gt; which tests cover this change?

I&apos;m working on layout test that will expose this problem. This shouldn&apos;t have been marked for review yet. Sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502533</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-14 17:32:33 -0800</bug_when>
    <thetext>OK that sounds great, just checking :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502542</commentid>
    <comment_count>5</comment_count>
      <attachid>115068</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-14 17:38:20 -0800</bug_when>
    <thetext>Comment on attachment 115068
Patch

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

Sorry for all the questions, but can you explain the changes to clearDirty() and createTile() as well? I don&apos;t quite follow why those need to get moved around.  I think if you expect tiles to be there, then there should be asserts about it.

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:325
&gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
&gt; +        UpdatableTile* tile = static_cast&lt;UpdatableTile*&gt;(iter-&gt;second.get());
&gt; +        tile-&gt;m_updateRect = IntRect();
&gt; +    }
&gt; +

Why not just clear the update rect in updateCompositorResources as you iterate through the tiles with non-zero update rects, rather than every tile on the layer?

&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:382
&gt; -            if (!tile)
&gt; -                tile = createTile(i, j);
&gt; -            else if (!tile-&gt;dirty())
&gt; +            if (!tile || !tile-&gt;dirty())

How does this not break the default texture updater? If you don&apos;t create new tiles and consider them dirty, then how does m_paintRect get constructed to include new tiles?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502545</commentid>
    <comment_count>6</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-11-14 17:43:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 115068 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115068&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; &gt; +        No new tests. Covered by the existing tests.
&gt; &gt; 
&gt; &gt; which tests cover this change?
&gt; 
&gt; I&apos;m working on layout test that will expose this problem.

Is this unit testable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502584</commentid>
    <comment_count>7</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-14 18:55:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 115068 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115068&amp;action=review
&gt; 
&gt; Sorry for all the questions, but can you explain the changes to clearDirty() and createTile() as well? I don&apos;t quite follow why those need to get moved around.  I think if you expect tiles to be there, then there should be asserts about it.

The idea is that we compute the paint area and the tile areas to update in prepareToUpdate. The result ends up in m_paintRect and UpdatableTile::m_updateRect. Once this is done, tiles can be invalidated without it affecting the behavior of the next call to updateCompositorResource. This is the reason for the move of clearDiry().

I intentionally didn&apos;t change the expectation of a tile&apos;s existence in this patch, though it&apos;s probably safe to do so. However, creating a tile when it doesn&apos;t exist is wrong in these cases which is why I included the changes related to that in this patch.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:325
&gt; &gt; +    for (CCLayerTilingData::TileMap::const_iterator iter = m_tiler-&gt;tiles().begin(); iter != m_tiler-&gt;tiles().end(); ++iter) {
&gt; &gt; +        UpdatableTile* tile = static_cast&lt;UpdatableTile*&gt;(iter-&gt;second.get());
&gt; &gt; +        tile-&gt;m_updateRect = IntRect();
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; Why not just clear the update rect in updateCompositorResources as you iterate through the tiles with non-zero update rects, rather than every tile on the layer?

That works too. I was a bit forward looking here and changed it in a way that will work with my patch that allows initialization of compositor resources prior to painting. That patch turns updateCompositorResources into forEachCompositorResource and it&apos;s not necessarily called just once during an updated. I can move the clear into updateCompositorResources for now if that&apos;s preferred?

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:382
&gt; &gt; -            if (!tile)
&gt; &gt; -                tile = createTile(i, j);
&gt; &gt; -            else if (!tile-&gt;dirty())
&gt; &gt; +            if (!tile || !tile-&gt;dirty())
&gt; 
&gt; How does this not break the default texture updater? If you don&apos;t create new tiles and consider them dirty, then how does m_paintRect get constructed to include new tiles?

This is the second pass iterating over all tiles that might need updating. The first pass that create tiles if necessary is before the textureUpdater()-&gt;prepareToUpdate() call. Is there a chance that more tiles are dirty after the call to textureUpdater()-&gt;prepareToUpdate()? In that case we could allow the creation of them in the second pass but we can&apos;t call clearDirty() on them as m_paintRect might not include all of the dirty tile rect. In that case we need to subtract the m_paintRect from the tile&apos;s dirty rect.

The patch is not correct here. We need to either have an ASSERT(tile) or create tiles and subtract m_paintRect from the tile&apos;s dirty rect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502634</commentid>
    <comment_count>8</comment_count>
      <attachid>115068</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-11-14 22:14:15 -0800</bug_when>
    <thetext>Comment on attachment 115068
Patch

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

(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 115068 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115068&amp;action=review
&gt; &gt; 
&gt; &gt; Sorry for all the questions, but can you explain the changes to clearDirty() and createTile() as well? I don&apos;t quite follow why those need to get moved around.  I think if you expect tiles to be there, then there should be asserts about it.
&gt; 
&gt; The idea is that we compute the paint area and the tile areas to update in prepareToUpdate. The result ends up in m_paintRect and UpdatableTile::m_updateRect. Once this is done, tiles can be invalidated without it affecting the behavior of the next call to updateCompositorResource. This is the reason for the move of clearDiry().

It&apos;s my assumption that there&apos;d be no invalidations once prepareToUpdate was called until after updateCompositorResources, so was wondering if there was a correctness issue you were addressing that I didn&apos;t quite understand.
 
&gt; I intentionally didn&apos;t change the expectation of a tile&apos;s existence in this patch, though it&apos;s probably safe to do so. However, creating a tile when it doesn&apos;t exist is wrong in these cases which is why I included the changes related to that in this patch.

Oh, I see it now.  Because you&apos;re setting more state on these tiles, lazy creation will cause problems.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:325
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; Why not just clear the update rect in updateCompositorResources as you iterate through the tiles with non-zero update rects, rather than every tile on the layer?
&gt; 
&gt; That works too. I was a bit forward looking here and changed it in a way that will work with my patch that allows initialization of compositor resources prior to painting. That patch turns updateCompositorResources into forEachCompositorResource and it&apos;s not necessarily called just once during an updated. I can move the clear into updateCompositorResources for now if that&apos;s preferred?

No, not at all.  &quot;Why&quot; was just an honest question here.  If this meshes better with where you&apos;re going, then by all means.  :)

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/TiledLayerChromium.cpp:382
&gt;&gt;&gt; +            if (!tile || !tile-&gt;dirty())
&gt;&gt; 
&gt;&gt; How does this not break the default texture updater? If you don&apos;t create new tiles and consider them dirty, then how does m_paintRect get constructed to include new tiles?
&gt; 
&gt; This is the second pass iterating over all tiles that might need updating. The first pass that create tiles if necessary is before the textureUpdater()-&gt;prepareToUpdate() call. Is there a chance that more tiles are dirty after the call to textureUpdater()-&gt;prepareToUpdate()? In that case we could allow the creation of them in the second pass but we can&apos;t call clearDirty() on them as m_paintRect might not include all of the dirty tile rect. In that case we need to subtract the m_paintRect from the tile&apos;s dirty rect.
&gt; 
&gt; The patch is not correct here. We need to either have an ASSERT(tile) or create tiles and subtract m_paintRect from the tile&apos;s dirty rect.

Oops.  I entirely misread this diff, then.  Ignore my entirely incorrect worry about this breaking things.  Yeah, an assert in both of these places where it&apos;s not ok to lazily create tiles would be excellent.

For what it&apos;s worth, perhaps this should be better documented, but there should only be one case in which m_paintRect does not include all of the dirty tile rect: edge tiles on image layers.  It&apos;s a hack to just consider those tiles clean once they&apos;ve been partially uploaded, but the layer is entirely invalidated when its bounds change.  That&apos;s why clearDirty() is called anyway in the old code, even though m_updateRect != dirtyRect.  The alternative is to have more complicated per-tile dirty regions or tiles of different sizes, but I just didn&apos;t want to go there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505343</commentid>
    <comment_count>9</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-17 16:31:08 -0800</bug_when>
    <thetext>Fixed in the original patch that was reverted.

*** This bug has been marked as a duplicate of bug 71388 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115068</attachid>
            <date>2011-11-14 17:13:33 -0800</date>
            <delta_ts>2011-11-14 22:14:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72333-20111114171332.patch</filename>
            <type>text/plain</type>
            <size>3524</size>
            <attacher name="David Reveman">reveman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwMTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTdiOWRhZTM4MDYwY2Yx
YmJhN2ZhMTI1YzU4MDIxNTdiZDM1MDdjMS4uMTY0OWUxOTc4NjcxZTczMTQ1NWZkZWY1YzlhZTVk
NWJiNTJiMTdmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTExLTE0ICBEYXZp
ZCBSZXZlbWFuICA8cmV2ZW1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBD
bGVhciB0aWxlIHVwZGF0ZSByZWN0YW5nbGUgcHJvcGVybHkgYmVmb3JlIGVhY2ggdXBkYXRlLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIzMzMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGFibGVU
aWxlOjptX3VwZGF0ZVJlY3QgbmVlZHMgdG8gYmUgY2xlYXJlZCBmb3IgZWFjaCB0aWxlCisgICAg
ICAgIGJlZm9yZSBzdGFydGluZyBhIG5ldyB1cGRhdGUuCisgICAgICAgIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyBzaG91bGQgb25seSB1c2UKKyAgICAgICAg
bV91cGRhdGVSZWN0IHRvIGRldGVybWluZSB0aGUgdGlsZXMgdGhhdCBuZWVkIHVwZGF0aW5nLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJlZCBieSB0aGUgZXhpc3RpbmcgdGVzdHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHJl
cGFyZVRvVXBkYXRlKToKKwogMjAxMS0xMS0xNCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29n
bGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUGlwZSBjb21wb3NpdG9yIGNvbW1pdC9zd2Fw
IHVwIHRvIFdlYldpZGdldENsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMjYwYTE3NWM0MjhjMTU5YTYzOGUwMjQ3NWE0YjVkZTQyMWQyZWE0YS4uOWM4ODRkNzQ2ZTY3
OTAxZmQzYzhiN2MxMmY2MThmMTZhMjE3ZWZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwCkBAIC0xNjYsOCArMTY2LDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAg
ICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7ICsraSkgewogICAgICAgICAgICAgVXBk
YXRhYmxlVGlsZSogdGlsZSA9IHRpbGVBdChpLCBqKTsKICAgICAgICAgICAgIGlmICghdGlsZSkK
LSAgICAgICAgICAgICAgICB0aWxlID0gY3JlYXRlVGlsZShpLCBqKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKCF0aWxlLT5kaXJ0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB0aWxlLT5tX3VwZGF0ZVJlY3Q7CkBAIC0yMDEs
NyArMTk5LDYgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEMKICAgICAgICAgICAgIEdMQyhjb250
ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsKIAogICAg
ICAgICAgICAgdXBkYXRlci5hcHBlbmQodGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdCk7Ci0gICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTMyMSw2ICszMTgsMTEgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVU
b1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkKIAogICAgIG1fc2tpcHNEcmF3ID0g
ZmFsc2U7CiAKKyAgICBmb3IgKENDTGF5ZXJUaWxpbmdEYXRhOjpUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV90aWxlci0+dGlsZXMoKS5iZWdpbigpOyBpdGVyICE9IG1fdGlsZXItPnRp
bGVzKCkuZW5kKCk7ICsraXRlcikgeworICAgICAgICBVcGRhdGFibGVUaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8VXBkYXRhYmxlVGlsZSo+KGl0ZXItPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHRp
bGUtPm1fdXBkYXRlUmVjdCA9IEludFJlY3QoKTsKKyAgICB9CisKICAgICBpZiAoY29udGVudFJl
Y3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fcmVxdWVzdGVkVXBkYXRlUmVjdCA9IEludFJlY3Qo
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzc3LDkgKzM3OSw3IEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiAgICAg
Zm9yIChpbnQgaiA9IHRvcDsgaiA8PSBib3R0b207ICsraikgewogICAgICAgICBmb3IgKGludCBp
ID0gbGVmdDsgaSA8PSByaWdodDsgKytpKSB7CiAgICAgICAgICAgICBVcGRhdGFibGVUaWxlKiB0
aWxlID0gdGlsZUF0KGksIGopOwotICAgICAgICAgICAgaWYgKCF0aWxlKQotICAgICAgICAgICAg
ICAgIHRpbGUgPSBjcmVhdGVUaWxlKGksIGopOwotICAgICAgICAgICAgZWxzZSBpZiAoIXRpbGUt
PmRpcnR5KCkpCisgICAgICAgICAgICBpZiAoIXRpbGUgfHwgIXRpbGUtPmRpcnR5KCkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBjb250ZW50
LXNwYWNlIHJlY3RhbmdsZSB0byBjb3B5IGZyb20uCkBAIC0zODksNiArMzg5LDggQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnByZXBhcmVUb1VwZGF0ZShjb25zdCBJbnRSZWN0JiBjb250ZW50
UmVjdCkKICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNvdXJjZVJlY3QgZG9lc24ndCBl
eHRlbmQgb3V0c2lkZSBvZiBpdC4KICAgICAgICAgICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KG1f
cGFpbnRSZWN0KTsKIAorICAgICAgICAgICAgdGlsZS0+Y2xlYXJEaXJ0eSgpOworCiAgICAgICAg
ICAgICB0aWxlLT5tX3VwZGF0ZVJlY3QgPSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgaWYgKHNv
dXJjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>