<?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>6219</bug_id>
          
          <creation_ts>2005-12-23 07:14:46 -0800</creation_ts>
          <short_desc>Perf regression: -[NSImage initWithData:] called repeatedly while moving the cursor over an image</short_desc>
          <delta_ts>2006-02-25 00:12:49 -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>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</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>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>26432</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-12-23 07:14:46 -0800</bug_when>
    <thetext>Each call to -[WebView elementAtPoint:] for a point inside an image entails a call to -[NSImage 
initWithData:] to fill the WebElementImageKey. This results in pretty high CPU usage when simply moving 
the mouse cursor across a big image. See the testcase for example.

I think this started with the changes to QPixmap when bug 5689 was fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26433</commentid>
    <comment_count>1</comment_count>
      <attachid>5250</attachid>
    <who name="">mitz</who>
    <bug_when>2005-12-23 07:15:43 -0800</bug_when>
    <thetext>Created attachment 5250
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>26434</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-23 10:03:52 -0800</bug_when>
    <thetext>Great catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27300</commentid>
    <comment_count>3</comment_count>
      <attachid>5395</attachid>
    <who name="">mitz</who>
    <bug_when>2005-12-31 04:30:48 -0800</bug_when>
    <thetext>Created attachment 5395
Lame patch

With this patch, initWithData: will still be called once per image, which is
almost always a waste of time. The non-lame approach, I think, is to use an
NSImage subclass or a proxy that does lazy instantiation as the value of
WebElementImageKey in the element dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27401</commentid>
    <comment_count>4</comment_count>
      <attachid>5395</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-31 18:14:17 -0800</bug_when>
    <thetext>Comment on attachment 5395
Lame patch

Better to just change the pixmap() function to return a const QPixmap&amp; -- that
would do the trick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27412</commentid>
    <comment_count>5</comment_count>
      <attachid>5406</attachid>
    <who name="">mitz</who>
    <bug_when>2006-01-01 01:43:52 -0800</bug_when>
    <thetext>Created attachment 5406
Change pixmap() to return a const QPixmap&amp;

I really ought to learn that &quot;programming&quot; thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27413</commentid>
    <comment_count>6</comment_count>
      <attachid>5406</attachid>
    <who name="">mitz</who>
    <bug_when>2006-01-01 01:49:57 -0800</bug_when>
    <thetext>Comment on attachment 5406
Change pixmap() to return a const QPixmap&amp;

Maybe there should be a FIXME in WebHTMLView where it creates the NSImage
saying that it would be better to delay the actual NSImage instantiation? It
seems that in an overwhelming majority of cases, the WebElementImageKey isn&apos;t
used.

Another option, instead of using a proxy or an NSImage subclass, is to use an
NSMutableDictionary subclass for the result of -[WebHTMLView elementAtPoint:]
that knows how to generate the value of the WebElementImageKey from the
WebCoreElementImageRendererKey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27416</commentid>
    <comment_count>7</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-01-01 07:21:41 -0800</bug_when>
    <thetext>Okay, the last suggestion was really stupid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27505</commentid>
    <comment_count>8</comment_count>
      <attachid>5406</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-02 14:35:51 -0800</bug_when>
    <thetext>Comment on attachment 5406
Change pixmap() to return a const QPixmap&amp;

Looks fine, r=me.

Good suggestions about implementing our own Objective-C dictionary so we can
compute this lazily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27509</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-02 14:43:14 -0800</bug_when>
    <thetext>Mitz&apos;s last suggestion was *not* stupid. We can&apos;t create an NSMutableDictionary subclass, but we can 
make our own dictionary class that&apos;s part of the NSDictionary &quot;class cluster&quot;. And that is indeed the best 
way to fix this &quot;for real&quot;.

And yes, I think the the FIXME is a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27561</commentid>
    <comment_count>10</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-03 00:35:56 -0800</bug_when>
    <thetext>Agreed, in fact some APIs in AppKit return custom NSDictionary subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27935</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-07 10:20:10 -0800</bug_when>
    <thetext>To be even more specific, we should use an NSDictionary subclass. It only has to implement the three 
methods count, objectForKey:, and keyEnumerator. And the keyEnumerator will be an NSEnumerator that 
only has to implement nextObject.

We should make sure there&apos;s a method on DOMNode or DOMElement for each of the properties and then 
we can just map the dictionary key to a selector and call it on the DOMElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>33944</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2006-02-25 00:12:49 -0800</bug_when>
    <thetext>See bug 7450</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>5250</attachid>
            <date>2005-12-23 07:15:43 -0800</date>
            <delta_ts>2005-12-23 07:15:43 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>fatImage.html</filename>
            <type>text/html</type>
            <size>151</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PGJvZHk+CjxpbWcgc3JjPSJodHRwOi8vZWFydGhvYnNlcnZhdG9yeS5uYXNhLmdvdi9OYXR1cmFs
SGF6YXJkcy9BcmNoaXZlL1NlcDIwMDIvaW5kb2NoaW5hXzE0c2VwMDJfMjUwbV8yMjEudGlmZi5q
cGciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj4KPC9ib2R5Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5395</attachid>
            <date>2005-12-31 04:30:48 -0800</date>
            <delta_ts>2006-01-01 01:43:52 -0800</delta_ts>
            <desc>Lame patch</desc>
            <filename>6219_easy_r1.patch</filename>
            <type>text/plain</type>
            <size>1798</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2Uu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC1wIC11IC1yMS4yOSBXZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAotLS0gV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2ltYWdlLmgJMjEgTm92IDIwMDUgMDE6MjA6MjUgLTAwMDAJMS4yOQorKysgV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJMzEgRGVjIDIwMDUgMTI6MzE6MDQgLTAw
MDAKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQaXhtYXAo
IGNvbnN0IFFQaXhtYXAgJiwgY29uc3QgUVJlY3QmLCBDYWNoZWRJbWFnZSAqKTsKIAogICAgIFFQ
aXhtYXAgcGl4bWFwKCkgY29uc3QgeyByZXR1cm4gcGl4OyB9CisgICAgY29uc3QgUVBpeG1hcCAq
cGl4bWFwUHRyKCkgY29uc3QgeyByZXR1cm4gJnBpeDsgfQogICAgIC8vIGRvbid0IGV2ZW4gdGhp
bmsgYWJvdXQgbWFraW5nIHRoaXMgbWV0aG9kIHZpcnR1YWwhCiAgICAgRE9NOjpIVE1MRWxlbWVu
dEltcGwqIGVsZW1lbnQoKSBjb25zdAogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PERPTTo6SFRN
TEVsZW1lbnRJbXBsKj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CkluZGV4OiBXZWJDb3Jl
L2t3cS9XZWJDb3JlQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0NgpkaWZm
IC1wIC11IC1yMS40NDYgV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0gV2ViQ29yZS9r
d3EvV2ViQ29yZUJyaWRnZS5tbQkyNiBEZWMgMjAwNSAyMTo0NjoxNyAtMDAwMAkxLjQ0NgorKysg
V2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQkzMSBEZWMgMjAwNSAxMjozMToxMSAtMDAwMApA
QCAtMTEyNCw5ICsxMTI0LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5p
c0ltYWdlKCkpIHsKICAgICAgICAgICAgIFJlbmRlckltYWdlICpyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVySW1hZ2UgKj4obm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAoIXItPmlzRGlz
cGxheWluZ0Vycm9yKCkpIHsKLSAgICAgICAgICAgICAgICBRUGl4bWFwIHAgPSByLT5waXhtYXAo
KTsKLSAgICAgICAgICAgICAgICBpZiAocC5pbWFnZVJlbmRlcmVyKCkpCi0gICAgICAgICAgICAg
ICAgICAgIFtlbGVtZW50IHNldE9iamVjdDpwLmltYWdlUmVuZGVyZXIoKSBmb3JLZXk6V2ViQ29y
ZUVsZW1lbnRJbWFnZVJlbmRlcmVyS2V5XTsKKyAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFw
ICpwID0gci0+cGl4bWFwUHRyKCk7CisgICAgICAgICAgICAgICAgaWYgKHAtPmltYWdlUmVuZGVy
ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgW2VsZW1lbnQgc2V0T2JqZWN0OnAtPmltYWdlUmVu
ZGVyZXIoKSBmb3JLZXk6V2ViQ29yZUVsZW1lbnRJbWFnZVJlbmRlcmVyS2V5XTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaW50IHgsIHk7Cg==
</data>
<flag name="review"
          id="1152"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5406</attachid>
            <date>2006-01-01 01:43:52 -0800</date>
            <delta_ts>2006-01-02 14:35:51 -0800</delta_ts>
            <desc>Change pixmap() to return a const QPixmap&amp;</desc>
            <filename>6219_easy_r2.patch</filename>
            <type>text/plain</type>
            <size>2542</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC1wIC11IC1y
MS43MSBXZWJDb3JlL0NoYW5nZUxvZwotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJMzEgRGVjIDIwMDUg
MDA6MTQ6MTkgLTAwMDAJMS43MQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJMSBKYW4gMjAwNiAwOTo0
ODozOCAtMDAwMApAQCAtMSwzICsxLDE3IEBACisyMDA2LTAxLSMjICBNaXR6IFBldHRlbCAgPG9w
ZW5kYXJ3aW4ub3JnQG1pdHpwZXR0ZWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIC0gZml4IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjIxOQorICAgICAgICAgIFBlcmYgcmVncmVzc2lvbjogLVtOU0lt
YWdlIGluaXRXaXRoRGF0YTpdIGNhbGxlZCByZXBlYXRlZGx5IHdoaWxlCisgICAgICAgICAgbW92
aW5nIHRoZSBjdXJzb3Igb3ZlciBhbiBpbWFnZQorCisgICAgICAgICoga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9pbWFnZS5oOgorICAgICAgICAoa2h0bWw6OlJlbmRlckltYWdlOjpwaXhtYXApOiBS
ZXR1cm4gYSBjb25zdCBRUGl4bWFwJi4KKyAgICAgICAgKiBrd3EvV2ViQ29yZUJyaWRnZS5tbToK
KyAgICAgICAgKC1bV2ViQ29yZUJyaWRnZSBlbGVtZW50QXRQb2ludDpdKTogQXZvaWQgY29weWlu
ZyB0aGUgUVBpeG1hcCBhbmQgaXRzCisgICAgICAgIHJlbmRlcmVyLgorCiAyMDA1LTEyLTMwICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNp
ZWouCkluZGV4OiBXZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2lt
YWdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAtcjEuMjkgV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgKLS0tIFdlYkNvcmUva2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9pbWFnZS5oCTIxIE5vdiAyMDA1IDAxOjIwOjI1IC0wMDAwCTEuMjkKKysrIFdl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCTEgSmFuIDIwMDYgMDc6MjU6NTcg
LTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFBp
eG1hcCggY29uc3QgUVBpeG1hcCAmLCBjb25zdCBRUmVjdCYsIENhY2hlZEltYWdlICopOwogCi0g
ICAgUVBpeG1hcCBwaXhtYXAoKSBjb25zdCB7IHJldHVybiBwaXg7IH0KKyAgICBjb25zdCBRUGl4
bWFwJiBwaXhtYXAoKSBjb25zdCB7IHJldHVybiBwaXg7IH0KICAgICAvLyBkb24ndCBldmVuIHRo
aW5rIGFib3V0IG1ha2luZyB0aGlzIG1ldGhvZCB2aXJ0dWFsIQogICAgIERPTTo6SFRNTEVsZW1l
bnRJbXBsKiBlbGVtZW50KCkgY29uc3QKICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxET006OkhU
TUxFbGVtZW50SW1wbCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQpJbmRleDogV2ViQ29y
ZS9rd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NDYKZGlm
ZiAtcCAtdSAtcjEuNDQ2IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0KLS0tIFdlYkNvcmUv
a3dxL1dlYkNvcmVCcmlkZ2UubW0JMjYgRGVjIDIwMDUgMjE6NDY6MTcgLTAwMDAJMS40NDYKKysr
IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0JMSBKYW4gMjAwNiAwNzoyNjowNSAtMDAwMApA
QCAtMTEyNCw3ICsxMTI0LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5p
c0ltYWdlKCkpIHsKICAgICAgICAgICAgIFJlbmRlckltYWdlICpyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVySW1hZ2UgKj4obm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBpZiAoIXItPmlzRGlz
cGxheWluZ0Vycm9yKCkpIHsKLSAgICAgICAgICAgICAgICBRUGl4bWFwIHAgPSByLT5waXhtYXAo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFwJiBwID0gci0+cGl4bWFwKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKHAuaW1hZ2VSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAgICBb
ZWxlbWVudCBzZXRPYmplY3Q6cC5pbWFnZVJlbmRlcmVyKCkgZm9yS2V5OldlYkNvcmVFbGVtZW50
SW1hZ2VSZW5kZXJlcktleV07CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="1157"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>