<?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>51455</bug_id>
          
          <creation_ts>2010-12-22 02:09:00 -0800</creation_ts>
          <short_desc>[chromium] Reduce canvas.toDataURL(&quot;image/png&quot;) run-time costs 300%</short_desc>
          <delta_ts>2010-12-23 00:00:47 -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>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <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="noel gordon">noel.gordon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fishd</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>mikelawther</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325424</commentid>
    <comment_count>0</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 02:09:00 -0800</bug_when>
    <thetext>Chrome win32 is 2 times slower than Mozilla 3.6.12 win32, and 3 times slower than
Safari 5.0.3 win32 in my testing when calling canvas.toDataURL(&quot;image/png&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325425</commentid>
    <comment_count>1</comment_count>
      <attachid>77198</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 02:15:03 -0800</bug_when>
    <thetext>Created attachment 77198
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325827</commentid>
    <comment_count>2</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 18:12:36 -0800</bug_when>
    <thetext>Extraction results for 800 x 600 px test image, this to determine the compression level used by chromium with the default libpng compressor.

safari 5.0.3 win32 (baseline)
   x, extract image/png 167 ms length: 1171790 bytes

chrome 10 win32 dev, for compression levels [1-9]
   1, extract image/png 168 ms length: 1237066 bytes
   2, extract image/png 179 ms length: 1222386 bytes
   3, extract image/png 216 ms length: 1188118 bytes
   4, extract image/png 264 ms length: 1136778 bytes
   5, extract image/png 331 ms length: 1120050 bytes
   6, extract image/png 510 ms length: 1098442 bytes ** default
   7, extract image/png 623 ms length: 1091738 bytes
   8, extract image/png 890 ms length: 1087218 bytes
   9, extract image/png 929 ms length: 1086930 bytes

Conclusion: chrome uses the default compression level 6, and is noticeably slower
than Safari even though we both use libpng. For a compressed output size matching
Safari (compression level 3), chrome is still ~50% slower than Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325836</commentid>
    <comment_count>3</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 18:44:25 -0800</bug_when>
    <thetext>The alternative compression methods offered by libpng, namely, Z_RLE, Z_FILTERED,
and Z_HUFFMAN_ONLY, should then be considered.  Z_FILTERED is slower, and not as
compressive as Z_HUFFMAN_ONLY, Z_RLE.

Z_HUFFMAN_ONLY seems a good choice compared to Z_RLE - that latter runs about 2-10%
slower (see http://optipng.sourceforge.net/pngtech/z_rle) for similar compressed
output data size (http://optipng.sourceforge.net/pngtech/z_rle.html).

Does the libpng compression level alter the results when using Z_HUFFMAN_ONLY?  It
should not, but I varied the compression level from Z_BEST_SPEED (1) through to
maximal compression (9) to test: 

 huffman encoding (Z_HUFFMAN_ONLY) with compression levels [1-9] 

   1, extract image/png 156 ms length: 1204834 bytes 
   2, extract image/png 156 ms length: 1204834 bytes 
   3, extract image/png 156 ms length: 1204834 bytes
   4, extract image/png 164 ms length: 1204834 bytes
   5, extract image/png 168 ms length: 1204834 bytes
   6, extract image/png 166 ms length: 1204834 bytes
   7, extract image/png 166 ms length: 1204834 bytes
   8, extract image/png 167 ms length: 1204834 bytes
   9, extract image/png 166 ms length: 1204834 bytes

There was a consistent 10 ms increase in run-time cost for compression levels &gt; 3.
Z_BEST_SPEED seems like a good choice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325847</commentid>
    <comment_count>4</comment_count>
      <attachid>77294</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 18:56:42 -0800</bug_when>
    <thetext>Created attachment 77294
patch update changelog description</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325884</commentid>
    <comment_count>5</comment_count>
      <attachid>77294</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-12-22 21:07:37 -0800</bug_when>
    <thetext>Comment on attachment 77294
patch update changelog description

Sounds like a win to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325915</commentid>
    <comment_count>6</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-22 23:44:35 -0800</bug_when>
    <thetext>Darin mentioned that this seems like something developers should be able to configure, and I concur.  As a developer, I can control jpeg compression quality, but not png compression quality :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325917</commentid>
    <comment_count>7</comment_count>
      <attachid>77294</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 00:00:39 -0800</bug_when>
    <thetext>Comment on attachment 77294
patch update changelog description

Clearing flags on attachment: 77294

Committed r74541: &lt;http://trac.webkit.org/changeset/74541&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>325919</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-23 00:00:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77198</attachid>
            <date>2010-12-22 02:15:03 -0800</date>
            <delta_ts>2010-12-22 18:56:42 -0800</delta_ts>
            <desc>patch</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>1821</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTg1MWQ2Ny4uNDI1ZDdkMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMC0xMi0yMiAgTm9lbCBHb3Jkb24g
IDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWR1Y2UgY2FudmFzLnRvRGF0YVVSTCgiaW1h
Z2UvcG5nIikgcnVuLXRpbWUgY29zdHMgMzAwJQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTUKKworICAgICAgICBsaWJwbmcgZGVmYXVsdHMgdG8g
emxpYiBlbmNvZGluZywgY29tcHJlc3Npb24gbGV2ZWwgNi4gIENocm9taXVtIHVzZXMgdGhlCisg
ICAgICAgIGRlZmF1bHQsIGFuZCBnb29kIGNvbXByZXNzaW9uIHJlc3VsdHMsIGJ1dCBhdCBtdWNo
IGxhcmdlciBydW4tdGltZSBjb3N0CisgICAgICAgIGNvbXBhcmVkIHRvIG90aGVyIGJyb3dzZXJz
LiAgQ2hyb21lIGlzIDIgdGltZXMgc2xvd2VyIHRoYW4gTW96aWxsYSAzLjYuMTIKKyAgICAgICAg
YW5kIDMgdGltZXMgc2xvd2VyIHRoYW4gU2FmYXJpIDUuMC4zLiAgbGlicG5nIGhhcyBzdXBwb3J0
ZWQgYWx0ZXJuYXRpdmUKKyAgICAgICAgY29tcHJlc3Npb24gbWV0aG9kcyBmb3Igc29tZSB0aW1l
LCBhbmQgdGhlc2UgYmV0dGVyIG1lZXQgdGhlIGR1YWwgb24tbGluZQorICAgICAgICBnb2FscyBv
ZiBnb29kIGNvbXByZXNzaW9uIGFuZCBydW4tdGltZSBjb3N0LgorCisgICAgICAgIE5vIGNoYW5n
ZSBpbiBiZWhhdmlvdXIsIHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKTogVXNlIEh1ZmZtYW4gaW1hZ2UgZW5jb2RpbmcuCisK
IDIwMTAtMTItMjAgIFl1dGEgS2l0YW11cmEgIDx5dXRha0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKaW5kZXgg
OWZjODJjNC4uNzQ1MmQwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAKQEAgLTczLDYgKzczLDkgQEAgYm9v
bCBQTkdJbWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBWZWN0b3I8
dW5zaWduZWQgY2hhcj4qIG91dHAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAg
IHBuZ19zZXRfY29tcHJlc3Npb25fbGV2ZWwocG5nLCBaX0JFU1RfU1BFRUQpOworICAgIHBuZ19z
ZXRfY29tcHJlc3Npb25fc3RyYXRlZ3kocG5nLCBaX0hVRkZNQU5fT05MWSk7CisKICAgICBwbmdf
c2V0X3dyaXRlX2ZuKHBuZywgb3V0cHV0LCB3cml0ZU91dHB1dCwgMCk7CiAgICAgcG5nX3NldF9J
SERSKHBuZywgaW5mbywgaW1hZ2VTaXplLndpZHRoKCksIGltYWdlU2l6ZS5oZWlnaHQoKSwKICAg
ICAgICAgICAgICAgICAgOCwgUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBLCAwLCAwLCAwKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77294</attachid>
            <date>2010-12-22 18:56:42 -0800</date>
            <delta_ts>2010-12-23 00:00:39 -0800</delta_ts>
            <desc>patch update changelog description</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>2017</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTg1MWQ2Ny4uYzEyYzlmZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0xMi0yMiAgTm9lbCBHb3Jkb24g
IDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZWR1Y2UgY2FudmFzLnRvRGF0YVVSTCgiaW1h
Z2UvcG5nIikgcnVuLXRpbWUgY29zdHMgMzAwJQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0NTUKKworICAgICAgICBDaHJvbWl1bSB1c2VzIHRoZSBs
aWJwbmcgY29tcHJlc3Npb24gZGVmYXVsdHMuICBHb29kIGNvbXByZXNzaW9uIHJlc3VsdHMsCisg
ICAgICAgIGJ1dCBhdCBtdWNoIGxhcmdlciBydW4tdGltZSBjb3N0IGNvbXBhcmVkIHRvIG90aGVy
IGJyb3dzZXJzLiAgQ2hyb21lIGlzIDIKKyAgICAgICAgdGltZXMgc2xvd2VyIHRoYW4gTW96aWxs
YSAzLjYuMTIgYW5kIDMtNCB0aW1lcyBzbG93ZXIgdGhhbiBTYWZhcmkgNS4wLjMuCisKKyAgICAg
ICAgbGlicG5nIGhhcyBzdXBwb3J0ZWQgYWx0ZXJuYXRpdmUgY29tcHJlc3Npb24gbWV0aG9kcyBm
b3Igc29tZSB0aW1lLCB0aGV5CisgICAgICAgIGJldHRlciBtZWV0IHRoZSBkdWFsIGdvYWxzIG9m
IGdvb2QgY29tcHJlc3Npb24gYW5kIHJ1bi10aW1lIGNvc3QgZm9yIHRoZQorICAgICAgICBvbi1s
aW5lIGNhc2UsIGFuZCBhcmUgd2VsbC1kb2N1bWVudGVkLiAgSGVyZSB1c2UgSHVmZm1hbiBlbmNv
ZGluZy4gIEl0J3MKKyAgICAgICAgMi0yMCUgZmFzdGVyIHRoYW4gb3RoZXIgZW5jb2RpbmdzICha
X1JMRSwgWl9GSUxURVJFRCkgYW5kIHRoZSBjb21wcmVzc2VkCisgICAgICAgIHNpemUgaXMgd2l0
aGluIDElIG9mIHRoZSBTYWZhcmkgNS4wLjMgcmVzdWx0IGluZGVwZW5kZW50IG9mIGltYWdlIHNp
emUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW91ciwgc28gbm8gbmV3IHRlc3RzLgor
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUpOiBBcHBseSBI
dWZmbWFuIGltYWdlIGVuY29kaW5nLgorCiAyMDEwLTEyLTIwICBZdXRhIEtpdGFtdXJhICA8eXV0
YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFr
b3YuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5H
SW1hZ2VFbmNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9Q
TkdJbWFnZUVuY29kZXIuY3BwCmluZGV4IDlmYzgyYzQuLjc0NTJkMDAgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIu
Y3BwCkBAIC03Myw2ICs3Myw5IEBAIGJvb2wgUE5HSW1hZ2VFbmNvZGVyOjplbmNvZGUoY29uc3Qg
U2tCaXRtYXAmIGJpdG1hcCwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwbmdfc2V0X2NvbXByZXNzaW9uX2xldmVsKHBuZywg
Wl9CRVNUX1NQRUVEKTsKKyAgICBwbmdfc2V0X2NvbXByZXNzaW9uX3N0cmF0ZWd5KHBuZywgWl9I
VUZGTUFOX09OTFkpOworCiAgICAgcG5nX3NldF93cml0ZV9mbihwbmcsIG91dHB1dCwgd3JpdGVP
dXRwdXQsIDApOwogICAgIHBuZ19zZXRfSUhEUihwbmcsIGluZm8sIGltYWdlU2l6ZS53aWR0aCgp
LCBpbWFnZVNpemUuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgIDgsIFBOR19DT0xPUl9UWVBF
X1JHQl9BTFBIQSwgMCwgMCwgMCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>