mozilla / pluotsorbet

[ARCHIVED] PluotSorbet is a J2ME-compatible virtual machine written in JavaScript.
GNU General Public License v2.0
237 stars 46 forks source link

Use const enums everywhere. #1842

Closed brendandahl closed 9 years ago

mykmelez commented 9 years ago

This looks fine. What does the perf improvement look like?

brendandahl commented 9 years ago

Fixes #1841 I'm seeing 15-18% improvement.

mykmelez commented 9 years ago

I'm seeing 15-18% improvement.

Hmm, I don't see that on the startup benchmark for RunWhatsApp on desktop:

Test Baseline Mean Mean +/- % P Min Max
startupTime 977ms 979ms 2ms 0.20 SAME 961ms 1,003ms
vmStartupTime 200ms 200ms 0ms 0.02 SAME 186ms 226ms
bgStartupTime 43ms 44ms 1ms 1.36 WORSE 41ms 46ms
fgStartupTime 624ms 621ms -3ms -0.49 SAME 595ms 658ms
fgRefreshStartupTime 110ms 114ms 4ms 4.02 SAME 90ms 123ms
fgRestartTime n/a NaNms n/a n/a n/a Infinityms -Infinityms
totalSize 59,059kb 59,098kb 39kb 0.07 SAME 57,863kb 59,923kb
domSize 171kb 171kb 0kb -0.00 SAME 171kb 171kb
styleSize 396kb 396kb 0kb 0.07 SAME 396kb 398kb
jsObjectsSize 51,406kb 51,424kb 17kb 0.03 WORSE 51,420kb 51,426kb
jsStringsSize 501kb 499kb -2kb -0.45 BETTER 497kb 501kb
jsOtherSize 6,347kb 6,372kb 24kb 0.38 SAME 5,140kb 7,192kb
otherSize 238kb 237kb -1kb -0.25 BETTER 235kb 239kb
USS n/a NaNkb n/a n/a n/a Infinitykb -Infinitykb
peakRSS 459,696kb 499,584kb 39,888kb 8.68 WORSE 495,832kb 499,716kb

Is there anything special about your build configuration? I'm building with RELEASE=1 BENCHMARK=1, but not with the runwhatsapppreview.mk file, and the URL http://localhost:8000/index.html?downloadJAD=http://www.whatsapp.com/s40/WhatsApp.jad&midletClassName=com.whatsapp.client.test.WhatsAppBG&logLevel=log&logConsole=page.

brendandahl commented 9 years ago

What version of typescript are you running?

mykmelez commented 9 years ago

What version of typescript are you running?

I was running 1.4.1, but I just upgraded to 1.5.3, which is the latest stable version available via npm, and I'm seeing the same results. What version are you using?

brendandahl commented 9 years ago

I'm using 1.5.3, 1.4 would inline the results everywhere so I wouldn't expect you to see a difference there. I'm not sure why you're not seeing a difference on 1.5.3 though.

brendandahl commented 9 years ago

Oh did you build your baseline with 1.4 or 1.5?

mykmelez commented 9 years ago

Oh did you build your baseline with 1.4 or 1.5?

Ah, I built it with 1.4. When I build it with 1.5, then this branch shows an improvement:

Test Baseline Mean Mean +/- % P Min Max
startupTime 1,189ms 1,048ms -142ms -11.92 BETTER 999ms 1,237ms
vmStartupTime 220ms 208ms -11ms -5.11 BETTER 185ms 235ms
bgStartupTime 50ms 43ms -7ms -13.90 BETTER 41ms 52ms
fgStartupTime 771ms 675ms -96ms -12.42 BETTER 635ms 837ms
fgRefreshStartupTime 149ms 121ms -28ms -18.71 BETTER 89ms 145ms
fgRestartTime n/a NaNms n/a n/a n/a Infinityms -Infinityms
totalSize 59,043kb 59,024kb -20kb -0.03 SAME 57,764kb 59,877kb
domSize 171kb 171kb 0kb 0.00 SAME 170kb 171kb
styleSize 397kb 396kb 0kb -0.06 SAME 396kb 397kb
jsObjectsSize 51,353kb 51,370kb 17kb 0.03 WORSE 51,343kb 51,381kb
jsStringsSize 496kb 501kb 5kb 1.05 WORSE 497kb 503kb
jsOtherSize 6,391kb 6,348kb -43kb -0.67 SAME 5,098kb 7,197kb
otherSize 236kb 237kb 1kb 0.22 SAME 236kb 239kb
USS n/a NaNkb n/a n/a n/a Infinitykb -Infinitykb
peakRSS 450,464kb 487,929kb 37,465kb 8.32 WORSE 460,060kb 491,924kb

Which mostly claws back the perf regression from TypeScript 1.5:

Test Baseline Mean Mean +/- % P Min Max
startupTime 1,027ms 1,198ms 171ms 16.67 WORSE 1,159ms 1,321ms
vmStartupTime 206ms 221ms 15ms 7.18 WORSE 179ms 251ms
bgStartupTime 43ms 52ms 9ms 21.77 WORSE 48ms 63ms
fgStartupTime 658ms 776ms 118ms 18.01 WORSE 730ms 870ms
fgRefreshStartupTime 121ms 149ms 29ms 23.72 WORSE 116ms 172ms
fgRestartTime n/a NaNms n/a n/a n/a Infinityms -Infinityms
totalSize 59,001kb 59,054kb 53kb 0.09 SAME 57,727kb 59,983kb
domSize 171kb 171kb 0kb -0.00 SAME 170kb 171kb
styleSize 396kb 397kb 0kb 0.08 SAME 396kb 399kb
jsObjectsSize 51,354kb 51,357kb 4kb 0.01 WORSE 51,350kb 51,361kb
jsStringsSize 497kb 497kb 0kb -0.01 SAME 492kb 502kb
jsOtherSize 6,347kb 6,396kb 49kb 0.77 SAME 5,079kb 7,320kb
otherSize 237kb 237kb 0kb -0.03 SAME 232kb 239kb
USS n/a NaNkb n/a n/a n/a Infinitykb -Infinitykb
peakRSS 455,819kb 479,770kb 23,951kb 5.25 WORSE 473,060kb 480,900kb

Presumably the regression is mostly (entirely?) the enum reference in-lining changes, so exactly what you're addressing. It's unclear why my numbers don't show this branch clawing back all of the regression, though. Perhaps that's just a fluke, or maybe there's another perf regression in 1.5.

In any case, this is obviously a worthy win, even though I may stick with TypeScript 1.4 locally for a bit longer.