RESOLVED FIXED Bug 143146
Clean up Identifier factories to clarify the meaning of StringImpl*
https://bugs.webkit.org/show_bug.cgi?id=143146
Summary Clean up Identifier factories to clarify the meaning of StringImpl*
Yusuke Suzuki
Reported 2015-03-27 13:03:48 PDT
Clean up Identifier factories to clarify the meaning of StringImpl*
Attachments
Patch (207.66 KB, patch)
2015-03-27 13:13 PDT, Yusuke Suzuki
no flags
Patch (207.11 KB, patch)
2015-03-27 13:31 PDT, Yusuke Suzuki
no flags
Patch (209.81 KB, patch)
2015-03-28 02:00 PDT, Yusuke Suzuki
no flags
Yusuke Suzuki
Comment 1 2015-03-27 13:13:35 PDT
Yusuke Suzuki
Comment 2 2015-03-27 13:28:33 PDT
Almost all changes in WebKit2 / WebKit / WebCore are Identifier => Identifier::fromString/Identifier::fromUid. In WTF, StringImpl* is now cleaned up to explicitly use it as uid. Renaming isUnique to isSymbol (https://bugs.webkit.org/show_bug.cgi?id=141106#c37) Introducing 3 string kinds, 1. StringNormal (non-atomic, non-symbol) 2. StringAtomic (atomic, non-symbol) 3. StringSymbol (non-atomic, symbol) In Identifier, explicitly define 2 factory functions, fromUid and fromString.
Yusuke Suzuki
Comment 3 2015-03-27 13:31:32 PDT
Yusuke Suzuki
Comment 4 2015-03-28 02:00:29 PDT
Yusuke Suzuki
Comment 5 2015-03-31 11:37:06 PDT
Object.getOwnPropertySymbols patch becomes too large. So this patch is spawned from it.
Filip Pizlo
Comment 6 2015-03-31 11:44:34 PDT
Performance impact? Please use Tools/Scripts/run-jsc-benchmarks Baseline:<path to baseline jsc> Mine:<path to jsc with your changes> Preferably also configure it to run Octane, and post those results.
Yusuke Suzuki
Comment 7 2015-03-31 11:46:27 PDT
(In reply to comment #6) > Performance impact? > > Please use Tools/Scripts/run-jsc-benchmarks Baseline:<path to baseline jsc> > Mine:<path to jsc with your changes> > > Preferably also configure it to run Octane, and post those results. Thanks! I'll take it.
Yusuke Suzuki
Comment 8 2015-03-31 12:29:21 PDT
First result, not using Octane. I'll setup environment to run Octane in run-jsc-benchmarks Benchmark report for SunSpider, LongSpider, V8Spider, and JSRegress on yusuke (MacBookPro8,2). VMs tested: "Baseline" at /Users/yusuke/dev/WebKit/WebKitBuild/Release/jsc "Mine" at /Users/yusuke/dev/WebKit/WebKitBuild/identifier/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. Baseline Mine SunSpider: 3d-cube 5.6353+-0.8267 5.4421+-0.2245 might be 1.0355x faster 3d-morph 6.0991+-0.1264 6.0425+-0.0250 3d-raytrace 7.3867+-1.3110 6.8843+-0.2270 might be 1.0730x faster access-binary-trees 2.4324+-0.0666 ? 2.4432+-0.1645 ? access-fannkuch 6.5162+-0.1185 ? 6.5640+-0.1765 ? access-nbody 3.1632+-0.4174 ? 3.1801+-0.6810 ? access-nsieve 3.3439+-0.1437 ? 3.3710+-0.0997 ? bitops-3bit-bits-in-byte 1.9228+-0.0555 1.9150+-0.0400 bitops-bits-in-byte 3.6048+-0.0783 3.5626+-0.0873 might be 1.0119x faster bitops-bitwise-and 2.3672+-0.1876 ? 2.3697+-0.1335 ? bitops-nsieve-bits 5.6820+-2.9908 4.6463+-1.3994 might be 1.2229x faster controlflow-recursive 2.3619+-0.0920 ? 2.3641+-0.1382 ? crypto-aes 5.2573+-2.5325 4.6362+-0.2642 might be 1.1340x faster crypto-md5 2.6955+-0.0563 2.6624+-0.0451 might be 1.0124x faster crypto-sha1 2.8760+-0.2136 2.8194+-0.2818 might be 1.0201x faster date-format-tofte 9.8620+-0.2264 9.7141+-0.3831 might be 1.0152x faster date-format-xparb 5.5468+-0.0819 5.5127+-0.1552 math-cordic 3.4692+-0.0961 3.4542+-0.1008 math-partial-sums 6.6200+-3.6915 ? 7.2188+-3.1253 ? might be 1.0904x slower math-spectral-norm 2.3818+-0.0517 ? 2.3848+-0.0923 ? regexp-dna 9.0883+-4.1359 7.4827+-0.1531 might be 1.2146x faster string-base64 5.8726+-2.9952 4.8553+-0.1943 might be 1.2095x faster string-fasta 7.1832+-0.2976 ? 7.2688+-0.1834 ? might be 1.0119x slower string-tagcloud 10.3871+-0.2510 ? 10.7244+-1.5029 ? might be 1.0325x slower string-unpack-code 22.9854+-6.1520 22.3551+-4.2903 might be 1.0282x faster string-validate-input 5.1447+-0.0773 ? 5.3025+-0.1813 ? might be 1.0307x slower <arithmetic> 5.7648+-0.1618 5.5837+-0.2443 might be 1.0324x faster Baseline Mine LongSpider: 3d-cube 937.5034+-28.5713 ! 983.3462+-8.7573 ! definitely 1.0489x slower 3d-morph 1590.1312+-4.7993 ? 1596.8079+-5.8036 ? 3d-raytrace 819.1777+-17.7360 ? 834.9861+-19.5181 ? might be 1.0193x slower access-binary-trees 1141.2209+-20.5716 ? 1151.3492+-8.5751 ? access-fannkuch 355.6476+-28.1854 354.8389+-16.5104 access-nbody 675.2780+-3.6932 ^ 666.6944+-2.3261 ^ definitely 1.0129x faster access-nsieve 955.2313+-29.9591 948.9088+-25.1972 bitops-3bit-bits-in-byte 52.2550+-0.8546 ? 52.9308+-2.7214 ? might be 1.0129x slower bitops-bits-in-byte 104.7086+-12.9789 101.7750+-4.9805 might be 1.0288x faster bitops-nsieve-bits 811.8054+-16.8935 ? 822.7943+-21.4909 ? might be 1.0135x slower controlflow-recursive 525.1616+-6.3043 ! 534.5832+-2.3200 ! definitely 1.0179x slower crypto-aes 778.6168+-13.1455 ? 779.4603+-18.0428 ? crypto-md5 645.5275+-4.0026 ? 647.6222+-13.4067 ? crypto-sha1 739.7191+-14.2289 ? 748.9631+-36.3434 ? might be 1.0125x slower date-format-tofte 844.8108+-41.1818 819.2424+-36.6379 might be 1.0312x faster date-format-xparb 794.2470+-37.3342 792.3867+-71.9792 math-cordic 658.2045+-5.8346 657.2531+-2.8058 math-partial-sums 594.8108+-22.7876 ? 600.8997+-28.3040 ? might be 1.0102x slower math-spectral-norm 905.7029+-5.4484 ? 911.6506+-13.6982 ? string-base64 422.6147+-22.4303 414.5021+-13.2196 might be 1.0196x faster string-fasta 484.1487+-6.3226 482.7860+-9.8633 string-tagcloud 234.5778+-13.3018 ? 238.8315+-1.6006 ? might be 1.0181x slower <geometric> 562.2380+-4.6091 ? 564.0316+-2.5589 ? might be 1.0032x slower Baseline Mine V8Spider: crypto 63.4139+-2.4498 61.9439+-3.0494 might be 1.0237x faster deltablue 101.8953+-4.4657 96.8514+-16.4290 might be 1.0521x faster earley-boyer 45.6738+-1.2495 ? 45.6927+-1.1642 ? raytrace 41.2145+-2.3192 39.7695+-2.1257 might be 1.0363x faster regexp 74.3088+-3.2638 ? 74.6990+-5.3181 ? richards 84.6373+-4.7250 ? 90.2291+-5.7002 ? might be 1.0661x slower splay 42.7302+-3.5544 40.4140+-4.0788 might be 1.0573x faster <geometric> 61.3216+-1.0692 60.4458+-1.8795 might be 1.0145x faster Baseline Mine JSRegress: abs-boolean 3.1035+-0.1283 ? 3.2075+-0.1012 ? might be 1.0335x slower adapt-to-double-divide 17.1965+-0.6752 17.1837+-0.5172 aliased-arguments-getbyval 1.2579+-0.0593 ? 1.4305+-0.5950 ? might be 1.1372x slower allocate-big-object 2.7850+-0.1101 2.7781+-0.0495 arguments-named-and-reflective 14.0236+-3.7189 13.5850+-2.7831 might be 1.0323x faster arguments-out-of-bounds 15.9777+-0.7605 ? 16.1884+-2.3050 ? might be 1.0132x slower arguments-strict-mode 12.6647+-2.4461 11.7845+-0.2569 might be 1.0747x faster arguments 11.4329+-3.3660 ? 11.6825+-2.9243 ? might be 1.0218x slower arity-mismatch-inlining 0.9380+-0.0447 ? 0.9843+-0.2069 ? might be 1.0493x slower array-access-polymorphic-structure 7.3102+-0.6834 ? 9.6050+-4.3327 ? might be 1.3139x slower array-nonarray-polymorhpic-access 40.1147+-1.9214 ? 41.7183+-0.9603 ? might be 1.0400x slower array-prototype-every 100.4833+-3.5329 ? 102.1475+-7.4441 ? might be 1.0166x slower array-prototype-forEach 97.0215+-3.4324 ? 99.3673+-5.8660 ? might be 1.0242x slower array-prototype-map 118.4540+-10.4749 111.4524+-9.8444 might be 1.0628x faster array-prototype-some 100.6805+-6.0608 ? 102.4485+-8.3114 ? might be 1.0176x slower array-splice-contiguous 48.4435+-2.5237 47.7895+-4.8558 might be 1.0137x faster array-with-double-add 4.4432+-0.2995 4.4421+-0.1642 array-with-double-increment 3.7227+-0.1572 ? 3.8392+-0.1810 ? might be 1.0313x slower array-with-double-mul-add 5.2820+-0.1885 5.2496+-0.1389 array-with-double-sum 3.4246+-0.1155 ? 3.4357+-0.1269 ? array-with-int32-add-sub 7.7073+-0.0502 7.6254+-0.0663 might be 1.0107x faster array-with-int32-or-double-sum 3.4621+-0.0380 ? 3.5204+-0.1001 ? might be 1.0169x slower ArrayBuffer-DataView-alloc-large-long-lived 40.6982+-4.0840 40.0147+-3.5477 might be 1.0171x faster ArrayBuffer-DataView-alloc-long-lived 16.8784+-3.5450 ? 17.5261+-4.4258 ? might be 1.0384x slower ArrayBuffer-Int32Array-byteOffset 4.0253+-0.1910 4.0235+-0.1830 ArrayBuffer-Int8Array-alloc-large-long-lived 42.0272+-4.9528 ? 43.0339+-7.6263 ? might be 1.0240x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 28.6893+-4.9279 ? 29.0190+-5.5475 ? might be 1.0115x slower ArrayBuffer-Int8Array-alloc-long-lived 16.2690+-4.8019 15.1385+-0.3821 might be 1.0747x faster ArrayBuffer-Int8Array-alloc 15.5809+-6.2996 ? 15.6381+-5.0596 ? asmjs_bool_bug 7.8658+-0.0987 ? 9.1540+-3.8345 ? might be 1.1638x slower assign-custom-setter-polymorphic 3.2542+-0.1005 ? 3.3127+-0.1421 ? might be 1.0180x slower assign-custom-setter 4.3877+-0.1720 ? 4.7025+-0.2670 ? might be 1.0718x slower basic-set 9.5545+-0.3787 ? 9.8511+-0.5647 ? might be 1.0310x slower big-int-mul 4.5270+-0.1025 4.4946+-0.3037 boolean-test 3.4167+-0.1510 3.3578+-0.1334 might be 1.0175x faster branch-fold 4.1937+-0.0446 ? 4.2535+-0.1148 ? might be 1.0143x slower by-val-generic 8.6541+-0.1751 ? 8.7014+-0.1352 ? call-spread-apply 36.3522+-4.4309 35.9220+-4.5184 might be 1.0120x faster call-spread-call 26.2310+-0.4139 ? 28.4358+-4.0530 ? might be 1.0841x slower captured-assignments 0.4978+-0.0275 0.4824+-0.0313 might be 1.0319x faster cast-int-to-double 5.5855+-0.0378 ? 5.5998+-0.0518 ? cell-argument 8.7169+-0.2207 ? 8.9020+-0.7139 ? might be 1.0212x slower cfg-simplify 3.1686+-0.1111 3.0804+-0.0293 might be 1.0286x faster chain-getter-access 11.4119+-0.1681 11.3120+-0.1248 cmpeq-obj-to-obj-other 12.4672+-2.0397 11.8927+-1.1730 might be 1.0483x faster constant-test 5.2326+-0.0310 ? 5.3173+-0.1953 ? might be 1.0162x slower DataView-custom-properties 48.2158+-4.9422 47.7755+-4.0560 deconstructing-parameters-overridden-by-function 0.5242+-0.0229 0.5222+-0.0271 delay-tear-off-arguments-strictmode 16.4005+-6.0962 16.0378+-2.3497 might be 1.0226x faster deltablue-varargs 220.6406+-6.6187 217.3112+-2.6375 might be 1.0153x faster destructuring-arguments 19.3137+-3.5145 18.2872+-0.4229 might be 1.0561x faster destructuring-swap 5.3704+-0.0561 ? 5.4240+-0.1927 ? direct-arguments-getbyval 1.2928+-0.0921 1.2174+-0.0273 might be 1.0620x faster div-boolean-double 5.4901+-0.0285 5.4852+-0.0388 div-boolean 8.1672+-0.2507 ? 8.3152+-0.6649 ? might be 1.0181x slower double-get-by-val-out-of-bounds 4.9183+-0.1857 4.8932+-0.1566 double-pollution-getbyval 9.0648+-0.1611 9.0345+-0.0823 double-pollution-putbyoffset 4.6896+-0.0618 4.6486+-0.3254 double-to-int32-typed-array-no-inline 2.3485+-0.0542 ? 2.4542+-0.0639 ? might be 1.0450x slower double-to-int32-typed-array 2.1347+-0.0534 2.1020+-0.0202 might be 1.0156x faster double-to-uint32-typed-array-no-inline 2.4545+-0.0274 2.4208+-0.0318 might be 1.0139x faster double-to-uint32-typed-array 2.1401+-0.0224 ? 2.1575+-0.0842 ? elidable-new-object-dag 49.1843+-4.1354 ? 51.7391+-1.5152 ? might be 1.0519x slower elidable-new-object-roflcopter 53.4616+-4.3610 ? 56.7514+-7.6762 ? might be 1.0615x slower elidable-new-object-then-call 48.7101+-3.9136 43.9800+-1.8016 might be 1.1076x faster elidable-new-object-tree 56.1705+-7.0712 52.7722+-7.4781 might be 1.0644x faster empty-string-plus-int 6.1521+-0.0884 ? 7.0362+-2.8177 ? might be 1.1437x slower emscripten-cube2hash 44.7760+-0.6143 42.1935+-2.6936 might be 1.0612x faster exit-length-on-plain-object 17.4562+-4.8086 16.4266+-4.4949 might be 1.0627x faster external-arguments-getbyval 1.4322+-0.2876 1.2967+-0.0686 might be 1.1045x faster external-arguments-putbyval 2.5953+-0.3427 2.5742+-0.1653 fixed-typed-array-storage-var-index 1.3791+-0.1180 1.3417+-0.0092 might be 1.0278x faster fixed-typed-array-storage 0.9464+-0.0417 0.9403+-0.0241 Float32Array-matrix-mult 6.2306+-2.1290 5.0540+-1.4541 might be 1.2328x faster Float32Array-to-Float64Array-set 60.0915+-5.2168 59.0541+-0.4491 might be 1.0176x faster Float64Array-alloc-long-lived 79.8263+-1.0316 ? 83.1487+-7.4699 ? might be 1.0416x slower Float64Array-to-Int16Array-set 76.9496+-5.5973 ? 78.4128+-0.7445 ? might be 1.0190x slower fold-double-to-int 19.5172+-4.4922 18.1194+-0.4046 might be 1.0771x faster fold-get-by-id-to-multi-get-by-offset-rare-int 11.2448+-1.0320 ? 12.8923+-1.2184 ? might be 1.1465x slower fold-get-by-id-to-multi-get-by-offset 10.6040+-0.8930 10.3243+-0.9165 might be 1.0271x faster fold-multi-get-by-offset-to-get-by-offset 9.8237+-1.6383 8.1026+-1.4574 might be 1.2124x faster fold-multi-get-by-offset-to-poly-get-by-offset 9.2824+-1.6501 9.0139+-1.6936 might be 1.0298x faster fold-multi-put-by-offset-to-poly-put-by-offset 8.6982+-1.0872 ? 9.1117+-1.3450 ? might be 1.0475x slower fold-multi-put-by-offset-to-put-by-offset 7.0565+-0.2315 5.6555+-1.6786 might be 1.2477x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.9478+-0.3631 ? 10.1312+-0.3726 ? might be 1.0184x slower fold-put-by-id-to-multi-put-by-offset 9.8533+-1.1582 9.7422+-0.5855 might be 1.0114x faster fold-put-structure 6.5596+-0.4639 ? 6.9060+-0.2761 ? might be 1.0528x slower for-of-iterate-array-entries 5.0867+-0.1666 4.9739+-0.1810 might be 1.0227x faster for-of-iterate-array-keys 4.2391+-0.4874 4.1625+-0.1699 might be 1.0184x faster for-of-iterate-array-values 4.5025+-1.7383 4.0420+-0.2186 might be 1.1139x faster fround 19.6874+-0.5512 19.6602+-0.9341 ftl-library-inlining-dataview 82.2327+-1.1729 ! 91.3588+-5.6098 ! definitely 1.1110x slower ftl-library-inlining 122.0204+-0.2226 ? 124.5643+-4.9804 ? might be 1.0208x slower function-dot-apply 2.4053+-0.0209 ? 2.4434+-0.0656 ? might be 1.0158x slower function-test 3.6534+-0.0336 3.5992+-0.0221 might be 1.0150x faster function-with-eval 108.9006+-7.9284 108.3831+-10.8178 gcse-poly-get-less-obvious 20.0575+-2.5796 ? 20.1475+-2.0557 ? gcse-poly-get 21.6545+-1.9699 ? 23.1320+-1.4453 ? might be 1.0682x slower gcse 5.4515+-0.9360 5.2843+-0.8276 might be 1.0316x faster get-by-id-bimorphic-check-structure-elimination-simple 2.9257+-0.1420 2.9203+-0.1181 get-by-id-bimorphic-check-structure-elimination 6.9590+-0.0480 ? 7.0366+-0.1031 ? might be 1.0111x slower get-by-id-chain-from-try-block 8.3402+-1.3704 8.0314+-1.8365 might be 1.0384x faster get-by-id-check-structure-elimination 5.8215+-0.7354 5.6588+-0.1336 might be 1.0288x faster get-by-id-proto-or-self 18.4210+-2.1207 18.0952+-0.3754 might be 1.0180x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.1259+-0.0291 ? 3.1664+-0.1394 ? might be 1.0130x slower get-by-id-self-or-proto 18.2165+-0.5793 ? 21.1044+-6.0733 ? might be 1.1585x slower get-by-val-out-of-bounds 4.6213+-0.0537 ? 4.7836+-0.2365 ? might be 1.0351x slower get_callee_monomorphic 3.8990+-0.0856 ? 4.0343+-0.1411 ? might be 1.0347x slower get_callee_polymorphic 3.6251+-0.1576 ? 3.6612+-0.1286 ? getter-no-activation 5.8008+-0.3469 5.6454+-0.0855 might be 1.0275x faster getter-richards 134.3784+-6.8125 130.0661+-7.2308 might be 1.0332x faster getter 5.9849+-0.2921 5.8763+-0.0387 might be 1.0185x faster global-var-const-infer-fire-from-opt 0.9294+-0.0470 ? 1.0386+-0.1692 ? might be 1.1175x slower global-var-const-infer 0.9825+-0.1066 0.9015+-0.1614 might be 1.0899x faster HashMap-put-get-iterate-keys 30.0208+-0.8611 ? 30.0811+-3.2542 ? HashMap-put-get-iterate 29.4758+-1.4352 29.3298+-0.8124 HashMap-string-put-get-iterate 30.6875+-2.0476 30.2630+-2.1260 might be 1.0140x faster hoist-make-rope 12.5938+-1.8461 ? 13.4195+-0.3229 ? might be 1.0656x slower hoist-poly-check-structure-effectful-loop 5.5029+-0.0200 ? 5.5180+-0.0349 ? hoist-poly-check-structure 3.9716+-0.1314 ? 4.0153+-0.1963 ? might be 1.0110x slower imul-double-only 7.9608+-0.3337 ? 8.6046+-2.0358 ? might be 1.0809x slower imul-int-only 10.4820+-0.3285 ? 10.8361+-0.7690 ? might be 1.0338x slower imul-mixed 8.5332+-0.1705 8.2173+-0.9343 might be 1.0384x faster in-four-cases 19.9512+-0.4652 19.8315+-0.3785 in-one-case-false 10.7075+-0.1518 10.6578+-0.0949 in-one-case-true 10.6724+-0.1953 10.6334+-0.0582 in-two-cases 10.9909+-0.2134 ? 11.0800+-0.4116 ? indexed-properties-in-objects 3.3408+-0.4288 3.1584+-0.0544 might be 1.0578x faster infer-closure-const-then-mov-no-inline 4.1874+-0.1841 4.1086+-0.1407 might be 1.0192x faster infer-closure-const-then-mov 18.2084+-0.5326 17.8945+-0.4736 might be 1.0175x faster infer-closure-const-then-put-to-scope-no-inline 13.3309+-0.6924 13.2189+-0.6054 infer-closure-const-then-put-to-scope 23.9834+-0.4736 ? 24.0350+-0.4838 ? infer-closure-const-then-reenter-no-inline 56.2847+-4.7050 56.1269+-3.2945 infer-closure-const-then-reenter 138.2108+-10.4181 ? 139.2700+-6.6778 ? infer-constant-global-property 31.6315+-1.1774 31.5061+-0.9609 infer-constant-property 2.9818+-0.1056 2.9785+-0.1164 infer-one-time-closure-ten-vars 13.2581+-0.8302 ? 13.9448+-4.2653 ? might be 1.0518x slower infer-one-time-closure-two-vars 12.5753+-0.6067 ? 13.3019+-1.9465 ? might be 1.0578x slower infer-one-time-closure 12.4528+-0.4170 12.3430+-0.3875 infer-one-time-deep-closure 23.0263+-4.6302 21.3444+-0.5841 might be 1.0788x faster inline-arguments-access 4.7427+-0.2010 4.5918+-0.1666 might be 1.0329x faster inline-arguments-aliased-access 4.6186+-0.2595 ? 4.6206+-0.1660 ? inline-arguments-local-escape 4.6634+-0.1099 ? 4.8917+-0.6974 ? might be 1.0490x slower inline-get-scoped-var 5.5990+-0.0192 5.5920+-0.0302 inlined-put-by-id-transition 12.7468+-2.0369 11.6516+-0.7181 might be 1.0940x faster int-or-other-abs-then-get-by-val 5.6766+-0.0161 ? 5.6777+-0.1007 ? int-or-other-abs-zero-then-get-by-val 20.0916+-1.6161 20.0161+-3.4022 int-or-other-add-then-get-by-val 5.5697+-0.0264 ? 5.5908+-0.0717 ? int-or-other-add 5.6411+-0.0895 ? 5.7104+-0.1988 ? might be 1.0123x slower int-or-other-div-then-get-by-val 4.7087+-0.0256 4.6896+-0.0269 int-or-other-max-then-get-by-val 4.7458+-0.0435 4.7438+-0.0364 int-or-other-min-then-get-by-val 4.7317+-0.0601 4.7131+-0.0791 int-or-other-mod-then-get-by-val 4.4659+-0.0777 4.4448+-0.0327 int-or-other-mul-then-get-by-val 4.4262+-0.0648 4.4016+-0.0071 int-or-other-neg-then-get-by-val 5.1699+-0.0188 5.1487+-0.0181 int-or-other-neg-zero-then-get-by-val 23.1425+-4.9950 20.8040+-3.7329 might be 1.1124x faster int-or-other-sub-then-get-by-val 5.6215+-0.0352 5.5522+-0.0422 might be 1.0125x faster int-or-other-sub 4.1865+-0.0591 4.1251+-0.0380 might be 1.0149x faster int-overflow-local 5.1078+-0.0657 5.0924+-0.0252 Int16Array-alloc-long-lived 61.8057+-3.8693 61.0450+-6.1071 might be 1.0125x faster Int16Array-bubble-sort-with-byteLength 23.1740+-0.9370 ? 25.0162+-4.8986 ? might be 1.0795x slower Int16Array-bubble-sort 24.1298+-2.7438 24.1125+-2.1742 Int16Array-load-int-mul 1.7117+-0.0704 1.6995+-0.0560 Int16Array-to-Int32Array-set 60.3849+-0.1494 ! 66.5259+-4.7829 ! definitely 1.1017x slower Int32Array-alloc-large 30.2036+-3.4240 ? 30.9112+-2.6073 ? might be 1.0234x slower Int32Array-alloc-long-lived 65.2349+-4.7380 ? 66.0720+-3.1060 ? might be 1.0128x slower Int32Array-alloc 3.6672+-0.0960 ? 5.9087+-2.2374 ? might be 1.6112x slower Int32Array-Int8Array-view-alloc 10.7181+-5.0646 ? 13.1228+-0.9455 ? might be 1.2244x slower int52-spill 7.0837+-0.2048 ? 7.1232+-0.1400 ? Int8Array-alloc-long-lived 53.8125+-4.1864 52.7590+-4.5165 might be 1.0200x faster Int8Array-load-with-byteLength 4.0134+-0.1780 3.8881+-0.0350 might be 1.0322x faster Int8Array-load 3.9625+-0.1613 ? 4.0686+-0.2255 ? might be 1.0268x slower integer-divide 13.4788+-1.7422 12.8658+-0.2347 might be 1.0476x faster integer-modulo 2.3658+-0.1452 2.3003+-0.0503 might be 1.0285x faster large-int-captured 5.9592+-0.2072 5.8726+-0.0236 might be 1.0147x faster large-int-neg 17.7653+-0.4935 ? 18.8929+-3.6260 ? might be 1.0635x slower large-int 17.3626+-2.6058 ? 17.8676+-3.5841 ? might be 1.0291x slower logical-not 5.1319+-0.1070 ? 5.2973+-0.6646 ? might be 1.0322x slower lots-of-fields 14.2731+-0.9803 13.8617+-0.6443 might be 1.0297x faster make-indexed-storage 3.2538+-0.2688 ? 3.4366+-0.2006 ? might be 1.0562x slower make-rope-cse 6.6190+-1.9970 6.4431+-2.0791 might be 1.0273x faster marsaglia-larger-ints 47.5090+-5.2656 46.2736+-1.5693 might be 1.0267x faster marsaglia-osr-entry 27.9537+-5.1668 25.9082+-2.8556 might be 1.0790x faster max-boolean 3.0325+-0.1551 ? 3.0408+-0.1853 ? method-on-number 19.1545+-0.8813 19.1463+-0.3896 min-boolean 2.9884+-0.1160 2.9415+-0.0935 might be 1.0160x faster minus-boolean-double 3.3685+-0.0783 3.2651+-0.1103 might be 1.0317x faster minus-boolean 2.7172+-0.0104 ? 2.7502+-0.0732 ? might be 1.0121x slower misc-strict-eq 42.0126+-3.8514 40.5999+-1.2340 might be 1.0348x faster mod-boolean-double 11.5218+-1.1092 ? 11.5757+-0.5961 ? mod-boolean 8.2332+-0.1853 ? 8.8418+-2.1457 ? might be 1.0739x slower mul-boolean-double 3.9012+-0.1704 3.7795+-0.0095 might be 1.0322x faster mul-boolean 2.9899+-0.1366 2.9445+-0.0214 might be 1.0154x faster neg-boolean 3.2233+-0.0331 ? 3.2497+-0.0381 ? negative-zero-divide 0.3837+-0.0170 0.3813+-0.0134 negative-zero-modulo 0.4669+-0.1534 0.3840+-0.0123 might be 1.2158x faster negative-zero-negate 0.3695+-0.0585 0.3544+-0.0117 might be 1.0425x faster nested-function-parsing 43.8337+-3.9877 ? 43.9905+-5.4256 ? new-array-buffer-dead 3.3653+-0.0299 3.3430+-0.0452 new-array-buffer-push 7.3150+-0.6778 7.0754+-0.2874 might be 1.0339x faster new-array-dead 13.4354+-0.8845 13.2428+-0.6179 might be 1.0145x faster new-array-push 4.4493+-0.0530 ? 4.4738+-0.0712 ? number-test 3.3275+-0.1070 3.3135+-0.1552 object-closure-call 6.9162+-0.1029 ? 7.0329+-0.2323 ? might be 1.0169x slower object-test 3.4256+-0.1103 ? 3.4492+-0.1277 ? obvious-sink-pathology-taken 163.9227+-7.7855 ? 166.1490+-4.3187 ? might be 1.0136x slower obvious-sink-pathology 164.3690+-2.9504 164.1571+-9.4036 obviously-elidable-new-object 39.5768+-0.4746 ? 44.5896+-5.5277 ? might be 1.1267x slower plus-boolean-arith 2.9264+-0.1476 2.8796+-0.1734 might be 1.0162x faster plus-boolean-double 3.2928+-0.1670 ? 3.3339+-0.1839 ? might be 1.0125x slower plus-boolean 2.9635+-0.0679 ? 3.0045+-0.0884 ? might be 1.0138x slower poly-chain-access-different-prototypes-simple 3.4810+-0.1838 3.3849+-0.0177 might be 1.0284x faster poly-chain-access-different-prototypes 2.9150+-0.0781 ? 3.0085+-0.0304 ? might be 1.0321x slower poly-chain-access-simpler 3.5714+-0.5142 3.4380+-0.1423 might be 1.0388x faster poly-chain-access 2.9126+-0.1115 ? 3.0053+-0.0938 ? might be 1.0318x slower poly-stricteq 60.1942+-0.2081 ? 63.7119+-5.9754 ? might be 1.0584x slower polymorphic-array-call 1.4264+-0.1519 1.3713+-0.2092 might be 1.0402x faster polymorphic-get-by-id 3.3870+-0.2178 3.3234+-0.0277 might be 1.0191x faster polymorphic-put-by-id 33.8445+-8.3492 33.6788+-0.8851 polymorphic-structure 19.7099+-3.3952 ? 20.6815+-4.7565 ? might be 1.0493x slower polyvariant-monomorphic-get-by-id 9.5603+-0.1780 9.4493+-0.1603 might be 1.0117x faster proto-getter-access 11.4162+-0.3120 11.3123+-0.3887 put-by-id-replace-and-transition 9.2173+-0.4414 ? 9.5267+-0.3840 ? might be 1.0336x slower put-by-id-slightly-polymorphic 3.0734+-0.1503 ? 3.0945+-0.1081 ? put-by-id 15.3000+-0.6690 14.6467+-0.2349 might be 1.0446x faster put-by-val-direct 0.7552+-0.3102 0.6527+-0.0158 might be 1.1570x faster put-by-val-large-index-blank-indexing-type 7.3573+-3.0658 ? 8.7888+-4.4129 ? might be 1.1946x slower put-by-val-machine-int 2.8520+-0.0821 2.7844+-0.1138 might be 1.0243x faster rare-osr-exit-on-local 16.4058+-0.3885 ? 16.5670+-0.2899 ? register-pressure-from-osr 25.3573+-3.3192 23.2443+-0.1175 might be 1.0909x faster setter 5.8979+-0.3759 ? 6.1323+-1.1367 ? might be 1.0397x slower simple-activation-demo 28.2433+-3.2177 26.4990+-0.4997 might be 1.0658x faster simple-getter-access 14.3135+-0.8034 ? 15.3601+-2.3712 ? might be 1.0731x slower simple-poly-call-nested 8.4711+-0.3251 ? 8.5092+-0.3024 ? simple-poly-call 1.4924+-0.1187 ? 1.5095+-0.2155 ? might be 1.0115x slower sin-boolean 20.3177+-2.7400 ? 22.1544+-0.5473 ? might be 1.0904x slower sinkable-new-object-dag 77.7684+-3.2921 ? 80.7810+-2.8404 ? might be 1.0387x slower sinkable-new-object-taken 57.4024+-3.1972 ? 58.3740+-4.7410 ? might be 1.0169x slower sinkable-new-object 43.4047+-4.4606 42.8701+-2.3468 might be 1.0125x faster slow-array-profile-convergence 3.0512+-0.1816 ? 3.0845+-0.0573 ? might be 1.0109x slower slow-convergence 3.5784+-0.1208 ? 3.6047+-0.2576 ? sparse-conditional 1.3474+-0.1510 1.3110+-0.0146 might be 1.0277x faster splice-to-remove 21.1516+-4.5606 18.0931+-0.2807 might be 1.1690x faster string-char-code-at 17.9282+-4.3536 17.2486+-1.5261 might be 1.0394x faster string-concat-object 2.8364+-0.9674 2.7655+-0.5849 might be 1.0256x faster string-concat-pair-object 2.7239+-0.5591 ? 2.7786+-0.9421 ? might be 1.0201x slower string-concat-pair-simple 14.9527+-2.8256 ? 15.5881+-4.4191 ? might be 1.0425x slower string-concat-simple 15.6957+-3.1500 15.1970+-3.2209 might be 1.0328x faster string-cons-repeat 10.3460+-3.6113 8.9625+-0.9730 might be 1.1544x faster string-cons-tower 8.8694+-1.6195 ? 9.4406+-1.8179 ? might be 1.0644x slower string-equality 18.2830+-0.2797 ? 18.4494+-0.3666 ? string-get-by-val-big-char 8.5414+-0.3911 8.3685+-0.0901 might be 1.0207x faster string-get-by-val-out-of-bounds-insane 4.0970+-0.0686 ! 4.3585+-0.1524 ! definitely 1.0638x slower string-get-by-val-out-of-bounds 5.6566+-0.0698 5.4665+-0.2672 might be 1.0348x faster string-get-by-val 3.8069+-0.1616 ? 3.9148+-0.2430 ? might be 1.0283x slower string-hash 2.2851+-0.0521 2.2841+-0.0512 string-long-ident-equality 15.9465+-1.6368 15.1943+-0.4562 might be 1.0495x faster string-out-of-bounds 15.8334+-0.5343 ? 16.7520+-3.2657 ? might be 1.0580x slower string-repeat-arith 37.4462+-6.8180 ? 40.4728+-4.9967 ? might be 1.0808x slower string-sub 76.6371+-12.7550 ? 80.0655+-3.6973 ? might be 1.0447x slower string-test 3.2250+-0.1923 ? 3.2500+-0.0607 ? string-var-equality 32.2584+-0.5086 31.9219+-0.2123 might be 1.0105x faster structure-hoist-over-transitions 2.8644+-0.0642 2.8514+-0.1325 substring-concat-weird 47.0954+-4.1738 46.1545+-3.8281 might be 1.0204x faster substring-concat 46.0593+-1.7405 ? 47.5220+-4.8934 ? might be 1.0318x slower substring 54.2322+-5.3613 53.3533+-5.7962 might be 1.0165x faster switch-char-constant 2.9285+-0.0333 ? 2.9991+-0.2037 ? might be 1.0241x slower switch-char 6.6383+-0.0172 ? 7.1362+-1.1726 ? might be 1.0750x slower switch-constant 9.0099+-0.4350 8.8519+-0.0471 might be 1.0179x faster switch-string-basic-big-var 17.3363+-3.7032 ? 17.4444+-4.3102 ? switch-string-basic-big 15.1542+-1.0470 14.6340+-0.7916 might be 1.0356x faster switch-string-basic-var 15.6473+-0.1915 ? 17.0310+-4.3118 ? might be 1.0884x slower switch-string-basic 14.9706+-3.5054 13.6093+-0.2441 might be 1.1000x faster switch-string-big-length-tower-var 22.0668+-4.0533 ? 23.5825+-4.1871 ? might be 1.0687x slower switch-string-length-tower-var 17.7955+-3.6107 16.9992+-0.2881 might be 1.0468x faster switch-string-length-tower 13.4550+-0.2795 ? 14.2233+-3.0091 ? might be 1.0571x slower switch-string-short 14.6580+-3.9526 13.1605+-0.1527 might be 1.1138x faster switch 13.3792+-0.7334 ? 13.5033+-0.5131 ? tear-off-arguments-simple 3.5458+-0.1247 ? 3.5955+-0.0545 ? might be 1.0140x slower tear-off-arguments 4.9512+-0.0778 4.9085+-0.0244 temporal-structure 14.3898+-0.3566 ? 14.5500+-0.2584 ? might be 1.0111x slower to-int32-boolean 16.4320+-0.9564 ? 16.5020+-1.0607 ? try-catch-get-by-val-cloned-arguments 17.1218+-7.0712 15.1038+-0.3700 might be 1.1336x faster try-catch-get-by-val-direct-arguments 7.7912+-4.2721 ? 9.5403+-4.9859 ? might be 1.2245x slower try-catch-get-by-val-scoped-arguments 7.7432+-0.2950 ? 10.1133+-4.5481 ? might be 1.3061x slower undefined-property-access 412.0018+-3.3692 411.4041+-10.6943 undefined-test 3.3794+-0.1142 3.2518+-0.0249 might be 1.0392x faster unprofiled-licm 23.8595+-1.6782 23.2005+-0.4740 might be 1.0284x faster varargs-call 15.8480+-0.2993 ? 16.6425+-2.0972 ? might be 1.0501x slower varargs-construct-inline 24.3516+-0.4137 ? 24.4457+-2.2781 ? varargs-construct 35.4243+-3.9162 34.4066+-0.4665 might be 1.0296x faster varargs-inline 9.3729+-0.1935 9.3037+-0.1563 varargs-strict-mode 10.5999+-1.2984 10.1732+-0.1570 might be 1.0419x faster varargs 10.4940+-0.6783 ? 11.9133+-4.1850 ? might be 1.1353x slower weird-inlining-const-prop 2.4048+-0.0822 2.3920+-0.1220 <geometric> 9.4536+-0.0906 ? 9.4818+-0.0443 ? might be 1.0030x slower Baseline Mine Baseline Mine Geomean of preferred means: <scaled-result> 37.0221+-0.1656 36.6503+-0.2423 might be 1.0101x faster
Filip Pizlo
Comment 9 2015-03-31 12:30:36 PDT
Results look very promising so far
Yusuke Suzuki
Comment 10 2015-03-31 12:47:25 PDT
OK. I've checked out Octane r31 (Octane2), set up .run-jsc-benchmarks OctanePath and run-jsc-benchmarks --octane. Here is the result. Benchmark report for Octane on yusuke (MacBookPro8,2). VMs tested: "Baseline" at /Users/yusuke/dev/WebKit/WebKitBuild/Release/jsc "Mine" at /Users/yusuke/dev/WebKit/WebKitBuild/identifier/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. Baseline Mine encrypt 0.25831+-0.00168 ? 0.25918+-0.00367 ? decrypt 4.43019+-0.04410 4.41634+-0.04528 deltablue x2 0.22831+-0.00633 0.22479+-0.00636 might be 1.0157x faster earley 0.66089+-0.00957 ? 0.66644+-0.01086 ? boyer 7.34057+-0.08287 ? 7.34485+-0.04041 ? navier-stokes x2 5.40476+-0.05512 ? 5.42682+-0.08338 ? raytrace x2 1.43530+-0.08010 1.41643+-0.08197 might be 1.0133x faster richards x2 0.12240+-0.00251 ? 0.12294+-0.00341 ? splay x2 0.41684+-0.00369 0.41299+-0.00451 regexp x2 35.95270+-0.46315 35.86742+-0.55205 pdfjs x2 49.29292+-1.37956 48.88469+-0.78112 mandreel x2 59.80098+-0.54078 59.53940+-1.39673 gbemu x2 43.88240+-0.30637 43.43907+-0.82390 might be 1.0102x faster closure 0.58956+-0.00742 ? 0.59907+-0.00715 ? might be 1.0161x slower jquery 7.50632+-0.06683 ? 7.57204+-0.06387 ? box2d x2 13.63611+-0.41038 13.48633+-0.17487 might be 1.0111x faster zlib x2 429.82747+-30.28566 427.36043+-5.33524 typescript x2 881.30328+-20.24660 ? 885.94214+-17.78960 ? <geometric> 7.39157+-0.03937 7.36756+-0.02529 might be 1.0033x faster
Filip Pizlo
Comment 11 2015-03-31 12:49:19 PDT
Comment on attachment 249657 [details] Patch r=me
Yusuke Suzuki
Comment 12 2015-03-31 13:37:47 PDT
Comment on attachment 249657 [details] Patch Thank you! I've set cq+
WebKit Commit Bot
Comment 13 2015-03-31 14:26:03 PDT
Comment on attachment 249657 [details] Patch Clearing flags on attachment: 249657 Committed r182205: <http://trac.webkit.org/changeset/182205>
WebKit Commit Bot
Comment 14 2015-03-31 14:26:08 PDT
All reviewed patches have been landed. Closing bug.
Alexey Proskuryakov
Comment 15 2015-03-31 16:05:09 PDT
This patch was made with an old checkout, and broke bindings generation tests: https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/4075/steps/bindings-generation-tests/logs/stdio I'll update the results.
Yusuke Suzuki
Comment 16 2015-03-31 21:43:07 PDT
(In reply to comment #15) > This patch was made with an old checkout, and broke bindings generation > tests: > https://build.webkit.org/builders/ > Apple%20Yosemite%20Release%20WK2%20%28Tests%29/builds/4075/steps/bindings- > generation-tests/logs/stdio > > I'll update the results. Oops! Thank you for your fix. http://trac.webkit.org/changeset/182205 It seems that when rebasing the patch I failed to merge http://trac.webkit.org/changeset/181156.
Alexey Proskuryakov
Comment 17 2015-03-31 23:18:11 PDT
Comment on attachment 249657 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=249657&action=review > Source/WTF/wtf/text/StringImpl.h:744 > + WTF_EXPORT_STRING_API StringImpl& extractFoldedStringInSymbol() This broke some builds. A function cannot be both exported and inline. I'll fix it now.
Yusuke Suzuki
Comment 18 2015-03-31 23:54:25 PDT
(In reply to comment #17) > Comment on attachment 249657 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=249657&action=review > > > Source/WTF/wtf/text/StringImpl.h:744 > > + WTF_EXPORT_STRING_API StringImpl& extractFoldedStringInSymbol() > > This broke some builds. A function cannot be both exported and inline. > > I'll fix it now. Thanks! Sorry for troubling you.
Note You need to log in before you can comment on or make changes to this bug.