<?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>118513</bug_id>
          
          <creation_ts>2013-07-09 10:17:21 -0700</creation_ts>
          <short_desc>Cache property access for JSC API static functions</short_desc>
          <delta_ts>2022-02-27 23:27:04 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>OS X 10.8</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Yi Shen">max.hong.shen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cshu</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>907171</commentid>
    <comment_count>0</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2013-07-09 10:17:21 -0700</bug_when>
    <thetext>By caching property access, the JSC API static function call could be 1/4 times faster than before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907176</commentid>
    <comment_count>1</comment_count>
      <attachid>206339</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2013-07-09 10:27:48 -0700</bug_when>
    <thetext>Created attachment 206339
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907178</commentid>
    <comment_count>2</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2013-07-09 10:28:56 -0700</bug_when>
    <thetext>                 No cache        Cache
result(ms)
1.                  8000          6003
2.                  7600          5947
3.                  7987          5912
4.                  8002          5886
5.                  8155          5934
6.                  7539          5953
7.                  8562          5958
8.                  7455          5952
9.                  7936          5913
10.                7461          5910
------------------------------
avg                7869          5937</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907180</commentid>
    <comment_count>3</comment_count>
      <attachid>206340</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2013-07-09 10:30:16 -0700</bug_when>
    <thetext>Created attachment 206340
proposal patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907394</commentid>
    <comment_count>4</comment_count>
      <attachid>206340</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-10 10:26:01 -0700</bug_when>
    <thetext>Comment on attachment 206340
proposal patch

I don&apos;t think this is correct.

Client functions are allowed to make arbitrary decisions, and we can&apos;t assume they&apos;ll make the same decision each time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907720</commentid>
    <comment_count>5</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2013-07-11 11:19:20 -0700</bug_when>
    <thetext>Thanks for review! Could you please explain a bit more about the &apos;arbitrary decisions&apos; that you have mentioned? 

As I noticed that the JSCallbackObject&lt;Parent&gt;::staticFunctionGetter() always checks for cached or override property when it gets called.  So, I added a similar check before calling staticFunctionGetter() and pass the cached property to the property slot only if it exists. By doing this, we can cache the property access through tryCacheGetByID() (JITStubs.cpp). 

(In reply to comment #4)
&gt; (From update of attachment 206340 [details])
&gt; I don&apos;t think this is correct.
&gt; 
&gt; Client functions are allowed to make arbitrary decisions, and we can&apos;t assume they&apos;ll make the same decision each time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>206339</attachid>
            <date>2013-07-09 10:27:48 -0700</date>
            <delta_ts>2013-07-09 10:27:48 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>JSCAPIStaticFunction.html</filename>
            <type>text/html</type>
            <size>411</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRl
eHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj48L21ldGE+CjxzY3JpcHQ+CmZ1bmN0aW9uIFJ1
blRlc3RzKCkKewogICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CiAgICB9CgogICAgdmFyIHNzID0gRGF0ZS5ub3coKTsKICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7IGkrKykgewogICAgICAgICAgICAgdGVzdFJ1bm5lci5k
b1NxcnQoNCk7IC8vIHN0YXRpYyBmdW5jdGlvbgogICAgfQogICAgYWxlcnQoRGF0ZS5ub3coKSAt
IHNzKTsKfQo8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keSBvbmxvYWQ9IlJ1blRlc3RzKCkiPgo8L2Jv
ZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206340</attachid>
            <date>2013-07-09 10:30:16 -0700</date>
            <delta_ts>2022-02-27 23:27:04 -0800</delta_ts>
            <desc>proposal patch</desc>
            <filename>118513.patch</filename>
            <type>text/plain</type>
            <size>2552</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0LmgKaW5kZXggMTZk
OGFhMi4uNGYzNmZlOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nh
bGxiYWNrT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNr
T2JqZWN0LmgKQEAgLTE2OSw3ICsxNjksNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUGFyZW50Ojpt
ZXRob2RUYWJsZTsKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IFByb2hpYml0c1Byb3BlcnR5Q2FjaGluZyB8IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8gfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0
YW5jZSB8IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBPdmVycmlkZXNHZXRQcm9wZXJ0eU5hbWVz
IHwgUGFyZW50OjpTdHJ1Y3R1cmVGbGFnczsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvIHwgSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IFBhcmVudDo6U3RydWN0dXJlRmxhZ3M7
CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmgKaW5kZXggYjkyZTMxNi4uMmZhN2Q2ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgKQEAgLTE3Miw3
ICsxNzIsOCBAQCBib29sIEpTQ2FsbGJhY2tPYmplY3Q8UGFyZW50Pjo6Z2V0T3duUHJvcGVydHlT
bG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoT3BhcXVlSlNDbGFzc1N0YXRpY0Z1bmN0aW9uc1RhYmxlKiBzdGF0aWNGdW5jdGlv
bnMgPSBqc0NsYXNzLT5zdGF0aWNGdW5jdGlvbnMoZXhlYykpIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljRnVuY3Rpb25zLT5jb250YWlucyhuYW1lKSkgewotICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBzdGF0aWNGdW5jdGlvbkdldHRlcik7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghUGFyZW50OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHN0YXRpY0Z1bmN0aW9uR2V0dGVyKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTQyOTQyOS4uMDI2YzhkZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDctMDkgIFlpIFNoZW4gIDxt
YXguaG9uZy5zaGVuQGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3Mg
Zm9yIEpTQyBBUEkgc3RhdGljIGZ1bmN0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExODUxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJ5IGNhY2hpbmcgcHJvcGVydHkgYWNjZXNzLCB0aGUgSlND
IEFQSSBzdGF0aWMgZnVuY3Rpb24gY2FsbCBjb3VsZCBiZSAxLzQgdGltZXMgCisgICAgICAgIGZh
c3RlciB0aGFuIGJlZm9yZS4KKworICAgICAgICAqIEFQSS9KU0NhbGxiYWNrT2JqZWN0Lmg6Cisg
ICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6
OjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorCiAyMDEzLTA3LTA5ICBNYXJrIExhbSAgPG1hcmsubGFt
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggMzAlIEpTQmVuY2ggcmVncmVzc2lvbiAoY2F1c2Vk
IGJ5IGFkZGluZyBjb2x1bW4gbnVtYmVycyB0byBzdGFjayB0cmFjZXMpLgo=
</data>
<flag name="review"
          id="228008"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>