<?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>16859</bug_id>
          
          <creation_ts>2008-01-13 01:00:28 -0800</creation_ts>
          <short_desc>Canvas repaints too much</short_desc>
          <delta_ts>2008-01-13 05:24:13 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67097</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 01:00:28 -0800</bug_when>
    <thetext>whenever the graphics context of a canvas is updated, it marks the entire element as needing an update, regardless of actual need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67098</commentid>
    <comment_count>1</comment_count>
      <attachid>18418</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 01:03:23 -0800</bug_when>
    <thetext>Created attachment 18418
Very very preliminary patch

This is just a proof of triviality patch, it works correctly afaict, however someone else may want to test.

Here are the problems:
 * i don&apos;t have a machine that is slow enough for a full canvas repaint to be more significant than the 10ms minimum timer interval
 * This is a hack job, and needs to be tidied up and made cross platform (currently it blindly assumes CG is present).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67107</commentid>
    <comment_count>2</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 02:47:14 -0800</bug_when>
    <thetext>Okay further investigation has shown a gain when the canvas is very large (eg. 1000x1000), but also when scaled in css, eg.
&lt;canvas width=&quot;1000&quot; height=&quot;1000&quot; style=&quot;width:500px; height: 500px&quot; &gt;&lt;/canvas&gt;

there is a substantial benefit *provided* the painting is spread out suffuciently or over a compact enough region to prevent repaint rect coalescing from effectively repainting the entire canvas 

 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67109</commentid>
    <comment_count>3</comment_count>
      <attachid>18421</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 04:12:24 -0800</bug_when>
    <thetext>Created attachment 18421
Real patch

Here we go, fresh off the compiler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67110</commentid>
    <comment_count>4</comment_count>
      <attachid>18421</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-13 05:22:43 -0800</bug_when>
    <thetext>Comment on attachment 18421
Real patch

REviewed with comments by mark

Landed 29448</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18418</attachid>
            <date>2008-01-13 01:03:23 -0800</date>
            <delta_ts>2008-01-13 04:12:24 -0800</delta_ts>
            <desc>Very very preliminary patch</desc>
            <filename>minimal-repaint-for-canvas.patch</filename>
            <type>text/plain</type>
            <size>1504</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIv
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggYjg5Mjk3Zi4u
NzVhNzEzYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAg
LTEwNzcsNyArMTA3NywxMiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6d2lsbERy
YXcoY29uc3QgRmxvYXRSZWN0JiByKQogewogICAgIGlmICghbV9jYW52YXMpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2NhbnZhcy0+d2lsbERyYXcocik7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKENHQ29udGV4dEdldENUTShjLT5wbGF0Zm9ybUNvbnRl
eHQoKSkpOworICAgIAorICAgIG1fY2FudmFzLT53aWxsRHJhdyh0cmFuc2Zvcm0ubWFwUmVjdChy
KSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
aW5nQ29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBhNWQ3
N2ZiLi5mNTViNTk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTE0OSwxNCAr
MTQ5LDE0IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICAvLyBGSVhN
RTogQ2hhbmdlIHRvIHJlcGFpbnQganVzdCB0aGUgZGlydHkgcmVjdCBmb3Igc3BlZWQuCiAgICAg
Ly8gVW50aWwgd2Ugc3RhcnQgZG9pbmcgdGhpcywgd2Ugd29uJ3Qga25vdyBpZiB0aGUgcmVjdHMg
cGFzc2VkIGluIGFyZQogICAgIC8vIGFjY3VyYXRlLiBBbHNvIGRvbid0IGZvcmdldCB0byB0YWtl
IGludG8gYWNjb3VudCB0aGUgdHJhbnNmb3JtCiAgICAgLy8gb24gdGhlIGNvbnRleHQgd2hlbiBk
ZXRlcm1pbmluZyB3aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KICAgICBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgICAgICByZW5kZXJlcigpLT5y
ZXBhaW50UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOwogfQogCiB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpyZXNldCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18421</attachid>
            <date>2008-01-13 04:12:24 -0800</date>
            <delta_ts>2008-01-13 05:22:43 -0800</delta_ts>
            <desc>Real patch</desc>
            <filename>minimal-repaint-for-canvas.patch</filename>
            <type>text/plain</type>
            <size>3461</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTEzNWMzYy4uNTcxOTFkZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAwOC0wMS0xMyAgT2xpdmVyIEh1bnQg
IDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEF2b2lkIHJlcGFpbnRpbmcgdGhlIGVudGlyZSBjYW52YXMgZWxlbWVudCB3
aGVuIHBvc3NpYmxlLgorCisgICAgICAgIFdlIG5vdyBvbmx5IHJlZ2lzdGVyIHRoZSBkaXJ0eSBy
ZWdpb25zIG9mIGEgY2FudmFzIGZvciByZXBhaW50aW5nLCByYXRoZXIKKyAgICAgICAgdGhhbiB0
aGUgZW50aXJlIGVsZW1lbnQgKHRob3VnaCByZXBhaW50IGNvYWxlc2NpbmcgbWF5IGNob29zZSB0
byBjb21iaW5lCisgICAgICAgIHRoZXNlIHJlZ2lvbnMpLiAgVGhpcyBkb2Vzbid0IGNhdXNlIGEg
bWVhc3VyYWJsZSByZWdyZXNzaW9uIGluIHRoZSB3b3JzdAorICAgICAgICBjYXNlIChjbGVhcmlu
ZyB0aGUgY2FudmFzIHJlcGVhdGVkbHkpLCBidXQgaXMgYSBtb2RlcmF0ZS1sYXJnZSB3aW4gaWYg
b25seQorICAgICAgICBhIG1pbm9yIHVwZGF0ZSBoYXMgb2NjdXJyZWQuICBJZiB0aGVyZSBpcyBh
bnkgQ1NTIHNjYWxpbmcgYXBwbGllZCB0byB0aGUKKyAgICAgICAgY2FudmFzIGFsbW9zdCBhbnkg
dXBkYXRlIHNob3J0IG9mIGNsZWFyaW5nIHRoZSBlbnRpcmUgZWxlbWVudCBpcyBzdWJzdGFudGlh
bGx5CisgICAgICAgIGZhc3Rlci4KKworICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
d2lsbERyYXcpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OndpbGxEcmF3KToKKwogMjAwOC0wMS0xMiAg
Um9kbmV5IERhd2VzICA8ZG9iZXlAd2F5b2Z0aGVtb25rZXkuY29tPgogCiAgICAgICAgIEd0ayBk
ZWJ1ZyBidWlsZCBmaXguICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGI4OTI5N2YuLjAwMTIyNTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisrKyBiL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xMDc3LDcgKzEwNzcsMjQg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVj
dCYgcikKIHsKICAgICBpZiAoIW1fY2FudmFzKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jYW52
YXMtPndpbGxEcmF3KHIpOworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0
KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybTsKKyNpZiBQTEFURk9STShDRykKKyAgICB0cmFuc2Zvcm0gPSBDR0NvbnRl
eHRHZXRDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCkpOworI2VsaWYgUExBVEZPUk0oQ0FJUk8pCisg
ICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjYWlyb19tYXRyaXhf
dCBtOworICAgIGNhaXJvX2dldF9tYXRyaXgoY3IsICZtKTsKKyAgICB0cmFuc2Zvcm0gPSBtOwor
I2VsaWYgUExBVEZPUk0oUVQpCisgICAgZnByaW50ZihzdGRlcnIsICJGSVhNRTogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyAtLSBuZWVkIGNvbnRleHQgQ1RNXG4iKTsKKyAgICBG
bG9hdFJlY3QgcigwLCAwLCBtX2NhbnZhcy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpKTsK
KyNlbmRpZgorICAgIAorICAgIG1fY2FudmFzLT53aWxsRHJhdyh0cmFuc2Zvcm0ubWFwUmVjdChy
KSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
aW5nQ29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBhNWQ3
N2ZiLi45ZTFiNmE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTE0OSwxNCAr
MTQ5LDE5IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OndpbGxEcmF3KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICAvLyBGSVhN
RTogQ2hhbmdlIHRvIHJlcGFpbnQganVzdCB0aGUgZGlydHkgcmVjdCBmb3Igc3BlZWQuCi0gICAg
Ly8gVW50aWwgd2Ugc3RhcnQgZG9pbmcgdGhpcywgd2Ugd29uJ3Qga25vdyBpZiB0aGUgcmVjdHMg
cGFzc2VkIGluIGFyZQotICAgIC8vIGFjY3VyYXRlLiBBbHNvIGRvbid0IGZvcmdldCB0byB0YWtl
IGludG8gYWNjb3VudCB0aGUgdHJhbnNmb3JtCi0gICAgLy8gb24gdGhlIGNvbnRleHQgd2hlbiBk
ZXRlcm1pbmluZyB3aGF0IG5lZWRzIHRvIGJlIHJlcGFpbnRlZC4KLSAgICBpZiAocmVuZGVyZXIo
KSkKLSAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJvID0gcmVuZGVyZXIoKSkgeworICAgICAgICBGbG9hdFJlY3QgciA9IHJlY3Q7CisgICAgICAg
IC8vIEhhbmRsZSBDU1MgdHJpZ2dlcmVkIHNjYWxpbmcKKyAgICAgICAgZmxvYXQgd2lkdGhTY2Fs
ZSA9IHN0YXRpY19jYXN0PGZsb2F0Pihyby0+d2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9zaXplLndpZHRoKCkpOworICAgICAgICByLnNldFgoci54KCkgKiB3aWR0aFNjYWxlKTsKKyAg
ICAgICAgci5zZXRXaWR0aChyLndpZHRoKCkgKiB3aWR0aFNjYWxlKTsKKyAgICAgICAgZmxvYXQg
aGVpZ2h0U2NhbGUgPSBzdGF0aWNfY2FzdDxmbG9hdD4ocm8tPmhlaWdodCgpKSAvIHN0YXRpY19j
YXN0PGZsb2F0PihtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICByLnNldFkoci55KCkgKiBoZWln
aHRTY2FsZSk7CisgICAgICAgIHIuc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgKiBoZWlnaHRTY2FsZSk7
CisgICAgICAgIHJvLT5yZXBhaW50UmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJlY3QocikpOworICAg
IH0KIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQo=
</data>
<flag name="review"
          id="8050"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>