<?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>133207</bug_id>
          
          <creation_ts>2014-05-23 00:56:12 -0700</creation_ts>
          <short_desc>GC should have fast-path for destroying strings.</short_desc>
          <delta_ts>2017-03-14 13:08:02 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mhahnenberg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1011192</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-23 00:56:12 -0700</bug_when>
    <thetext>I have this little idea for making GC destroy JSStrings more efficiently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011193</commentid>
    <comment_count>1</comment_count>
      <attachid>231948</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-23 00:57:05 -0700</bug_when>
    <thetext>Created attachment 231948
Patch idea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011195</commentid>
    <comment_count>2</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-23 00:58:43 -0700</bug_when>
    <thetext>Benchmark report for Octane on CabMook (MacBookPro10,1).

VMs tested:
&quot;ToT&quot; at /Volumes/Data/Source/Safari/Reference-OpenSource/WebKitBuild/Release/jsc
&quot;Hacks&quot; at /Volumes/Data/Source/Safari/OpenSource/WebKitBuild/Release/jsc

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                              ToT                      Hacks                                       

encrypt                 1.08497+-0.01829          1.07993+-0.02012       
decrypt                19.30935+-0.24879         19.29161+-0.02956       
deltablue      x2       1.21815+-0.00833          1.21247+-0.01500       
earley                  2.19743+-0.05550          2.18668+-0.00854       
boyer                  23.90228+-0.06863    ?    23.96938+-0.14821       ?
navier-stokes  x2      23.86052+-0.01006    ?    23.86080+-0.00542       ?
raytrace       x2       8.10303+-0.12664    ?     8.15091+-0.17171       ?
richards       x2       0.60843+-0.04798          0.60282+-0.01505       
splay          x2       1.55989+-0.08370          1.49182+-0.01882         might be 1.0456x faster
regexp         x2     199.19518+-0.92605        197.05836+-2.10837         might be 1.0108x faster
pdfjs          x2     266.75545+-0.98525    ^   262.35065+-0.61502       ^ definitely 1.0168x faster
mandreel       x2     299.90476+-2.45375    ?   301.06825+-3.98014       ?
gbemu          x2     272.13303+-3.90926    ?   276.64499+-7.16828       ? might be 1.0166x slower
closure                 2.37485+-0.01098          2.37377+-0.01897       
jquery                 31.55491+-0.20196         31.54801+-0.22624       
box2d          x2     120.80826+-6.90088        120.15285+-5.52892       
zlib           x2    1798.62225+-5.93989       1780.48275+-88.35760        might be 1.0102x faster
typescript     x2    3297.27832+-59.34699   ?  3307.64124+-34.31568      ?

&lt;arithmetic&gt;          422.01728+-3.34998        421.39617+-6.21773         might be 1.0015x faster
&lt;geometric&gt; *          35.74942+-0.37086         35.56974+-0.26158         might be 1.0051x faster
&lt;harmonic&gt;              3.52166+-0.12538          3.48135+-0.04920         might be 1.0116x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011260</commentid>
    <comment_count>3</comment_count>
      <attachid>231948</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-23 09:48:00 -0700</bug_when>
    <thetext>Comment on attachment 231948
Patch idea

I&apos;m not a huge fan of this. The brittleness of the tight coupling between GC and string, and the fact that non-string has to do an extra branch, feels more significant than the speedup.

Maybe this would look better if there were an explicit String dtorType, and strings all got segregated into their own special MarkedBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011270</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-23 10:05:59 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 231948 [details])
&gt; I&apos;m not a huge fan of this. The brittleness of the tight coupling between GC and string, and the fact that non-string has to do an extra branch, feels more significant than the speedup.

I paid for the cell type branch by killing the branch on dtorType, no? ;)

&gt; Maybe this would look better if there were an explicit String dtorType, and strings all got segregated into their own special MarkedBlock.

Yeah maybe. That seems like it could have other effects though. I can try it and see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011318</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-23 11:46:47 -0700</bug_when>
    <thetext>How about this:

(1) A tiny patch to specialize the dtor call as a template parameter, so there&apos;s no branch on it. Is great good.

(2) A bigger patch to put all strings in their own MarkedAllocator. Specialize the sweeping of that fellow, too. Now, we&apos;ve removed a branch from sweeping strings, and the system is still pretty flexible.

Eventually, we will probably build on this to allocating StringImpls inline in JSString, and remove malloc / free / destruction from most strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287757</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2017-03-14 13:08:02 -0700</bug_when>
    <thetext>GC actually does have a fast path for string destruction now that they get their own space.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231948</attachid>
            <date>2014-05-23 00:57:05 -0700</date>
            <delta_ts>2014-05-23 14:44:56 -0700</delta_ts>
            <desc>Patch idea</desc>
            <filename>bug-133207.diff</filename>
            <type>text/plain</type>
            <size>4614</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDQ2NzFiNTAuLjE2ZGI0MjgwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxNC0wNS0yMyAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgR0Mgc2hvdWxkIGhhdmUgZmFzdC1wYXRo
IGZvciBkZXN0cm95aW5nIHN0cmluZ3MuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8x
MzMyMDc+CisKKyAgICAgICAgQ2hlY2sgaWYgdGhlIGNlbGwgYmVpbmcgZGVzdHJveWVkIGlzIGEg
c3RyaW5nLCBhbmQgaWYgc28sIGJ5cGFzcyB0aGUKKyAgICAgICAgbWV0aG9kIHRhYmxlIGxvb2t1
cCBhbmQgZ28gZGlyZWN0bHkgdG8gfkpTU3RyaW5nKCkuCisKKyAgICAgICAgQWxzbyBzdHJlYW1s
aW5lZCBjYWxsRGVzdHJ1Y3RvcigpIGJ5IHRlbXBsYXRpemluZyBmb3IgZGVzdHJ1Y3RvciB0eXBl
CisgICAgICAgIGFuZCBpbmxpbmluZyB0aGUgbWV0aG9kIHRhYmxlIGxvb2t1cCB3aXRob3V0IGFs
bCB0aGUgaG9vcC1qdW1waW5nIHRvCisgICAgICAgIGdldCB0byB0aGUgc3RydWN0dXJlLgorCisg
ICAgICAgIExvb2tzIGxpa2UgYSBjb25zaXN0ZW50IH4xJSBzcGVlZC11cCBvbiBPY3RhbmUvcmVn
ZXhwIGFuZCBPY3RhbmUvcGRmanMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmNhbGxEZXN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnNw
ZWNpYWxpemVkU3dlZXApOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQ2VsbC5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU0NlbGw6Om1ldGhvZFRhYmxlRm9yRGVzdHJ1Y3Rpb24pOiBEZWxldGVk
LgorCiAyMDE0LTA1LTIyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OKHIxNTQ3OTcpOiBEZWJ1Z2dlciBjcmFzaGVzIHdoZW4gc3RlcHBpbmcgb3Zl
ciBhbiB1bmNhdWdodCBleGNlcHRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrZWRCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5jcHAKaW5kZXggMTA0ZjkyNi4uZGM1ODEwNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKQEAgLTU0LDEzICs1NCwyNCBAQCBNYXJrZWRCbG9j
azo6TWFya2VkQmxvY2soUmVnaW9uKiByZWdpb24sIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9y
LCBzaXplX3QgY2VsbAogICAgIEhFQVBfTE9HX0JMT0NLX1NUQVRFX1RSQU5TSVRJT04odGhpcyk7
CiB9CiAKK3RlbXBsYXRlPE1hcmtlZEJsb2NrOjpEZXN0cnVjdG9yVHlwZSBkdG9yVHlwZT4KIGlu
bGluZSB2b2lkIE1hcmtlZEJsb2NrOjpjYWxsRGVzdHJ1Y3RvcihKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgLy8gQSBwcmV2aW91cyBlYWdlciBzd2VlcCBtYXkgYWxyZWFkeSBoYXZlIHJ1biBjZWxsJ3Mg
ZGVzdHJ1Y3Rvci4KICAgICBpZiAoY2VsbC0+aXNaYXBwZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2VsbC0+bWV0aG9kVGFibGVGb3JEZXN0cnVjdGlvbigpLT5kZXN0cm95KGNlbGwpOwor
ICAgIGlmIChkdG9yVHlwZSA9PSBNYXJrZWRCbG9jazo6Tm9ybWFsKQorICAgICAgICBqc0Nhc3Q8
SlNEZXN0cnVjdGlibGVPYmplY3QqPihjZWxsKS0+Y2xhc3NJbmZvKCktPm1ldGhvZFRhYmxlLmRl
c3Ryb3koY2VsbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZhc3QtcGF0aCBmb3IgZGVzdHJv
eWluZyBTdHJpbmdzIHNpbmNlIHdlIGtub3cgd2hpY2ggZGVzdHJ1Y3RvciB0byB1c2UKKyAgICAg
ICAgLy8gd2l0aG91dCBsb29raW5nIGF0IHRoZSBDbGFzc0luZm8uCisgICAgICAgIGlmIChjZWxs
LT5pc1N0cmluZygpKQorICAgICAgICAgICAganNDYXN0PEpTU3RyaW5nKj4oY2VsbCktPn5KU1N0
cmluZygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjZWxsLT5zdHJ1Y3R1cmUoKnZtKCkp
LT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9CisKICAgICBj
ZWxsLT56YXAoKTsKIH0KIApAQCAtODIsNyArOTMsNyBAQCBNYXJrZWRCbG9jazo6RnJlZUxpc3Qg
TWFya2VkQmxvY2s6OnNwZWNpYWxpemVkU3dlZXAoKQogICAgICAgICBKU0NlbGwqIGNlbGwgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxKU0NlbGwqPigmYXRvbXMoKVtpXSk7CiAKICAgICAgICAgaWYg
KGR0b3JUeXBlICE9IE1hcmtlZEJsb2NrOjpOb25lICYmIGJsb2NrU3RhdGUgIT0gTmV3KQotICAg
ICAgICAgICAgY2FsbERlc3RydWN0b3IoY2VsbCk7CisgICAgICAgICAgICBjYWxsRGVzdHJ1Y3Rv
cjxkdG9yVHlwZT4oY2VsbCk7CiAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJl
ZUxpc3QpIHsKICAgICAgICAgICAgIEZyZWVDZWxsKiBmcmVlQ2VsbCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RnJlZUNlbGwqPihjZWxsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
ay5oCmluZGV4IDVhMTg0M2EuLmVjYTAzOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya2VkQmxvY2suaApAQCAtMTk3LDcgKzE5Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBNYXJrZWRCbG9jayhSZWdpb24qLCBNYXJrZWRBbGxvY2F0b3IqLCBzaXplX3QgY2VsbFNpemUs
IERlc3RydWN0b3JUeXBlKTsKICAgICAgICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgc2l6ZV90
IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwotICAgICAgICB2b2lkIGNhbGxEZXN0cnVjdG9yKEpT
Q2VsbCopOworCisgICAgICAgIHRlbXBsYXRlPERlc3RydWN0b3JUeXBlPiB2b2lkIGNhbGxEZXN0
cnVjdG9yKEpTQ2VsbCopOwogICAgICAgICB0ZW1wbGF0ZTxCbG9ja1N0YXRlLCBTd2VlcE1vZGUs
IERlc3RydWN0b3JUeXBlPiBGcmVlTGlzdCBzcGVjaWFsaXplZFN3ZWVwKCk7CiAgICAgICAgIAog
ICAgICAgICBzaXplX3QgbV9hdG9tc1BlckNlbGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ2VsbC5oCmluZGV4IDEwMWZlOGQuLjk5N2Y3ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2VsbC5oCkBAIC0xMzIsNyArMTMyLDYgQEAgcHVibGljOgogICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Q7CiAgICAgY29uc3QgTWV0aG9kVGFibGUqIG1ldGhv
ZFRhYmxlKCkgY29uc3Q7CiAgICAgY29uc3QgTWV0aG9kVGFibGUqIG1ldGhvZFRhYmxlKFZNJikg
Y29uc3Q7Ci0gICAgY29uc3QgTWV0aG9kVGFibGUqIG1ldGhvZFRhYmxlRm9yRGVzdHJ1Y3Rpb24o
KSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBzdGF0aWMgdm9pZCBwdXRC
eUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCmluZGV4IDI4MDk0NjkuLjI3YmM5ZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKQEAgLTE4MCwxMSAr
MTgwLDYgQEAgaW5saW5lIHZvaWQgSlNDZWxsOjpzZXRTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICBtX2luZGV4aW5nVHlwZSA9IHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCk7CiB9CiAKLWlubGluZSBjb25zdCBNZXRob2RUYWJsZSogSlNDZWxsOjptZXRob2RUYWJs
ZUZvckRlc3RydWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJmNsYXNzSW5mbygpLT5tZXRo
b2RUYWJsZTsKLX0KLQogaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBKU0NlbGw6Om1ldGhvZFRh
YmxlKCkgY29uc3QKIHsKICAgICBWTSYgdm0gPSAqSGVhcDo6aGVhcCh0aGlzKS0+dm0oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>