<?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>172325</bug_id>
          
          <creation_ts>2017-05-18 17:42:26 -0700</creation_ts>
          <short_desc>[REGRESSION](r216901): Delete ImageDecoder if BitmapImage::destroyDecodedData() was called to destroy all the decoded frames</short_desc>
          <delta_ts>2017-05-18 21:09:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit 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="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1310364</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-18 17:42:26 -0700</bug_when>
    <thetext>In the change &lt;http://trac.webkit.org/changeset/216901&gt;, the function BitmapImage::destroyDecodedData() was changed such that if destroyAll was true but BitmapImage::destroyDecodedData() returns false, destroyAll was set to false which would lead to not calling ImageSource::clear(). ImageSource::clear() deletes the current ImageDecoder and creates a new one if the Image::data() is not null. Not calling ImageSource::clear() from BitmapImage::destroyDecodedData() when the passed destroyAll is true can cause the following problems:

1) CachedImage::didReplaceSharedBufferContents() calls m_image-&gt;destroyDecodedData(true) when the data SharedBuffer is switched and it assumes the current ImageDecoder will be deleted and a new one will be created with the new ShareBuffer.
2) For large images, the ImageDecoder may keep large buffers for raster data. Under memory pressure, the MemoryCache will request all the images to release their decoded frames. Because of https://bugs.webkit.org/show_bug.cgi?id=170640, we can&apos;t delete the current decoded frame. But deleting the ImageDecoder itself will release the raster data which will not be needed as long the current decoded frame is still cached.

However for animated images, it is okay not to call ImageSource::clear(). Animating an image happens after receiving all its data. So problem (1) is not a concern here. But deleting the ImageDecoder while animating an image will cause the animation to jitter because the new ImageDecoder has to decode all the frames from 0..currentFrame to be able to decode the nextFrame if it&apos;s equal to (currentFrame + 1).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310383</commentid>
    <comment_count>1</comment_count>
      <attachid>310589</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-18 18:37:05 -0700</bug_when>
    <thetext>Created attachment 310589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310390</commentid>
    <comment_count>2</comment_count>
      <attachid>310589</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-18 18:49:46 -0700</bug_when>
    <thetext>Comment on attachment 310589
Patch

r=me but this code is becoming really hard to reason about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310428</commentid>
    <comment_count>3</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2017-05-18 20:29:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/32243153&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310443</commentid>
    <comment_count>4</comment_count>
      <attachid>310589</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-18 21:09:48 -0700</bug_when>
    <thetext>Comment on attachment 310589
Patch

Clearing flags on attachment: 310589

Committed r217096: &lt;http://trac.webkit.org/changeset/217096&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1310444</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-18 21:09:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310589</attachid>
            <date>2017-05-18 18:37:05 -0700</date>
            <delta_ts>2017-05-18 21:09:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172325-20170518183726.patch</filename>
            <type>text/plain</type>
            <size>2491</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzA3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTA1LTE4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW1JFR1JFU1NJ
T05dKHIyMTY5MDEpOiBEZWxldGUgSW1hZ2VEZWNvZGVyIGlmIEJpdG1hcEltYWdlOjpkZXN0cm95
RGVjb2RlZERhdGEoKSB3YXMgY2FsbGVkIHRvIGRlc3Ryb3kgYWxsIHRoZSBkZWNvZGVkIGZyYW1l
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMzI1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBj
YWxsaW5nIEJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEoKSB3aXRoIGRlc3Ryb3lBbGwg
PSB0cnVlLCB0aGUKKyAgICAgICAgY3VycmVudCBJbWFnZURlY29kZXIgaGFzIHRvIGJlIGRlbGV0
ZWQgcmVnYXJkbGVzcyB0aGUgY3VycmVudCBmcmFtZSBuZWVkcworICAgICAgICB0byBiZSBjYWNo
ZWQgb3Igbm90LiBUaGlzIGlzIHRydWUgZXhjZXB0IHdoZW4gdGhlIGltYWdlIGlzIGFuaW1hdGlu
Zy4KKyAgICAgICAgQ3JlYXRpbmcgYSBuZXcgSW1hZ2VEZWNvZGVyIGZvciB0aGUgYW5pbWF0ZWQg
aW1hZ2Ugd2lsbCBsZWFkIHRvIGRlY29kaW5nCisgICAgICAgIGFsbCB0aGUgZnJhbWVzIGZyb20g
ZnJhbWUtemVybyB0aWxsIHRoZSBjdXJyZW50IGZyYW1lLgorCisgICAgICAgIERlbGV0aW5nIHRo
ZSBjdXJyZW50IEltYWdlRGVjb2RlciBoYXMgdGhlIGJlbmVmaXQgb2YgcmVsZWFzaW5nIGl0cyBy
YXN0ZXIKKyAgICAgICAgZGF0YS4gV2UgYWxzbyBtdXN0IGRlbGV0ZSB0aGUgY3VycmVudCBJbWFn
ZURlY29kZXIgd2hlbiB0aGUgQ2FjaGVkSW1hZ2UKKyAgICAgICAgc3dpdGNoZWQgaXRzIGRhdGEg
U2hhcmVkQnVmZmVyLgorCisgICAgICAgIFRoZSBmaXggaXMgcmV0dXJuIHRoZSBjb25kaXRpb24g
aW4gQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpIHRvIAorICAgICAgICBiZSBhcyBp
dCB3YXMgYmVmb3JlIHIyMTY5MDEuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29k
ZWREYXRhKToKKwogMjAxNy0wNS0xOCAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgRU5BQkxFKEFQUExFX1BBWV9ERUxFR0FURSkgc2hvdWxkIGJlIE5PIG9uIG1hY09T
IFNpZXJyYSBhbmQgZWFybGllcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjE3MDc4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSwxNyArNzksMTYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJv
bwogCiAgICAgaWYgKCFkZXN0cm95QWxsKQogICAgICAgICBtX3NvdXJjZS5kZXN0cm95RGVjb2Rl
ZERhdGFCZWZvcmVGcmFtZShtX2N1cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSBpZiAoIWNhbkRlc3Ry
b3lEZWNvZGVkRGF0YSgpKSB7CisgICAgZWxzZSBpZiAoIWNhbkRlc3Ryb3lEZWNvZGVkRGF0YSgp
KQogICAgICAgICBtX3NvdXJjZS5kZXN0cm95QWxsRGVjb2RlZERhdGFFeGNsdWRlRnJhbWUobV9j
dXJyZW50RnJhbWUpOwotICAgICAgICBkZXN0cm95QWxsID0gZmFsc2U7Ci0gICAgfSBlbHNlIHsK
KyAgICBlbHNlIHsKICAgICAgICAgbV9zb3VyY2UuZGVzdHJveUFsbERlY29kZWREYXRhKCk7CiAg
ICAgICAgIG1fY3VycmVudEZyYW1lRGVjb2RpbmdTdGF0dXMgPSBJbWFnZUZyYW1lOjpEZWNvZGlu
Z1N0YXR1czo6SW52YWxpZDsKICAgICB9CiAKICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gdGhy
b3cgYXdheSB0aGUgZGVjb2RlciB1bmxlc3Mgd2UncmUgZXhwbGljaXRseSBhc2tlZAogICAgIC8v
IHRvIGRlc3Ryb3kgYWxsIG9mIHRoZSBmcmFtZXMuCi0gICAgaWYgKCFkZXN0cm95QWxsKQorICAg
IGlmICghZGVzdHJveUFsbCB8fCBtX3NvdXJjZS5oYXNBc3luY0RlY29kaW5nUXVldWUoKSkKICAg
ICAgICAgbV9zb3VyY2UuY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKG1fY3VycmVudEZyYW1lKTsKICAg
ICBlbHNlCiAgICAgICAgIG1fc291cmNlLmNsZWFyKGRhdGEoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>