Currently, only full collections trigger the IncrementalSweeper. This means that while Eden collections do find garbage, it doesn't actually run destructors.
Created attachment 248344 [details] Proposed patch
Comment on attachment 248344 [details] Proposed patch View in context: https://bugs.webkit.org/attachment.cgi?id=248344&action=review > Source/JavaScriptCore/ChangeLog:12 > + Eden collections, instead of delaying their teardown until the next full collection. ...or the next allocation cycle for their block. > Source/JavaScriptCore/ChangeLog:22 > + (JSC::Heap::notifyIncrementalSweeper): For Eden collections, tell the IncrementalSweeper > + to append block snapshot (taken earlier) to its existing set of blocks instead of replacing > + it entirely. This allows Eden collections and incremental sweeping to occur interleaved with An eden allocation cycle may reuse a block that contains old objects. If so, we will duplicate a block in the list. Duplicates are OK, since they will no-op when they pop. But what if the list goes infinite? Some options: (1) Use a hash table instead of a vector inside the incremental sweeper. (2) After appending to the vector, shrink(std::unique(std::sort(begin(), end())) - begin()). I'm OK with either. Please do one of these before landing.
(In reply to comment #2) > Comment on attachment 248344 [details] > Proposed patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=248344&action=review > > > Source/JavaScriptCore/ChangeLog:12 > > + Eden collections, instead of delaying their teardown until the next full collection. > > ...or the next allocation cycle for their block. Oh yeah, I'll add that. > > Source/JavaScriptCore/ChangeLog:22 > > + (JSC::Heap::notifyIncrementalSweeper): For Eden collections, tell the IncrementalSweeper > > + to append block snapshot (taken earlier) to its existing set of blocks instead of replacing > > + it entirely. This allows Eden collections and incremental sweeping to occur interleaved with > > An eden allocation cycle may reuse a block that contains old objects. If so, > we will duplicate a block in the list. Duplicates are OK, since they will > no-op when they pop. But what if the list goes infinite? > > Some options: > > (1) Use a hash table instead of a vector inside the incremental sweeper. > > (2) After appending to the vector, shrink(std::unique(std::sort(begin(), > end())) - begin()). > > I'm OK with either. Please do one of these before landing. Neither of those are very good, since they would break the incremental iteration I've got going on. I need to append only blocks that are not already in the vector. I'll fix that up before landing.
Benchmark results would be good here :-)
I think you could fix the iteration thing by just popping from the end of the vector (or taking from the begin of the hash table) rather than keeping an index.
(In reply to comment #4) > Benchmark results would be good here :-) Right you are, Mark! Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on megalol (MacBookPro10,1). VMs tested: "ToT" at /Users/kling/Source/Safari/ToT-Clean/WebKitBuild/Release/jsc "Hacks" at /Users/kling/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 SunSpider: 3d-cube 5.0227+-0.1568 ? 5.1343+-0.2032 ? might be 1.0222x slower 3d-morph 5.8276+-0.1666 ? 7.4655+-4.4834 ? might be 1.2811x slower 3d-raytrace 6.8243+-0.2974 6.7673+-0.5574 access-binary-trees 2.3129+-0.1936 ? 2.4325+-0.3755 ? might be 1.0517x slower access-fannkuch 6.2584+-0.0850 ? 6.3947+-0.2289 ? might be 1.0218x slower access-nbody 3.1290+-0.1531 3.0460+-0.1461 might be 1.0273x faster access-nsieve 3.2718+-0.1751 ? 3.2945+-0.1350 ? bitops-3bit-bits-in-byte 1.6743+-0.0684 ? 1.8830+-0.4810 ? might be 1.1246x slower bitops-bits-in-byte 3.6782+-0.0726 ? 3.7292+-0.2249 ? might be 1.0139x slower bitops-bitwise-and 2.2247+-0.0602 2.1876+-0.0663 might be 1.0170x faster bitops-nsieve-bits 3.7102+-0.0855 ? 3.8096+-0.1172 ? might be 1.0268x slower controlflow-recursive 2.4891+-0.3222 2.3681+-0.1260 might be 1.0511x faster crypto-aes 4.4968+-0.2764 ? 4.6211+-0.6064 ? might be 1.0276x slower crypto-md5 2.5995+-0.0926 ? 2.6373+-0.3645 ? might be 1.0145x slower crypto-sha1 2.7497+-0.4404 ? 2.9496+-0.3944 ? might be 1.0727x slower date-format-tofte 9.9317+-0.2287 ? 10.1125+-0.4774 ? might be 1.0182x slower date-format-xparb 5.8161+-0.2065 ? 6.0576+-1.0670 ? might be 1.0415x slower math-cordic 3.2423+-0.0561 ! 3.5037+-0.1875 ! definitely 1.0806x slower math-partial-sums 5.2776+-0.2334 ? 5.4941+-0.3979 ? might be 1.0410x slower math-spectral-norm 2.1711+-0.3607 ? 2.3260+-0.9669 ? might be 1.0713x slower regexp-dna 7.3120+-0.1101 ? 7.3944+-0.1024 ? might be 1.0113x slower string-base64 4.9386+-0.5520 4.8554+-0.3036 might be 1.0171x faster string-fasta 10.2974+-10.9895 6.9692+-0.6713 might be 1.4776x faster string-tagcloud 10.0241+-0.4544 ? 13.3126+-9.4526 ? might be 1.3281x slower string-unpack-code 20.8025+-0.5958 ? 21.6596+-0.6307 ? might be 1.0412x slower string-validate-input 5.4365+-0.5631 5.3923+-0.6264 <arithmetic> * 5.4430+-0.3553 ? 5.6076+-0.5374 ? might be 1.0302x slower <geometric> 4.4956+-0.0937 ? 4.6134+-0.1824 ? might be 1.0262x slower <harmonic> 3.8629+-0.0524 ? 3.9603+-0.0584 ? might be 1.0252x slower ToT Hacks LongSpider: 3d-cube 875.6902+-5.0413 ? 956.0899+-252.8502 ? might be 1.0918x slower 3d-morph 1575.9394+-7.1249 1574.4586+-7.8786 3d-raytrace 775.7401+-12.3777 ? 786.5368+-4.6848 ? might be 1.0139x slower access-binary-trees 996.4917+-25.5586 987.8693+-4.6862 access-fannkuch 344.9982+-15.4222 ? 348.4637+-9.9834 ? might be 1.0100x slower access-nbody 634.3019+-13.7387 ? 715.0403+-257.8254 ? might be 1.1273x slower access-nsieve 886.8135+-47.1008 878.2208+-18.8868 bitops-3bit-bits-in-byte 49.2423+-0.4600 ? 50.2198+-5.0998 ? might be 1.0199x slower bitops-bits-in-byte 100.5408+-15.9213 97.1362+-3.9179 might be 1.0350x faster bitops-nsieve-bits 891.1489+-435.4684 819.4395+-147.4782 might be 1.0875x faster controlflow-recursive 571.1123+-257.6265 495.8044+-30.6832 might be 1.1519x faster crypto-aes 831.4380+-401.5165 704.2182+-5.3452 might be 1.1807x faster crypto-md5 564.2598+-19.5381 ? 633.4430+-198.3881 ? might be 1.1226x slower crypto-sha1 626.5330+-10.5387 ? 628.7540+-7.7566 ? date-format-tofte 797.6385+-27.5004 ? 798.0350+-11.1475 ? date-format-xparb 843.0157+-327.8723 745.6133+-92.2562 might be 1.1306x faster math-cordic 607.1604+-1.2431 ? 607.8583+-3.6236 ? math-partial-sums 519.6808+-2.2160 519.4349+-2.4417 math-spectral-norm 580.0079+-1.0523 ? 581.5323+-3.0401 ? string-base64 351.8905+-1.2260 ? 353.1910+-4.3497 ? string-fasta 417.9220+-9.7733 ? 451.4916+-85.9309 ? might be 1.0803x slower string-tagcloud 218.0093+-1.8889 ? 221.2766+-4.5580 ? might be 1.0150x slower <arithmetic> 639.0716+-21.9116 634.2785+-23.0337 might be 1.0076x faster <geometric> * 519.0631+-14.9268 518.0779+-13.5620 might be 1.0019x faster <harmonic> 337.1559+-7.8859 ? 338.2144+-9.7666 ? might be 1.0031x slower ToT Hacks V8Spider: crypto 60.0059+-1.3594 59.0397+-3.6403 might be 1.0164x faster deltablue 95.3129+-8.0535 ? 96.5853+-8.3344 ? might be 1.0133x slower earley-boyer 45.6835+-3.7217 45.4551+-2.2442 raytrace 45.9974+-23.4832 38.4816+-1.7254 might be 1.1953x faster regexp 69.5165+-2.9073 ? 70.3349+-0.5304 ? might be 1.0118x slower richards 82.2705+-3.7452 ? 82.8399+-3.4341 ? splay 43.7175+-1.9232 39.6756+-2.3064 might be 1.1019x faster <arithmetic> 63.2149+-5.2721 61.7731+-0.8567 might be 1.0233x faster <geometric> * 60.3717+-5.5618 58.3382+-1.2205 might be 1.0349x faster <harmonic> 57.6989+-5.7878 55.1843+-1.5230 might be 1.0456x faster ToT Hacks Octane: encrypt 0.26685+-0.10623 0.23760+-0.00740 might be 1.1231x faster decrypt 4.02712+-0.09501 4.01533+-0.02092 deltablue x2 0.20801+-0.00575 ? 0.23996+-0.09594 ? might be 1.1536x slower earley 0.68119+-0.01021 ? 0.73091+-0.14440 ? might be 1.0730x slower boyer 5.84445+-0.03232 5.84068+-0.02299 navier-stokes x2 5.69212+-0.80555 5.45369+-0.32171 might be 1.0437x faster raytrace x2 1.30340+-0.11963 1.27168+-0.01296 might be 1.0249x faster richards x2 0.12710+-0.01311 0.12112+-0.00453 might be 1.0494x faster splay x2 0.40399+-0.00253 ? 0.41421+-0.02825 ? might be 1.0253x slower regexp x2 42.42159+-21.87504 35.56092+-0.93589 might be 1.1929x faster pdfjs x2 49.43383+-10.50379 46.21714+-0.49600 might be 1.0696x faster mandreel x2 56.42224+-4.77427 54.44616+-0.13031 might be 1.0363x faster gbemu x2 40.93990+-0.10755 ? 41.00050+-0.09257 ? closure 0.57502+-0.00284 ? 0.63973+-0.21457 ? might be 1.1125x slower jquery 8.53374+-3.43643 7.80676+-1.28773 might be 1.0931x faster box2d x2 17.76795+-13.74024 13.41528+-0.20761 might be 1.3245x faster zlib x2 519.62602+-217.64958 446.59176+-90.25406 might be 1.1635x faster typescript x2 880.55591+-22.67713 875.01758+-25.35861 <arithmetic> 108.32442+-14.66497 101.95903+-6.96306 might be 1.0624x faster <geometric> * 7.45095+-0.08672 7.18155+-0.20924 might be 1.0375x faster <harmonic> 0.74678+-0.03078 ? 0.75012+-0.05128 ? might be 1.0045x slower ToT Hacks Kraken: ai-astar 273.613+-4.827 273.360+-2.951 audio-beat-detection 115.720+-1.031 ? 116.017+-0.927 ? audio-dft 225.779+-56.095 218.783+-4.039 might be 1.0320x faster audio-fft 88.865+-0.707 ? 92.162+-11.413 ? might be 1.0371x slower audio-oscillator 257.018+-140.366 249.581+-124.638 might be 1.0298x faster imaging-darkroom 107.187+-0.394 ? 107.241+-0.598 ? imaging-desaturate 74.399+-26.863 65.119+-1.111 might be 1.1425x faster imaging-gaussian-blur 113.434+-2.111 ? 113.536+-0.348 ? json-parse-financial 48.276+-1.499 46.993+-0.987 might be 1.0273x faster json-stringify-tinderbox 57.810+-2.658 ? 59.048+-2.562 ? might be 1.0214x slower stanford-crypto-aes 65.272+-0.673 ? 67.768+-15.927 ? might be 1.0382x slower stanford-crypto-ccm 54.698+-7.564 ? 54.820+-6.615 ? stanford-crypto-pbkdf2 172.398+-1.226 ? 172.930+-1.407 ? stanford-crypto-sha256-iterative 58.018+-5.036 ? 67.770+-33.574 ? might be 1.1681x slower <arithmetic> * 122.321+-8.382 121.795+-7.467 might be 1.0043x faster <geometric> 102.316+-2.903 ? 102.531+-1.601 ? might be 1.0021x slower <harmonic> 88.032+-1.698 ? 88.395+-1.920 ? might be 1.0041x slower ToT Hacks JSRegress: abs-boolean 2.9402+-0.4946 2.7501+-0.0418 might be 1.0692x faster adapt-to-double-divide 17.4622+-0.8684 ? 17.7192+-0.9686 ? might be 1.0147x slower aliased-arguments-getbyval 0.9160+-0.0416 ? 0.9202+-0.0242 ? allocate-big-object 2.7718+-0.1234 ? 3.6013+-2.5722 ? might be 1.2993x slower arguments-out-of-bounds 17.1752+-0.5124 ! 17.8851+-0.1965 ! definitely 1.0413x slower arity-mismatch-inlining 0.9073+-0.0184 0.8901+-0.0263 might be 1.0193x faster array-access-polymorphic-structure 6.8949+-0.2011 ? 7.0181+-0.4039 ? might be 1.0179x slower array-nonarray-polymorhpic-access 36.0461+-0.8429 ? 36.3563+-1.3873 ? array-prototype-every 86.5782+-1.0926 ? 88.2010+-1.0856 ? might be 1.0187x slower array-prototype-forEach 95.0938+-36.0816 86.0455+-2.3554 might be 1.1052x faster array-prototype-map 98.9042+-2.4589 95.6878+-1.5116 might be 1.0336x faster array-prototype-some 85.9435+-0.9340 ? 87.8643+-1.2779 ? might be 1.0224x slower array-splice-contiguous 42.4274+-1.5510 ? 43.2228+-1.0899 ? might be 1.0187x slower array-with-double-add 4.4008+-0.3567 4.2877+-0.1340 might be 1.0264x faster array-with-double-increment 3.4000+-0.1141 3.3555+-0.0800 might be 1.0132x faster array-with-double-mul-add 5.1879+-0.1007 5.1865+-0.0941 array-with-double-sum 3.5482+-0.0514 ? 3.6000+-0.1899 ? might be 1.0146x slower array-with-int32-add-sub 7.1686+-0.3800 7.1140+-0.2468 array-with-int32-or-double-sum 3.5607+-0.1591 ? 3.6387+-0.0753 ? might be 1.0219x slower ArrayBuffer-DataView-alloc-large-long-lived 34.8604+-2.1594 34.7838+-1.6063 ArrayBuffer-DataView-alloc-long-lived 14.6573+-1.0314 ? 14.8121+-1.0336 ? might be 1.0106x slower ArrayBuffer-Int32Array-byteOffset 3.7125+-0.4037 3.6255+-0.0754 might be 1.0240x faster ArrayBuffer-Int8Array-alloc-large-long-lived 34.3126+-1.1682 ? 34.3680+-0.5810 ? ArrayBuffer-Int8Array-alloc-long-lived-buffer 23.1235+-0.3246 ? 24.6575+-2.1405 ? might be 1.0663x slower ArrayBuffer-Int8Array-alloc-long-lived 14.5825+-1.7162 14.3036+-0.9539 might be 1.0195x faster ArrayBuffer-Int8Array-alloc 11.1372+-0.9890 ? 11.8291+-1.5989 ? might be 1.0621x slower asmjs_bool_bug 8.1535+-0.8602 8.0448+-0.4440 might be 1.0135x faster assign-custom-setter-polymorphic 3.2313+-0.0894 ? 3.4298+-0.3705 ? might be 1.0614x slower assign-custom-setter 4.5085+-0.1032 ? 4.5238+-0.0733 ? basic-set 12.4333+-8.2550 9.6153+-1.1808 might be 1.2931x faster big-int-mul 4.1548+-0.0488 ? 4.6425+-1.5892 ? might be 1.1174x slower boolean-test 3.1711+-0.0723 ? 3.1765+-0.0921 ? branch-fold 3.8040+-0.0238 ? 4.6123+-2.2091 ? might be 1.2125x slower by-val-generic 8.3258+-0.3468 ? 8.3751+-0.1343 ? call-spread-apply 17.3604+-1.6379 17.2896+-0.8813 call-spread-call 6.1602+-0.2068 6.0884+-0.1196 might be 1.0118x faster captured-assignments 0.4746+-0.0175 ? 0.5438+-0.1253 ? might be 1.1457x slower cast-int-to-double 5.6211+-0.3222 5.5168+-0.2188 might be 1.0189x faster cell-argument 8.9863+-0.7522 8.6850+-0.3114 might be 1.0347x faster cfg-simplify 2.9268+-0.0370 ? 2.9628+-0.1425 ? might be 1.0123x slower chain-getter-access 10.0649+-0.4881 ? 10.1271+-0.1547 ? cmpeq-obj-to-obj-other 12.5037+-1.3582 12.0078+-1.9516 might be 1.0413x faster constant-test 5.3172+-0.7202 5.1116+-0.0284 might be 1.0402x faster DataView-custom-properties 40.5800+-3.0355 40.4291+-0.9521 delay-tear-off-arguments-strictmode 21.3125+-0.5434 21.0367+-1.7151 might be 1.0131x faster deltablue-varargs 187.8212+-2.5789 ? 188.5448+-1.0412 ? destructuring-arguments 5.3878+-0.0469 ? 5.4775+-0.3087 ? might be 1.0167x slower destructuring-swap 5.3214+-0.2608 5.2442+-0.1317 might be 1.0147x faster direct-arguments-getbyval 0.9551+-0.0596 ? 0.9982+-0.1516 ? might be 1.0451x slower div-boolean-double 5.3908+-0.0527 5.3630+-0.0286 div-boolean 8.1176+-0.1859 ? 8.1368+-0.3269 ? double-get-by-val-out-of-bounds 4.6877+-0.4735 4.5493+-0.0340 might be 1.0304x faster double-pollution-getbyval 9.2460+-0.3725 9.2216+-0.8765 double-pollution-putbyoffset 4.3815+-0.1026 4.1921+-0.1383 might be 1.0452x faster double-to-int32-typed-array-no-inline 2.6275+-0.4253 2.4595+-0.2628 might be 1.0683x faster double-to-int32-typed-array 2.0803+-0.0250 ? 2.0867+-0.0551 ? double-to-uint32-typed-array-no-inline 2.3766+-0.0580 ? 2.4772+-0.1494 ? might be 1.0423x slower double-to-uint32-typed-array 2.3418+-0.3162 ? 2.3929+-0.4309 ? might be 1.0218x slower elidable-new-object-dag 44.4836+-1.1779 43.1807+-1.8279 might be 1.0302x faster elidable-new-object-roflcopter 51.8097+-1.4716 ? 52.3661+-2.1987 ? might be 1.0107x slower elidable-new-object-then-call 40.0747+-3.6658 ? 40.7442+-2.3126 ? might be 1.0167x slower elidable-new-object-tree 50.8717+-16.7923 46.3438+-2.4246 might be 1.0977x faster empty-string-plus-int 5.4940+-0.1681 ? 5.6838+-0.5986 ? might be 1.0345x slower emscripten-cube2hash 44.4507+-9.2018 40.6329+-2.4453 might be 1.0940x faster exit-length-on-plain-object 14.9831+-1.0879 14.8979+-0.9164 external-arguments-getbyval 1.4645+-0.0416 ? 1.5491+-0.1304 ? might be 1.0577x slower external-arguments-putbyval 2.4545+-0.4443 ? 2.8650+-1.5529 ? might be 1.1673x slower fixed-typed-array-storage-var-index 1.3787+-0.1560 1.3741+-0.2100 fixed-typed-array-storage 0.9543+-0.0330 0.9260+-0.0645 might be 1.0306x faster Float32Array-matrix-mult 4.9673+-0.8198 4.4774+-0.0522 might be 1.1094x faster Float32Array-to-Float64Array-set 60.4835+-3.4936 56.6195+-0.5956 might be 1.0682x faster Float64Array-alloc-long-lived 73.9269+-1.9966 ? 79.9254+-13.3350 ? might be 1.0811x slower Float64Array-to-Int16Array-set 69.3349+-1.6905 ? 70.3605+-2.2667 ? might be 1.0148x slower fold-double-to-int 16.2001+-0.5853 16.1589+-0.5779 fold-get-by-id-to-multi-get-by-offset-rare-int 11.5045+-2.9370 10.4316+-0.7351 might be 1.1028x faster fold-get-by-id-to-multi-get-by-offset 9.4610+-0.9187 9.2103+-1.1670 might be 1.0272x faster fold-multi-get-by-offset-to-get-by-offset 9.1996+-1.9641 8.7515+-3.0911 might be 1.0512x faster fold-multi-get-by-offset-to-poly-get-by-offset 8.3567+-1.0618 ? 8.4680+-0.8838 ? might be 1.0133x slower fold-multi-put-by-offset-to-poly-put-by-offset 7.8547+-1.4587 7.8038+-1.1611 fold-multi-put-by-offset-to-put-by-offset 4.8894+-1.0231 4.0012+-0.7829 might be 1.2220x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.6228+-1.3087 9.4282+-0.7484 might be 1.0206x faster fold-put-by-id-to-multi-put-by-offset 8.3786+-0.3268 ? 8.5383+-1.0795 ? might be 1.0191x slower fold-put-structure 5.3860+-0.0629 4.8452+-1.0622 might be 1.1116x faster for-of-iterate-array-entries 6.8935+-5.8409 5.0598+-0.8331 might be 1.3624x faster for-of-iterate-array-keys 4.0573+-0.3191 ? 4.1765+-0.4480 ? might be 1.0294x slower for-of-iterate-array-values 3.8613+-0.1815 3.8589+-0.2217 fround 20.8989+-0.3667 20.4143+-1.6359 might be 1.0237x faster ftl-library-inlining-dataview 85.1153+-6.6026 81.6358+-2.0309 might be 1.0426x faster ftl-library-inlining 69.3516+-1.8922 ? 69.5249+-1.5483 ? function-dot-apply 1.8285+-0.3959 1.6993+-0.3628 might be 1.0760x faster function-test 3.5164+-0.1847 ? 3.5438+-0.2889 ? function-with-eval 127.6105+-1.0332 ^ 124.8522+-1.6755 ^ definitely 1.0221x faster gcse-poly-get-less-obvious 20.5300+-0.6870 20.1382+-1.2168 might be 1.0195x faster gcse-poly-get 21.7755+-2.0228 21.2375+-1.1431 might be 1.0253x faster gcse 4.4929+-0.1660 ? 5.8807+-4.2387 ? might be 1.3089x slower get-by-id-bimorphic-check-structure-elimination-simple 2.8834+-0.1298 2.8052+-0.0238 might be 1.0279x faster get-by-id-bimorphic-check-structure-elimination 6.2795+-0.1555 6.2502+-0.0597 get-by-id-chain-from-try-block 8.3743+-0.8027 ? 8.4890+-0.4538 ? might be 1.0137x slower get-by-id-check-structure-elimination 5.3287+-0.1702 ? 5.4596+-0.1924 ? might be 1.0246x slower get-by-id-proto-or-self 23.0943+-13.6879 18.8479+-0.6202 might be 1.2253x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.0485+-0.0413 ? 3.0668+-0.0512 ? get-by-id-self-or-proto 18.9680+-1.4196 ? 22.7599+-9.8966 ? might be 1.1999x slower get-by-val-out-of-bounds 5.0949+-1.9945 4.4470+-0.0839 might be 1.1457x faster get_callee_monomorphic 3.9332+-0.6120 3.9037+-0.7412 get_callee_polymorphic 4.0648+-0.6634 ? 4.1895+-0.7702 ? might be 1.0307x slower getter-no-activation 4.6595+-0.4606 4.5861+-0.2385 might be 1.0160x faster getter-richards 142.4003+-40.5476 137.1973+-34.8600 might be 1.0379x faster getter 5.4066+-0.3349 5.2409+-0.0102 might be 1.0316x faster global-var-const-infer-fire-from-opt 0.8960+-0.0241 ? 0.9991+-0.1864 ? might be 1.1151x slower global-var-const-infer 0.7853+-0.0661 ? 0.8475+-0.1301 ? might be 1.0791x slower HashMap-put-get-iterate-keys 28.6086+-1.8562 28.2195+-1.1392 might be 1.0138x faster HashMap-put-get-iterate 29.3016+-0.8837 28.8254+-2.5278 might be 1.0165x faster HashMap-string-put-get-iterate 30.0687+-3.1354 28.3559+-1.4015 might be 1.0604x faster hoist-make-rope 13.2688+-2.8251 13.0786+-1.5836 might be 1.0145x faster hoist-poly-check-structure-effectful-loop 6.4613+-3.6877 5.3961+-0.5167 might be 1.1974x faster hoist-poly-check-structure 3.9782+-0.2881 ? 4.1473+-0.4929 ? might be 1.0425x slower imul-double-only 8.1439+-1.2800 ? 8.3878+-1.1383 ? might be 1.0299x slower imul-int-only 10.0684+-0.8119 9.8715+-0.7153 might be 1.0199x faster imul-mixed 8.1287+-0.3238 8.1168+-0.4943 in-four-cases 21.4681+-2.3353 ? 22.3010+-0.3504 ? might be 1.0388x slower in-one-case-false 11.3798+-1.5427 ? 11.5118+-0.8706 ? might be 1.0116x slower in-one-case-true 11.2091+-1.2788 ? 12.2377+-2.8207 ? might be 1.0918x slower in-two-cases 12.1878+-1.2168 11.7430+-0.5547 might be 1.0379x faster indexed-properties-in-objects 3.0750+-0.0312 ? 3.7662+-1.9878 ? might be 1.2248x slower infer-closure-const-then-mov-no-inline 3.9373+-0.2485 3.8351+-0.0469 might be 1.0266x faster infer-closure-const-then-mov 18.8322+-1.1267 ? 19.0942+-0.7187 ? might be 1.0139x slower infer-closure-const-then-put-to-scope-no-inline 12.0641+-0.4475 11.9933+-0.5256 infer-closure-const-then-put-to-scope 22.7166+-0.6692 22.5123+-1.1201 infer-closure-const-then-reenter-no-inline 53.0160+-10.4975 50.0029+-0.9682 might be 1.0603x faster infer-closure-const-then-reenter 22.5861+-0.9959 ? 22.8840+-0.7430 ? might be 1.0132x slower infer-constant-global-property 31.1142+-0.9875 ? 34.1115+-5.4883 ? might be 1.0963x slower infer-constant-property 2.8477+-0.0829 ? 2.9055+-0.1309 ? might be 1.0203x slower infer-one-time-closure-ten-vars 12.5960+-0.5002 12.3811+-0.2261 might be 1.0174x faster infer-one-time-closure-two-vars 11.8397+-0.2693 11.8096+-0.3954 infer-one-time-closure 12.0240+-0.4175 11.8898+-0.3060 might be 1.0113x faster infer-one-time-deep-closure 21.4402+-1.1520 ? 23.0994+-6.2063 ? might be 1.0774x slower inline-arguments-access 1.7617+-0.1341 ? 1.9816+-0.9851 ? might be 1.1248x slower inline-arguments-aliased-access 1.8036+-0.0515 ? 1.8180+-0.1104 ? inline-arguments-local-escape 13.1672+-1.2788 ? 13.9139+-1.9750 ? might be 1.0567x slower inline-get-scoped-var 4.6738+-0.1015 ? 4.6813+-0.0874 ? inlined-put-by-id-transition 11.4435+-1.4754 ? 11.9360+-1.7028 ? might be 1.0430x slower int-or-other-abs-then-get-by-val 5.2607+-0.2687 5.2395+-0.1780 int-or-other-abs-zero-then-get-by-val 17.3315+-0.4339 ? 17.4791+-0.4121 ? int-or-other-add-then-get-by-val 4.5183+-0.1107 ? 4.6783+-0.5593 ? might be 1.0354x slower int-or-other-add 5.4868+-0.0418 ? 5.8296+-1.1269 ? might be 1.0625x slower int-or-other-div-then-get-by-val 4.3678+-0.0235 ? 4.4367+-0.1897 ? might be 1.0158x slower int-or-other-max-then-get-by-val 4.5966+-0.1297 ? 4.6733+-0.4175 ? might be 1.0167x slower int-or-other-min-then-get-by-val 4.5869+-0.0101 ? 4.7737+-0.2519 ? might be 1.0407x slower int-or-other-mod-then-get-by-val 4.1273+-0.0437 ? 4.1932+-0.5087 ? might be 1.0160x slower int-or-other-mul-then-get-by-val 4.2175+-0.0492 ? 4.2223+-0.0989 ? int-or-other-neg-then-get-by-val 5.1698+-1.1049 4.8188+-0.0926 might be 1.0728x faster int-or-other-neg-zero-then-get-by-val 17.3817+-0.2833 17.2560+-0.5134 int-or-other-sub-then-get-by-val 4.5385+-0.0774 4.5103+-0.0658 int-or-other-sub 3.8653+-0.4091 3.6663+-0.0519 might be 1.0543x faster int-overflow-local 4.4630+-0.0346 ? 4.4650+-0.0332 ? Int16Array-alloc-long-lived 53.1999+-3.1194 52.9849+-2.7226 Int16Array-bubble-sort-with-byteLength 21.8243+-1.4463 ? 27.9911+-20.2868 ? might be 1.2826x slower Int16Array-bubble-sort 24.0441+-3.5690 ? 25.8372+-3.6176 ? might be 1.0746x slower Int16Array-load-int-mul 1.6815+-0.3223 1.6786+-0.2217 Int16Array-to-Int32Array-set 58.5590+-2.2487 ^ 53.2502+-0.7785 ^ definitely 1.0997x faster Int32Array-alloc-large 27.4357+-2.0950 26.6560+-1.1670 might be 1.0292x faster Int32Array-alloc-long-lived 59.8198+-1.5557 57.8986+-2.3138 might be 1.0332x faster Int32Array-alloc 3.7778+-0.9731 3.5713+-0.2866 might be 1.0578x faster Int32Array-Int8Array-view-alloc 7.0903+-0.3096 ? 7.6689+-1.6629 ? might be 1.0816x slower int52-spill 7.0353+-0.0680 ? 7.2649+-0.2990 ? might be 1.0326x slower Int8Array-alloc-long-lived 46.5105+-1.6188 ? 48.5087+-1.7380 ? might be 1.0430x slower Int8Array-load-with-byteLength 3.7578+-0.4348 3.5244+-0.0913 might be 1.0662x faster Int8Array-load 3.5300+-0.0948 ? 3.5379+-0.1838 ? integer-divide 11.5372+-0.0837 ? 11.8232+-0.8415 ? might be 1.0248x slower integer-modulo 2.1820+-0.2257 ? 2.2710+-0.1259 ? might be 1.0408x slower large-int-captured 6.8662+-0.3578 ? 7.2142+-1.2084 ? might be 1.0507x slower large-int-neg 17.4271+-0.6014 ? 17.7895+-0.7378 ? might be 1.0208x slower large-int 16.4434+-1.9359 15.9778+-0.4099 might be 1.0291x faster logical-not 4.6864+-0.1173 ? 4.7880+-0.2977 ? might be 1.0217x slower lots-of-fields 13.8085+-0.8407 ? 14.4512+-1.8846 ? might be 1.0465x slower make-indexed-storage 3.2803+-0.3587 ? 3.4992+-0.7018 ? might be 1.0667x slower make-rope-cse 4.7732+-0.1692 ? 4.8723+-0.8439 ? might be 1.0208x slower marsaglia-larger-ints 40.3967+-1.1097 ? 40.6455+-1.3003 ? marsaglia-osr-entry 24.7384+-1.3537 23.3072+-0.6811 might be 1.0614x faster max-boolean 2.6213+-0.0352 ? 2.6898+-0.2890 ? might be 1.0261x slower method-on-number 17.5098+-0.3376 ? 22.4109+-14.0126 ? might be 1.2799x slower min-boolean 2.8070+-0.4702 2.5903+-0.0325 might be 1.0836x faster minus-boolean-double 3.3106+-0.0719 3.3094+-0.0677 minus-boolean 2.8934+-1.2166 2.4418+-0.0213 might be 1.1850x faster misc-strict-eq 38.2019+-0.7176 ? 39.9557+-5.6055 ? might be 1.0459x slower mod-boolean-double 11.1942+-0.1016 ? 11.3937+-0.3026 ? might be 1.0178x slower mod-boolean 8.4171+-0.9810 8.3821+-0.9729 mul-boolean-double 3.9478+-0.1531 3.8480+-0.0888 might be 1.0259x faster mul-boolean 3.2902+-0.5882 3.0135+-0.0323 might be 1.0918x faster neg-boolean 3.3673+-0.1663 3.3660+-0.1113 negative-zero-divide 0.3599+-0.0118 0.3590+-0.0435 negative-zero-modulo 0.5098+-0.2041 0.4619+-0.2687 might be 1.1037x faster negative-zero-negate 0.3439+-0.0301 0.3254+-0.0194 might be 1.0566x faster nested-function-parsing 22.4792+-0.0951 22.3723+-0.2100 new-array-buffer-dead 2.9282+-0.1486 2.9133+-0.0427 new-array-buffer-push 6.8019+-0.1567 6.7240+-0.1963 might be 1.0116x faster new-array-dead 12.9388+-0.3516 12.5674+-0.1952 might be 1.0296x faster new-array-push 5.1696+-3.7687 4.1108+-0.4632 might be 1.2576x faster number-test 3.1060+-0.0325 ? 3.1353+-0.0847 ? object-closure-call 6.3005+-1.1714 5.9045+-0.2945 might be 1.0671x faster object-test 3.2305+-0.0341 ? 3.2360+-0.0394 ? obvious-sink-pathology-taken 140.4150+-1.2704 ? 140.9290+-0.3972 ? obvious-sink-pathology 135.0107+-1.4988 ? 147.4377+-34.5552 ? might be 1.0920x slower obviously-elidable-new-object 36.5054+-2.3460 35.5518+-1.6774 might be 1.0268x faster plus-boolean-arith 2.7604+-0.2210 2.7435+-0.3513 plus-boolean-double 3.3502+-0.1848 ? 3.3851+-0.1743 ? might be 1.0104x slower plus-boolean 2.5173+-0.1290 ? 2.6835+-0.2942 ? might be 1.0660x slower poly-chain-access-different-prototypes-simple 3.4348+-0.0391 ? 3.4893+-0.1397 ? might be 1.0159x slower poly-chain-access-different-prototypes 2.8760+-0.2031 ? 2.9122+-0.2678 ? might be 1.0126x slower poly-chain-access-simpler 3.8694+-1.4612 3.4565+-0.0635 might be 1.1195x faster poly-chain-access 2.8790+-0.2934 ? 2.9852+-0.3411 ? might be 1.0369x slower poly-stricteq 59.9619+-1.4524 58.9685+-1.8195 might be 1.0168x faster polymorphic-array-call 1.5725+-0.5264 1.3868+-0.3115 might be 1.1339x faster polymorphic-get-by-id 3.2655+-0.0758 ? 3.8260+-1.7670 ? might be 1.1716x slower polymorphic-put-by-id 28.9439+-2.7264 ? 30.6002+-3.4385 ? might be 1.0572x slower polymorphic-structure 15.3046+-0.4961 ? 15.6932+-0.5003 ? might be 1.0254x slower polyvariant-monomorphic-get-by-id 9.1883+-1.0448 8.9286+-0.2914 might be 1.0291x faster proto-getter-access 10.3055+-0.3461 10.1285+-0.2223 might be 1.0175x faster put-by-id-replace-and-transition 10.1279+-1.1886 9.5262+-1.7196 might be 1.0632x faster put-by-id-slightly-polymorphic 2.9514+-0.0343 ? 3.0458+-0.1614 ? might be 1.0320x slower put-by-id 14.3270+-1.6635 13.9602+-1.7966 might be 1.0263x faster put-by-val-direct 0.5931+-0.0086 ? 0.7197+-0.4376 ? might be 1.2135x slower put-by-val-large-index-blank-indexing-type 5.9366+-0.1925 ? 6.2490+-0.1904 ? might be 1.0526x slower put-by-val-machine-int 2.6714+-0.0896 ? 2.6782+-0.0438 ? rare-osr-exit-on-local 15.5684+-0.5559 15.5327+-0.1784 register-pressure-from-osr 22.3459+-0.4009 ? 22.4062+-0.3140 ? setter 5.4556+-0.1695 5.3942+-0.1466 might be 1.0114x faster simple-activation-demo 28.4766+-0.1222 ! 29.4709+-0.1253 ! definitely 1.0349x slower simple-getter-access 13.3254+-1.6219 ? 14.6175+-4.6889 ? might be 1.0970x slower simple-poly-call-nested 9.2507+-0.5871 ? 9.6475+-0.7426 ? might be 1.0429x slower simple-poly-call 1.4470+-0.1036 1.4467+-0.1793 sin-boolean 22.9891+-2.0147 ? 23.6413+-0.8697 ? might be 1.0284x slower sinkable-new-object-dag 72.4993+-3.3452 ? 73.8640+-2.0511 ? might be 1.0188x slower sinkable-new-object-taken 53.1371+-0.9178 52.0226+-3.4174 might be 1.0214x faster sinkable-new-object 41.0032+-3.2646 40.4557+-3.6931 might be 1.0135x faster slow-array-profile-convergence 2.9385+-0.0911 ? 3.0474+-0.4819 ? might be 1.0370x slower slow-convergence 5.1564+-3.2090 3.4407+-0.2040 might be 1.4987x faster sparse-conditional 1.7697+-1.6104 1.2757+-0.1095 might be 1.3872x faster splice-to-remove 16.9042+-0.6033 ? 17.5367+-0.9272 ? might be 1.0374x slower string-char-code-at 18.4998+-0.4409 18.3556+-0.1475 string-concat-object 2.7486+-0.3118 2.6556+-0.2396 might be 1.0350x faster string-concat-pair-object 2.5237+-0.0460 2.5089+-0.0252 string-concat-pair-simple 13.4117+-1.5577 13.1990+-1.6201 might be 1.0161x faster string-concat-simple 12.4724+-1.5736 12.4150+-1.3737 string-cons-repeat 8.2840+-1.5469 ? 9.8802+-0.6525 ? might be 1.1927x slower string-cons-tower 8.1694+-0.5148 ? 9.0427+-1.6033 ? might be 1.1069x slower string-equality 17.7189+-0.2321 ? 18.0007+-0.5274 ? might be 1.0159x slower string-get-by-val-big-char 7.4280+-0.4092 ? 8.3806+-2.8309 ? might be 1.1282x slower string-get-by-val-out-of-bounds-insane 3.9048+-0.2231 ? 3.9883+-0.1867 ? might be 1.0214x slower string-get-by-val-out-of-bounds 5.9940+-1.9280 5.7580+-1.1536 might be 1.0410x faster string-get-by-val 3.5812+-0.6738 3.3987+-0.0568 might be 1.0537x faster string-hash 2.2836+-0.1582 2.2501+-0.0137 might be 1.0149x faster string-long-ident-equality 14.6225+-0.2690 ? 15.0852+-0.9357 ? might be 1.0316x slower string-out-of-bounds 15.3398+-0.8328 ? 15.3955+-1.0120 ? string-repeat-arith 32.8624+-1.2783 32.3467+-0.9611 might be 1.0159x faster string-sub 65.2892+-1.8509 64.2690+-1.9304 might be 1.0159x faster string-test 3.0943+-0.1310 3.0653+-0.0655 string-var-equality 31.9423+-1.3715 31.4468+-1.1211 might be 1.0158x faster structure-hoist-over-transitions 2.6403+-0.0507 ? 2.6973+-0.2046 ? might be 1.0216x slower substring-concat-weird 46.2995+-20.6763 39.9791+-1.9881 might be 1.1581x faster substring-concat 52.2427+-32.9617 41.8105+-1.8474 might be 1.2495x faster substring 48.6210+-6.8250 ? 57.3079+-33.7171 ? might be 1.1787x slower switch-char-constant 2.7711+-0.0338 ? 2.7995+-0.0391 ? might be 1.0103x slower switch-char 7.6321+-0.5567 ? 8.8349+-1.8201 ? might be 1.1576x slower switch-constant 8.3331+-0.3295 ? 8.4852+-0.7510 ? might be 1.0183x slower switch-string-basic-big-var 15.6416+-0.5043 ? 15.7679+-0.8306 ? switch-string-basic-big 14.5283+-0.5544 14.3853+-0.4371 switch-string-basic-var 20.0953+-15.5536 14.7420+-0.3433 might be 1.3631x faster switch-string-basic 14.0074+-0.6675 13.7230+-0.4588 might be 1.0207x faster switch-string-big-length-tower-var 20.7465+-0.6393 20.4052+-0.3625 might be 1.0167x faster switch-string-length-tower-var 15.1265+-0.4033 ? 15.3610+-0.4541 ? might be 1.0155x slower switch-string-length-tower 13.3100+-0.7230 13.3057+-0.3814 switch-string-short 13.2535+-0.4878 13.2094+-0.4428 switch 12.4083+-0.5648 ? 13.3530+-0.7820 ? might be 1.0761x slower tear-off-arguments-simple 2.0284+-0.0892 ? 2.0570+-0.1971 ? might be 1.0141x slower tear-off-arguments 2.8776+-0.0397 ? 2.9191+-0.1037 ? might be 1.0144x slower temporal-structure 15.7438+-9.1255 14.8119+-7.2794 might be 1.0629x faster to-int32-boolean 14.4197+-0.3638 13.9302+-0.2048 might be 1.0351x faster undefined-property-access 389.0835+-0.6218 ! 390.7419+-0.2234 ! definitely 1.0043x slower undefined-test 3.1800+-0.1835 ? 3.2465+-0.3102 ? might be 1.0209x slower unprofiled-licm 23.4426+-0.4655 ? 26.6584+-11.2336 ? might be 1.1372x slower weird-inlining-const-prop 2.3352+-0.1929 ? 2.7089+-0.4512 ? might be 1.1600x slower <arithmetic> 18.6309+-0.2709 18.5855+-0.4050 might be 1.0024x faster <geometric> * 8.6761+-0.0775 8.6757+-0.0767 might be 1.0000x faster <harmonic> 4.4263+-0.1143 ? 4.4279+-0.0812 ? might be 1.0004x slower ToT Hacks AsmBench: bigfib.cpp 606.0417+-281.8439 516.6020+-2.6077 might be 1.1731x faster cray.c 497.8179+-159.1497 445.2653+-3.3715 might be 1.1180x faster dry.c 512.9238+-2.9695 505.0775+-19.3583 might be 1.0155x faster FloatMM.c 803.8627+-17.7236 800.1218+-6.1871 gcc-loops.cpp 4267.2762+-20.9748 4266.8130+-7.5286 n-body.c 1014.9383+-4.0234 1011.7133+-2.6030 Quicksort.c 453.8568+-9.6806 452.4697+-9.9614 stepanov_container.cpp 4709.1663+-2788.8796 3806.6075+-9.2931 might be 1.2371x faster Towers.c 270.3608+-1.0263 ? 272.9795+-7.5764 ? <arithmetic> 1459.5827+-335.4788 1341.9611+-2.0783 might be 1.0876x faster <geometric> * 871.4501+-88.7739 830.8186+-6.4264 might be 1.0489x faster <harmonic> 628.0399+-33.7528 609.2786+-7.5879 might be 1.0308x faster ToT Hacks CompressionBench: huffman 390.5515+-0.6049 ^ 371.9929+-0.1569 ^ definitely 1.0499x faster arithmetic-simple 415.8035+-4.5546 415.7178+-2.0462 arithmetic-precise 309.1473+-2.9329 ? 310.0253+-1.4251 ? arithmetic-complex-precise 309.6459+-1.1425 ? 309.9286+-3.5670 ? arithmetic-precise-order-0 442.9757+-8.1130 ? 497.5246+-153.7694 ? might be 1.1231x slower arithmetic-precise-order-1 349.3610+-1.0678 ? 354.2745+-18.5754 ? might be 1.0141x slower arithmetic-precise-order-2 390.0105+-3.1114 ? 390.8430+-1.9035 ? arithmetic-simple-order-1 443.7272+-2.2876 ? 444.3480+-2.2648 ? arithmetic-simple-order-2 508.1744+-43.9206 493.5859+-3.3171 might be 1.0296x faster lz-string 350.5391+-4.7639 ? 351.3465+-10.5778 ? <arithmetic> 390.9936+-4.1851 ? 393.9587+-14.9502 ? might be 1.0076x slower <geometric> * 386.3414+-2.9811 ? 388.3015+-10.7084 ? might be 1.0051x slower <harmonic> 381.7915+-2.0297 ? 383.0137+-7.4881 ? might be 1.0032x slower ToT Hacks All benchmarks: <arithmetic> 104.7648+-8.0148 101.3865+-1.5294 might be 1.0333x faster <geometric> 14.1584+-0.1005 14.1208+-0.0911 might be 1.0027x faster <harmonic> 3.6025+-0.0177 ? 3.6143+-0.1008 ? might be 1.0033x slower ToT Hacks Geomean of preferred means: <scaled-result> 67.9138+-1.7434 67.1632+-0.8812 might be 1.0112x faster
(In reply to comment #5) > I think you could fix the iteration thing by just popping from the end of > the vector (or taking from the begin of the hash table) rather than keeping > an index. Yeah, that'll be very nice. Thanks for the suggestion :)
Created attachment 248356 [details] Patch for landing
Comment on attachment 248356 [details] Patch for landing Clearing flags on attachment: 248356 Committed r181350: <http://trac.webkit.org/changeset/181350>
All reviewed patches have been landed. Closing bug.
http://jsfiddle.net/fvyw4ba0/3/ still gets killed after this change.
Yes, I think the remaining bug -- and the reason that your two jsfiddle still crash -- is that the high rate of eden GC promotes objects into old space, and then we forget how big they are, so we never GC old space. I'm working on a patch to remember the size of these canvases once in old space, like we do for some other objects. That should fix the jsfiddles.