Skip to content

Trampolines for large binary expressions #36248

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

weswigham
Copy link
Member

Fixes #35633

This introduces trampolines into the binder, checker, and emitter. The binder trampoline is complete - every bind call returns to the root of the binder stack to be performed. The checker trampoline is partial - all immediately nested binary expressions are included within a single stack frame of checkBinaryExpression. Control flow is much less likely to need a trampoline (and does not in either given example), as the control flow graph is much simplified compared to the AST. However it could be added, if there is interest in doing so. The emitter trampoline is both partial and conditional; our printer handler API makes it awkward to try to trampoline through it, so to avoid breaking it, we only perform an emit trampoline for binary expressions when a node does not need notifications, is not substituted, does not need comment emit, and does not need sourcemap emit. This is quite limiting, but the primary concern here was typechecking and language server operations, so I figure having a way to emit a file like those provided (with removeComments: true) without crashing might be better than always crashing during emit on them, on the offchance someone includes something like them in a project they're actually emitting. Do note though that we do still just.... run out of stack space, should those conditions not be met. If we're ever comfortable breaking our printer/transformer API, making it trampoline-able (either by return convention, similar to the trampoline in the emitter, or by generator construction, as in the binder) would be something we should do.

In addition, a few small other bits got trampolines. In the parser, fixupParentPointers became a pretty trivial iterative algorithm, rather than the recursive one (this is only used during testing, so doesn't appear in the production stacktrace, but is required nonetheless). In the test harness, visitNode in the type/symbol writer now just utilizes a straight iterator of every AST node (which is built utilizing a visitEachChild generator-based variant produced to more easily implement implement the binder trampoline) without relying on any recursion.

@weswigham weswigham requested a review from rbuckton January 17, 2020 00:18
@weswigham
Copy link
Member Author

@typescript-bot perf test this - I think my trampoline in the emitter is low/no overhead (and some of the smaller changes to enable it may actually lower stack/memory usage in normal scenarios), and the checker one isn't on a particularly hot path, so I don't expect much, if any, changes to check or emit time (and need to validate that). However the restructuring in the binder likely has performance implications; I am unsure of how much, so definitely need to check it out.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jan 17, 2020

Heya @weswigham, I've started to run the perf test suite on this PR at 2c34061. You can monitor the build here. It should now contribute to this PR's status checks.

Update: The results are in!

@microsoft microsoft deleted a comment from typescript-bot Jan 17, 2020
@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..36248

Metric master 36248 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 356,340k (± 0.02%) 358,209k (± 0.03%) +1,869k (+ 0.52%) 358,007k 358,461k
Parse Time 1.61s (± 0.48%) 1.63s (± 0.57%) +0.02s (+ 1.43%) 1.62s 1.66s
Bind Time 0.88s (± 0.99%) 10.54s (±14.13%) +9.67s (+1,100.91%) 4.55s 11.54s
Check Time 4.59s (± 0.76%) 4.80s (± 1.13%) +0.21s (+ 4.66%) 4.62s 4.90s
Emit Time 5.23s (± 0.60%) 5.38s (± 1.19%) +0.16s (+ 2.98%) 5.19s 5.48s
Total Time 12.31s (± 0.48%) 22.36s (± 7.08%) +10.06s (+81.71%) 15.99s 23.44s
Monaco - node (v10.16.3, x64)
Memory used 367,710k (± 0.01%) 368,013k (± 0.02%) +303k (+ 0.08%) 367,830k 368,233k
Parse Time 1.26s (± 0.54%) 1.26s (± 1.02%) +0.01s (+ 0.64%) 1.24s 1.29s
Bind Time 0.76s (± 0.44%) 5.89s (±14.94%) +5.13s (+674.87%) 4.34s 6.92s
Check Time 4.71s (± 0.63%) 4.79s (± 0.68%) +0.08s (+ 1.70%) 4.69s 4.87s
Emit Time 2.95s (± 0.69%) 2.97s (± 1.52%) +0.02s (+ 0.61%) 2.85s 3.03s
Total Time 9.67s (± 0.49%) 14.91s (± 6.38%) +5.24s (+54.18%) 13.25s 16.01s
TFS - node (v10.16.3, x64)
Memory used 323,503k (± 0.03%) 323,876k (± 0.01%) +372k (+ 0.12%) 323,759k 323,970k
Parse Time 0.95s (± 0.68%) 0.96s (± 1.02%) +0.01s (+ 1.48%) 0.94s 0.99s
Bind Time 0.73s (± 1.57%) 5.56s (±27.92%) +4.84s (+664.15%) 3.98s 11.20s
Check Time 4.15s (± 0.55%) 4.33s (± 2.17%) +0.18s (+ 4.41%) 4.20s 4.63s
Emit Time 3.03s (± 0.70%) 3.02s (± 0.90%) -0.01s (- 0.36%) 2.95s 3.07s
Total Time 8.86s (± 0.38%) 13.87s (±11.85%) +5.02s (+56.61%) 12.07s 19.81s
Angular - node (v12.1.0, x64)
Memory used 331,999k (± 0.02%) 332,811k (± 0.02%) +812k (+ 0.24%) 332,705k 332,975k
Parse Time 1.56s (± 0.69%) 1.58s (± 0.64%) +0.02s (+ 1.54%) 1.56s 1.60s
Bind Time 0.85s (± 0.85%) 10.79s (± 0.97%) +9.94s (+1,166.55%) 10.49s 10.98s
Check Time 4.51s (± 0.61%) 4.84s (± 0.72%) +0.33s (+ 7.32%) 4.78s 4.93s
Emit Time 5.43s (± 1.08%) 5.56s (± 0.64%) +0.14s (+ 2.51%) 5.46s 5.66s
Total Time 12.36s (± 0.57%) 22.78s (± 0.26%) +10.42s (+84.35%) 22.60s 22.86s
Monaco - node (v12.1.0, x64)
Memory used 347,489k (± 0.01%) 346,984k (± 0.05%) -505k (- 0.15%) 346,831k 347,733k
Parse Time 1.22s (± 0.65%) 1.23s (± 0.73%) +0.00s (+ 0.33%) 1.20s 1.24s
Bind Time 0.74s (± 0.65%) 6.50s (± 7.94%) +5.76s (+781.82%) 4.42s 6.82s
Check Time 4.56s (± 0.35%) 4.73s (± 1.05%) +0.17s (+ 3.77%) 4.56s 4.80s
Emit Time 3.01s (± 0.65%) 2.99s (± 1.05%) -0.02s (- 0.50%) 2.91s 3.06s
Total Time 9.53s (± 0.26%) 15.45s (± 3.79%) +5.92s (+62.11%) 13.10s 15.86s
TFS - node (v12.1.0, x64)
Memory used 305,792k (± 0.02%) 305,381k (± 0.06%) -412k (- 0.13%) 305,184k 306,091k
Parse Time 0.94s (± 0.74%) 0.94s (± 0.72%) +0.00s (+ 0.32%) 0.93s 0.96s
Bind Time 0.69s (± 0.86%) 5.69s (± 7.34%) +5.00s (+719.74%) 4.01s 5.95s
Check Time 4.10s (± 0.29%) 4.38s (± 1.03%) +0.28s (+ 6.75%) 4.21s 4.43s
Emit Time 3.07s (± 0.63%) 3.11s (± 1.61%) +0.04s (+ 1.37%) 3.01s 3.25s
Total Time 8.82s (± 0.39%) 14.13s (± 3.47%) +5.31s (+60.27%) 12.17s 14.55s
Angular - node (v8.9.0, x64)
Memory used 351,234k (± 0.01%) 353,532k (± 0.02%) +2,298k (+ 0.65%) 353,377k 353,646k
Parse Time 2.09s (± 0.53%) 2.13s (± 0.57%) +0.04s (+ 1.72%) 2.10s 2.16s
Bind Time 0.91s (± 0.92%) 40.20s (± 5.36%) +39.30s (+4,341.99%) 35.40s 42.38s
Check Time 5.38s (± 0.80%) 8.59s (± 6.27%) +3.21s (+59.53%) 6.93s 9.22s
Emit Time 6.26s (± 0.58%) 7.39s (± 6.14%) +1.13s (+18.03%) 6.25s 8.22s
Total Time 14.64s (± 0.47%) 58.31s (± 4.81%) +43.67s (+298.29%) 52.11s 61.83s
Monaco - node (v8.9.0, x64)
Memory used 365,977k (± 0.01%) 366,519k (± 0.01%) +542k (+ 0.15%) 366,438k 366,602k
Parse Time 1.57s (± 0.53%) 1.57s (± 0.31%) +0.00s (+ 0.00%) 1.56s 1.58s
Bind Time 0.94s (± 0.88%) 36.10s (± 0.36%) +35.15s (+3,719.68%) 35.84s 36.38s
Check Time 5.44s (± 1.71%) 9.01s (± 1.80%) +3.57s (+65.61%) 8.61s 9.39s
Emit Time 3.30s (± 4.72%) 3.23s (± 1.42%) -0.07s (- 2.21%) 3.13s 3.31s
Total Time 11.25s (± 0.75%) 49.90s (± 0.47%) +38.64s (+343.36%) 49.44s 50.60s
TFS - node (v8.9.0, x64)
Memory used 322,739k (± 0.01%) 323,320k (± 0.01%) +582k (+ 0.18%) 323,215k 323,403k
Parse Time 1.26s (± 0.38%) 1.27s (± 0.59%) +0.00s (+ 0.32%) 1.25s 1.28s
Bind Time 0.75s (± 0.97%) 31.35s (± 0.60%) +30.60s (+4,091.04%) 31.03s 31.99s
Check Time 4.78s (± 0.61%) 8.37s (± 1.47%) +3.59s (+75.23%) 8.15s 8.62s
Emit Time 3.21s (± 0.59%) 3.65s (± 2.65%) +0.45s (+13.92%) 3.49s 3.90s
Total Time 9.99s (± 0.45%) 44.64s (± 0.77%) +34.64s (+346.63%) 44.01s 45.60s
Angular - node (v8.9.0, x86)
Memory used 199,552k (± 0.02%) 200,976k (± 0.03%) +1,424k (+ 0.71%) 200,861k 201,141k
Parse Time 2.04s (± 0.79%) 2.04s (± 0.61%) +0.01s (+ 0.39%) 2.02s 2.08s
Bind Time 1.02s (± 0.74%) 35.06s (± 0.32%) +34.03s (+3,320.29%) 34.89s 35.35s
Check Time 4.91s (± 0.42%) 8.55s (± 3.67%) +3.64s (+74.25%) 7.87s 9.22s
Emit Time 6.11s (± 1.36%) 6.98s (± 3.13%) +0.87s (+14.17%) 6.35s 7.40s
Total Time 14.08s (± 0.67%) 52.63s (± 0.31%) +38.55s (+273.84%) 52.28s 53.06s
Monaco - node (v8.9.0, x86)
Memory used 205,153k (± 0.01%) 205,655k (± 0.02%) +502k (+ 0.24%) 205,557k 205,722k
Parse Time 1.60s (± 0.51%) 1.61s (± 0.77%) +0.01s (+ 0.69%) 1.59s 1.64s
Bind Time 0.76s (± 1.22%) 30.35s (± 0.28%) +29.59s (+3,903.43%) 30.18s 30.51s
Check Time 5.45s (± 1.50%) 7.67s (± 1.27%) +2.22s (+40.84%) 7.37s 7.88s
Emit Time 2.90s (± 3.20%) 3.65s (± 1.37%) +0.74s (+25.64%) 3.56s 3.77s
Total Time 10.70s (± 0.61%) 43.27s (± 0.34%) +32.57s (+304.27%) 43.01s 43.62s
TFS - node (v8.9.0, x86)
Memory used 182,081k (± 0.03%) 182,565k (± 0.02%) +484k (+ 0.27%) 182,453k 182,679k
Parse Time 1.32s (± 1.48%) 1.31s (± 0.99%) -0.00s (- 0.15%) 1.29s 1.35s
Bind Time 0.71s (± 1.15%) 26.57s (± 0.29%) +25.86s (+3,641.97%) 26.41s 26.76s
Check Time 4.54s (± 0.80%) 7.64s (± 0.51%) +3.11s (+68.45%) 7.52s 7.70s
Emit Time 2.96s (± 0.88%) 3.16s (± 1.09%) +0.19s (+ 6.55%) 3.10s 3.23s
Total Time 9.53s (± 0.52%) 38.68s (± 0.27%) +29.16s (+306.04%) 38.46s 38.99s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-166-generic
Architecturex64
Available Memory16 GB
Available Memory5 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
Benchmark Name Iterations
Current 36248 10
Baseline master 10

@weswigham
Copy link
Member Author

weswigham commented Jan 17, 2020

+4,341.99%

Yeah, OK Now I wanna know what aspect makes it so slow. I should bump up the target to see how bad it is when the generators aren't downleveled. In most tests the emitter trampoline seems to perform OK, so swapping the checker one to work like that once is probably a given. The binder... maybe I can make the binder work a little more like that? I wanna see how slow the not-downleveled version is first, though.

@weswigham weswigham force-pushed the trampolines-for-large-binary-expressions branch 2 times, most recently from 82f9f2f to 5ec69bf Compare January 17, 2020 01:45
@weswigham weswigham force-pushed the trampolines-for-large-binary-expressions branch from 5ec69bf to 6e1c80d Compare January 17, 2020 01:55
@weswigham
Copy link
Member Author

@typescript-bot perf test this now with 100% more runtime provided generators (do note: I'm still manually forwarding the generators in the binder because for some reason that's faster than using yield*).

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jan 17, 2020

Heya @weswigham, I've started to run the perf test suite on this PR at 6e1c80d. You can monitor the build here. It should now contribute to this PR's status checks.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..36248

Metric master 36248 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 356,339k (± 0.02%) 358,952k (± 0.02%) +2,612k (+ 0.73%) 358,674k 359,064k
Parse Time 1.61s (± 0.42%) 1.72s (± 0.61%) +0.10s (+ 6.44%) 1.70s 1.74s
Bind Time 0.88s (± 0.78%) 2.05s (± 0.98%) +1.17s (+133.71%) 2.00s 2.10s
Check Time 4.61s (± 0.39%) 4.77s (± 0.58%) +0.16s (+ 3.40%) 4.70s 4.84s
Emit Time 5.28s (± 0.63%) 5.40s (± 1.40%) +0.12s (+ 2.33%) 5.25s 5.60s
Total Time 12.38s (± 0.43%) 13.93s (± 0.70%) +1.55s (+12.50%) 13.73s 14.09s
Monaco - node (v10.16.3, x64)
Memory used 367,740k (± 0.01%) 368,380k (± 0.01%) +640k (+ 0.17%) 368,279k 368,485k
Parse Time 1.25s (± 0.68%) 1.34s (± 0.68%) +0.09s (+ 7.37%) 1.32s 1.36s
Bind Time 0.76s (± 0.68%) 1.89s (± 0.69%) +1.13s (+147.83%) 1.86s 1.91s
Check Time 4.68s (± 0.48%) 4.84s (± 0.49%) +0.17s (+ 3.64%) 4.79s 4.89s
Emit Time 2.95s (± 0.73%) 2.97s (± 0.81%) +0.02s (+ 0.85%) 2.92s 3.02s
Total Time 9.63s (± 0.48%) 11.04s (± 0.54%) +1.41s (+14.69%) 10.94s 11.17s
TFS - node (v10.16.3, x64)
Memory used 323,586k (± 0.03%) 323,922k (± 0.01%) +336k (+ 0.10%) 323,833k 324,013k
Parse Time 0.95s (± 0.61%) 1.02s (± 0.74%) +0.08s (+ 8.13%) 1.00s 1.03s
Bind Time 0.74s (± 0.91%) 1.70s (± 0.73%) +0.96s (+130.26%) 1.68s 1.73s
Check Time 4.14s (± 0.53%) 4.30s (± 0.46%) +0.16s (+ 3.94%) 4.26s 4.34s
Emit Time 2.99s (± 1.01%) 3.09s (± 0.87%) +0.10s (+ 3.34%) 3.03s 3.14s
Total Time 8.82s (± 0.48%) 10.12s (± 0.43%) +1.30s (+14.73%) 10.03s 10.21s
Angular - node (v12.1.0, x64)
Memory used 331,980k (± 0.02%) 334,400k (± 0.10%) +2,420k (+ 0.73%) 333,512k 334,858k
Parse Time 1.56s (± 0.57%) 1.66s (± 0.48%) +0.11s (+ 6.81%) 1.64s 1.68s
Bind Time 0.86s (± 0.93%) 1.89s (± 0.56%) +1.03s (+120.28%) 1.86s 1.91s
Check Time 4.52s (± 0.39%) 4.70s (± 0.76%) +0.18s (+ 4.05%) 4.64s 4.80s
Emit Time 5.48s (± 0.58%) 5.61s (± 1.08%) +0.13s (+ 2.35%) 5.51s 5.76s
Total Time 12.42s (± 0.37%) 13.86s (± 0.65%) +1.44s (+11.60%) 13.70s 14.08s
Monaco - node (v12.1.0, x64)
Memory used 347,462k (± 0.02%) 348,090k (± 0.02%) +628k (+ 0.18%) 347,919k 348,195k
Parse Time 1.21s (± 0.82%) 1.30s (± 0.82%) +0.09s (+ 7.02%) 1.28s 1.33s
Bind Time 0.74s (± 0.67%) 1.72s (± 0.76%) +0.98s (+133.83%) 1.70s 1.75s
Check Time 4.56s (± 0.51%) 4.67s (± 0.36%) +0.11s (+ 2.43%) 4.64s 4.71s
Emit Time 3.02s (± 0.84%) 3.04s (± 0.74%) +0.02s (+ 0.56%) 2.99s 3.08s
Total Time 9.53s (± 0.40%) 10.72s (± 0.31%) +1.19s (+12.53%) 10.65s 10.79s
TFS - node (v12.1.0, x64)
Memory used 305,801k (± 0.01%) 306,187k (± 0.01%) +386k (+ 0.13%) 306,104k 306,271k
Parse Time 0.94s (± 1.05%) 1.00s (± 0.97%) +0.06s (+ 6.50%) 0.98s 1.02s
Bind Time 0.69s (± 0.84%) 1.58s (± 1.05%) +0.89s (+129.99%) 1.55s 1.63s
Check Time 4.10s (± 0.61%) 4.25s (± 0.40%) +0.15s (+ 3.68%) 4.22s 4.29s
Emit Time 3.09s (± 0.78%) 3.13s (± 0.93%) +0.04s (+ 1.23%) 3.08s 3.21s
Total Time 8.83s (± 0.43%) 9.96s (± 0.44%) +1.14s (+12.92%) 9.85s 10.05s
Angular - node (v8.9.0, x64)
Memory used 351,265k (± 0.02%) 354,606k (± 0.01%) +3,342k (+ 0.95%) 354,516k 354,662k
Parse Time 2.09s (± 0.64%) 2.27s (± 0.63%) +0.18s (+ 8.51%) 2.24s 2.30s
Bind Time 0.91s (± 0.49%) 2.49s (± 0.76%) +1.57s (+172.70%) 2.45s 2.53s
Check Time 5.40s (± 0.68%) 5.42s (± 0.45%) +0.02s (+ 0.44%) 5.36s 5.48s
Emit Time 6.24s (± 0.94%) 6.35s (± 0.98%) +0.11s (+ 1.76%) 6.17s 6.50s
Total Time 14.64s (± 0.47%) 16.53s (± 0.40%) +1.89s (+12.92%) 16.32s 16.64s
Monaco - node (v8.9.0, x64)
Memory used 365,944k (± 0.01%) 366,830k (± 0.02%) +886k (+ 0.24%) 366,720k 366,980k
Parse Time 1.56s (± 0.43%) 1.67s (± 0.49%) +0.11s (+ 7.26%) 1.65s 1.69s
Bind Time 0.96s (± 0.70%) 2.50s (± 0.81%) +1.55s (+161.55%) 2.46s 2.55s
Check Time 5.38s (± 1.31%) 5.11s (± 0.85%) -0.27s (- 5.03%) 4.99s 5.22s
Emit Time 3.44s (± 2.84%) 3.35s (± 0.86%) -0.09s (- 2.56%) 3.29s 3.42s
Total Time 11.34s (± 0.39%) 12.63s (± 0.51%) +1.29s (+11.41%) 12.45s 12.77s
TFS - node (v8.9.0, x64)
Memory used 322,750k (± 0.01%) 323,518k (± 0.01%) +769k (+ 0.24%) 323,425k 323,611k
Parse Time 1.26s (± 0.53%) 1.33s (± 0.51%) +0.08s (+ 6.13%) 1.32s 1.35s
Bind Time 0.75s (± 1.02%) 2.21s (± 0.55%) +1.47s (+197.18%) 2.19s 2.24s
Check Time 4.75s (± 0.39%) 4.84s (± 0.68%) +0.09s (+ 1.94%) 4.76s 4.91s
Emit Time 3.21s (± 1.00%) 3.37s (± 1.99%) +0.16s (+ 5.12%) 3.11s 3.42s
Total Time 9.96s (± 0.48%) 11.76s (± 0.59%) +1.80s (+18.04%) 11.54s 11.88s
Angular - node (v8.9.0, x86)
Memory used 199,550k (± 0.02%) 201,470k (± 0.02%) +1,920k (+ 0.96%) 201,383k 201,552k
Parse Time 2.03s (± 0.62%) 2.23s (± 0.64%) +0.20s (+ 9.85%) 2.20s 2.26s
Bind Time 1.02s (± 0.46%) 2.43s (± 1.19%) +1.41s (+137.93%) 2.39s 2.53s
Check Time 4.90s (± 0.42%) 4.91s (± 0.76%) +0.01s (+ 0.22%) 4.85s 5.04s
Emit Time 6.19s (± 1.36%) 6.12s (± 1.81%) -0.07s (- 1.15%) 5.88s 6.34s
Total Time 14.14s (± 0.50%) 15.70s (± 0.85%) +1.56s (+11.00%) 15.41s 16.02s
Monaco - node (v8.9.0, x86)
Memory used 205,174k (± 0.02%) 205,657k (± 0.02%) +483k (+ 0.24%) 205,599k 205,733k
Parse Time 1.60s (± 0.85%) 1.74s (± 0.64%) +0.14s (+ 8.93%) 1.73s 1.78s
Bind Time 0.76s (± 1.11%) 2.16s (± 0.86%) +1.40s (+183.31%) 2.11s 2.21s
Check Time 5.47s (± 0.46%) 5.08s (± 0.61%) -0.39s (- 7.14%) 5.01s 5.14s
Emit Time 2.86s (± 0.64%) 3.19s (± 0.48%) +0.33s (+11.69%) 3.16s 3.24s
Total Time 10.69s (± 0.39%) 12.18s (± 0.32%) +1.49s (+13.89%) 12.09s 12.26s
TFS - node (v8.9.0, x86)
Memory used 182,093k (± 0.01%) 182,566k (± 0.01%) +473k (+ 0.26%) 182,534k 182,597k
Parse Time 1.31s (± 1.50%) 1.41s (± 0.60%) +0.10s (+ 7.71%) 1.40s 1.43s
Bind Time 0.71s (± 1.25%) 1.90s (± 2.00%) +1.19s (+168.03%) 1.84s 2.00s
Check Time 4.54s (± 0.49%) 4.63s (± 0.62%) +0.09s (+ 1.96%) 4.58s 4.70s
Emit Time 2.99s (± 0.68%) 2.99s (± 0.61%) -0.00s (- 0.13%) 2.95s 3.03s
Total Time 9.55s (± 0.55%) 10.92s (± 0.40%) +1.38s (+14.40%) 10.85s 11.00s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-166-generic
Architecturex64
Available Memory16 GB
Available Memory5 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
Benchmark Name Iterations
Current 36248 10
Baseline master 10

@weswigham
Copy link
Member Author

Well, +130% is still horrible, but nowhere near as bad. Guess I'm really going to have to write trampolines the hard way, like I did in the emitter :(

@weswigham
Copy link
Member Author

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jan 17, 2020

Heya @weswigham, I've started to run the perf test suite on this PR at c3046b1. You can monitor the build here. It should now contribute to this PR's status checks.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..36248

Metric master 36248 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 355,734k (± 0.01%) 358,141k (± 0.03%) +2,407k (+ 0.68%) 357,956k 358,382k
Parse Time 1.60s (± 0.37%) 1.71s (± 0.93%) +0.11s (+ 6.79%) 1.67s 1.75s
Bind Time 0.87s (± 0.66%) 0.90s (± 0.84%) +0.03s (+ 3.55%) 0.89s 0.92s
Check Time 4.58s (± 0.50%) 4.80s (± 0.66%) +0.22s (+ 4.78%) 4.71s 4.85s
Emit Time 5.25s (± 0.56%) 5.40s (± 0.73%) +0.15s (+ 2.91%) 5.33s 5.52s
Total Time 12.31s (± 0.36%) 12.82s (± 0.53%) +0.51s (+ 4.17%) 12.68s 12.99s
Monaco - node (v10.16.3, x64)
Memory used 364,273k (± 0.01%) 364,733k (± 0.02%) +459k (+ 0.13%) 364,504k 364,923k
Parse Time 1.25s (± 0.52%) 1.34s (± 0.46%) +0.09s (+ 6.95%) 1.33s 1.36s
Bind Time 0.76s (± 0.48%) 0.80s (± 0.74%) +0.04s (+ 5.24%) 0.79s 0.82s
Check Time 4.62s (± 0.38%) 4.73s (± 0.39%) +0.12s (+ 2.56%) 4.70s 4.79s
Emit Time 2.94s (± 0.68%) 2.97s (± 0.84%) +0.02s (+ 0.75%) 2.92s 3.03s
Total Time 9.58s (± 0.39%) 9.85s (± 0.35%) +0.27s (+ 2.82%) 9.77s 9.94s
TFS - node (v10.16.3, x64)
Memory used 323,439k (± 0.02%) 323,744k (± 0.01%) +305k (+ 0.09%) 323,644k 323,844k
Parse Time 0.95s (± 0.38%) 1.03s (± 0.57%) +0.09s (+ 9.30%) 1.02s 1.05s
Bind Time 0.74s (± 0.92%) 0.77s (± 0.91%) +0.03s (+ 4.48%) 0.75s 0.78s
Check Time 4.16s (± 0.55%) 4.30s (± 0.53%) +0.14s (+ 3.34%) 4.26s 4.36s
Emit Time 3.02s (± 0.96%) 3.08s (± 0.67%) +0.06s (+ 1.95%) 3.04s 3.12s
Total Time 8.87s (± 0.46%) 9.18s (± 0.50%) +0.32s (+ 3.61%) 9.10s 9.31s
Angular - node (v12.1.0, x64)
Memory used 331,474k (± 0.03%) 333,744k (± 0.05%) +2,270k (+ 0.68%) 333,138k 334,003k
Parse Time 1.56s (± 0.61%) 1.65s (± 0.54%) +0.09s (+ 5.78%) 1.63s 1.67s
Bind Time 0.85s (± 0.97%) 0.89s (± 0.86%) +0.03s (+ 3.63%) 0.87s 0.90s
Check Time 4.51s (± 0.66%) 4.67s (± 0.55%) +0.16s (+ 3.43%) 4.62s 4.73s
Emit Time 5.45s (± 0.56%) 5.55s (± 0.74%) +0.10s (+ 1.85%) 5.47s 5.69s
Total Time 12.38s (± 0.35%) 12.75s (± 0.41%) +0.37s (+ 3.01%) 12.64s 12.84s
Monaco - node (v12.1.0, x64)
Memory used 344,024k (± 0.02%) 344,587k (± 0.03%) +563k (+ 0.16%) 344,368k 344,883k
Parse Time 1.22s (± 0.64%) 1.29s (± 0.65%) +0.07s (+ 5.73%) 1.28s 1.32s
Bind Time 0.73s (± 0.67%) 0.76s (± 0.89%) +0.03s (+ 4.09%) 0.75s 0.78s
Check Time 4.47s (± 0.36%) 4.60s (± 0.44%) +0.12s (+ 2.75%) 4.55s 4.64s
Emit Time 3.00s (± 0.79%) 3.03s (± 1.00%) +0.02s (+ 0.80%) 2.99s 3.13s
Total Time 9.43s (± 0.34%) 9.68s (± 0.38%) +0.25s (+ 2.65%) 9.59s 9.76s
TFS - node (v12.1.0, x64)
Memory used 305,732k (± 0.02%) 306,073k (± 0.02%) +341k (+ 0.11%) 305,944k 306,186k
Parse Time 0.95s (± 0.50%) 1.00s (± 0.47%) +0.06s (+ 5.91%) 0.99s 1.01s
Bind Time 0.69s (± 0.80%) 0.72s (± 0.92%) +0.03s (+ 4.48%) 0.71s 0.74s
Check Time 4.12s (± 0.23%) 4.22s (± 0.55%) +0.10s (+ 2.48%) 4.17s 4.28s
Emit Time 3.10s (± 1.15%) 3.12s (± 0.72%) +0.02s (+ 0.64%) 3.06s 3.17s
Total Time 8.86s (± 0.51%) 9.06s (± 0.44%) +0.21s (+ 2.34%) 8.98s 9.13s
Angular - node (v8.9.0, x64)
Memory used 350,684k (± 0.01%) 353,182k (± 0.01%) +2,498k (+ 0.71%) 353,119k 353,245k
Parse Time 2.09s (± 0.47%) 2.26s (± 0.37%) +0.17s (+ 8.22%) 2.25s 2.28s
Bind Time 0.91s (± 0.73%) 0.96s (± 0.73%) +0.05s (+ 5.26%) 0.95s 0.98s
Check Time 5.38s (± 0.63%) 5.37s (± 0.78%) -0.01s (- 0.17%) 5.26s 5.43s
Emit Time 6.27s (± 0.96%) 6.32s (± 0.94%) +0.05s (+ 0.80%) 6.23s 6.50s
Total Time 14.66s (± 0.61%) 14.92s (± 0.62%) +0.26s (+ 1.79%) 14.74s 15.16s
Monaco - node (v8.9.0, x64)
Memory used 362,452k (± 0.02%) 363,010k (± 0.01%) +558k (+ 0.15%) 362,907k 363,159k
Parse Time 1.57s (± 0.49%) 1.68s (± 0.36%) +0.11s (+ 6.76%) 1.66s 1.69s
Bind Time 0.96s (± 1.15%) 0.98s (± 0.82%) +0.02s (+ 2.19%) 0.96s 0.99s
Check Time 5.28s (± 1.23%) 4.99s (± 0.37%) -0.28s (- 5.40%) 4.95s 5.04s
Emit Time 3.43s (± 3.12%) 3.29s (± 0.79%) -0.14s (- 4.19%) 3.24s 3.36s
Total Time 11.24s (± 0.71%) 10.94s (± 0.38%) -0.30s (- 2.68%) 10.86s 11.08s
TFS - node (v8.9.0, x64)
Memory used 322,674k (± 0.01%) 323,165k (± 0.01%) +490k (+ 0.15%) 323,074k 323,220k
Parse Time 1.27s (± 0.54%) 1.34s (± 0.74%) +0.07s (+ 5.85%) 1.32s 1.37s
Bind Time 0.75s (± 0.91%) 0.93s (± 3.97%) +0.17s (+22.78%) 0.78s 0.96s
Check Time 4.79s (± 0.47%) 4.69s (± 0.99%) -0.11s (- 2.21%) 4.59s 4.82s
Emit Time 3.22s (± 0.50%) 3.15s (± 0.87%) -0.07s (- 2.33%) 3.08s 3.20s
Total Time 10.04s (± 0.37%) 10.10s (± 0.59%) +0.06s (+ 0.61%) 9.94s 10.18s
Angular - node (v8.9.0, x86)
Memory used 199,273k (± 0.02%) 200,642k (± 0.03%) +1,370k (+ 0.69%) 200,505k 200,733k
Parse Time 2.01s (± 0.64%) 2.24s (± 0.91%) +0.22s (+11.18%) 2.18s 2.27s
Bind Time 1.03s (± 0.35%) 1.04s (± 1.01%) +0.01s (+ 1.36%) 1.02s 1.07s
Check Time 4.89s (± 0.60%) 4.88s (± 0.38%) -0.00s (- 0.08%) 4.85s 4.93s
Emit Time 6.10s (± 1.93%) 6.05s (± 1.98%) -0.05s (- 0.90%) 5.83s 6.38s
Total Time 14.03s (± 0.97%) 14.21s (± 0.86%) +0.18s (+ 1.29%) 13.98s 14.52s
Monaco - node (v8.9.0, x86)
Memory used 203,369k (± 0.02%) 203,686k (± 0.02%) +317k (+ 0.16%) 203,617k 203,752k
Parse Time 1.60s (± 0.35%) 1.74s (± 0.59%) +0.14s (+ 8.82%) 1.72s 1.77s
Bind Time 0.76s (± 1.35%) 0.80s (± 0.62%) +0.04s (+ 4.87%) 0.79s 0.81s
Check Time 5.08s (± 1.78%) 4.99s (± 0.68%) -0.09s (- 1.77%) 4.91s 5.05s
Emit Time 3.21s (± 2.34%) 3.17s (± 1.25%) -0.04s (- 1.34%) 3.09s 3.29s
Total Time 10.65s (± 0.33%) 10.69s (± 0.49%) +0.05s (+ 0.44%) 10.60s 10.79s
TFS - node (v8.9.0, x86)
Memory used 182,089k (± 0.02%) 182,381k (± 0.02%) +292k (+ 0.16%) 182,323k 182,480k
Parse Time 1.30s (± 0.96%) 1.41s (± 0.78%) +0.11s (+ 8.31%) 1.39s 1.44s
Bind Time 0.71s (± 1.60%) 0.76s (± 0.79%) +0.04s (+ 6.18%) 0.74s 0.77s
Check Time 4.52s (± 0.78%) 4.63s (± 0.47%) +0.11s (+ 2.48%) 4.56s 4.66s
Emit Time 2.99s (± 0.76%) 3.03s (± 1.92%) +0.04s (+ 1.37%) 2.95s 3.21s
Total Time 9.52s (± 0.55%) 9.82s (± 0.64%) +0.30s (+ 3.19%) 9.69s 9.98s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-166-generic
Architecturex64
Available Memory16 GB
Available Memory5 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
Benchmark Name Iterations
Current 36248 10
Baseline master 10

@weswigham
Copy link
Member Author

There we go, much more reasonable numbers - variations between -2% to +5% on very small numbers. Much better. @rbuckton do you have opinions on this PR in this state?

@weswigham
Copy link
Member Author

@typescript-bot perf test this again - now with less (unused) code in the parser (which maybe accounts for the parser time changes).

@microsoft microsoft deleted a comment from typescript-bot Jan 18, 2020
@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..36248

Metric master 36248 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 355,734k (± 0.01%) 357,513k (± 0.02%) +1,779k (+ 0.50%) 357,402k 357,746k
Parse Time 1.60s (± 0.37%) 1.63s (± 0.52%) +0.02s (+ 1.50%) 1.61s 1.65s
Bind Time 0.87s (± 0.66%) 0.89s (± 0.99%) +0.02s (+ 1.95%) 0.86s 0.90s
Check Time 4.58s (± 0.50%) 4.58s (± 0.43%) +0.00s (+ 0.04%) 4.54s 4.63s
Emit Time 5.25s (± 0.56%) 5.19s (± 0.85%) -0.06s (- 1.10%) 5.11s 5.28s
Total Time 12.31s (± 0.36%) 12.29s (± 0.50%) -0.02s (- 0.15%) 12.17s 12.41s
Monaco - node (v10.16.3, x64)
Memory used 364,273k (± 0.01%) 364,325k (± 0.01%) +52k (+ 0.01%) 364,258k 364,447k
Parse Time 1.25s (± 0.52%) 1.26s (± 0.81%) +0.01s (+ 0.56%) 1.24s 1.29s
Bind Time 0.76s (± 0.48%) 0.78s (± 0.57%) +0.01s (+ 1.83%) 0.77s 0.79s
Check Time 4.62s (± 0.38%) 4.61s (± 0.56%) -0.01s (- 0.22%) 4.56s 4.67s
Emit Time 2.94s (± 0.68%) 2.90s (± 0.76%) -0.04s (- 1.36%) 2.86s 2.98s
Total Time 9.58s (± 0.39%) 9.54s (± 0.43%) -0.03s (- 0.34%) 9.47s 9.64s
TFS - node (v10.16.3, x64)
Memory used 323,439k (± 0.02%) 323,520k (± 0.01%) +81k (+ 0.03%) 323,428k 323,630k
Parse Time 0.95s (± 0.38%) 0.95s (± 0.70%) +0.01s (+ 0.74%) 0.94s 0.97s
Bind Time 0.74s (± 0.92%) 0.74s (± 1.33%) +0.01s (+ 0.82%) 0.71s 0.76s
Check Time 4.16s (± 0.55%) 4.19s (± 0.41%) +0.03s (+ 0.67%) 4.15s 4.22s
Emit Time 3.02s (± 0.96%) 3.03s (± 1.14%) +0.00s (+ 0.10%) 2.95s 3.09s
Total Time 8.87s (± 0.46%) 8.91s (± 0.51%) +0.04s (+ 0.46%) 8.78s 9.00s
Angular - node (v12.1.0, x64)
Memory used 331,474k (± 0.03%) 333,083k (± 0.08%) +1,609k (+ 0.49%) 332,018k 333,285k
Parse Time 1.56s (± 0.61%) 1.58s (± 0.60%) +0.02s (+ 1.35%) 1.55s 1.60s
Bind Time 0.85s (± 0.97%) 0.87s (± 0.66%) +0.02s (+ 2.22%) 0.86s 0.89s
Check Time 4.51s (± 0.66%) 4.53s (± 0.43%) +0.01s (+ 0.33%) 4.50s 4.58s
Emit Time 5.45s (± 0.56%) 5.44s (± 0.55%) -0.00s (- 0.09%) 5.39s 5.51s
Total Time 12.38s (± 0.35%) 12.43s (± 0.35%) +0.05s (+ 0.41%) 12.34s 12.53s
Monaco - node (v12.1.0, x64)
Memory used 344,024k (± 0.02%) 344,036k (± 0.01%) +12k (+ 0.00%) 343,976k 344,144k
Parse Time 1.22s (± 0.64%) 1.22s (± 0.79%) -0.00s (- 0.16%) 1.20s 1.24s
Bind Time 0.73s (± 0.67%) 0.74s (± 1.10%) +0.01s (+ 1.23%) 0.73s 0.77s
Check Time 4.47s (± 0.36%) 4.46s (± 0.40%) -0.01s (- 0.18%) 4.42s 4.50s
Emit Time 3.00s (± 0.79%) 2.96s (± 1.09%) -0.05s (- 1.53%) 2.89s 3.02s
Total Time 9.43s (± 0.34%) 9.39s (± 0.49%) -0.04s (- 0.48%) 9.32s 9.50s
TFS - node (v12.1.0, x64)
Memory used 305,732k (± 0.02%) 305,847k (± 0.03%) +115k (+ 0.04%) 305,725k 306,099k
Parse Time 0.95s (± 0.50%) 0.94s (± 0.87%) -0.01s (- 0.74%) 0.92s 0.96s
Bind Time 0.69s (± 0.80%) 0.70s (± 0.67%) +0.01s (+ 1.16%) 0.69s 0.71s
Check Time 4.12s (± 0.23%) 4.12s (± 0.67%) +0.01s (+ 0.19%) 4.04s 4.17s
Emit Time 3.10s (± 1.15%) 3.08s (± 0.74%) -0.02s (- 0.68%) 3.03s 3.13s
Total Time 8.86s (± 0.51%) 8.84s (± 0.39%) -0.01s (- 0.14%) 8.76s 8.93s
Angular - node (v8.9.0, x64)
Memory used 350,684k (± 0.01%) 352,442k (± 0.02%) +1,758k (+ 0.50%) 352,300k 352,570k
Parse Time 2.09s (± 0.47%) 2.12s (± 0.52%) +0.03s (+ 1.20%) 2.10s 2.15s
Bind Time 0.91s (± 0.73%) 0.93s (± 1.19%) +0.02s (+ 2.30%) 0.91s 0.97s
Check Time 5.38s (± 0.63%) 5.40s (± 0.55%) +0.02s (+ 0.41%) 5.36s 5.47s
Emit Time 6.27s (± 0.96%) 6.21s (± 0.77%) -0.06s (- 0.89%) 6.15s 6.38s
Total Time 14.66s (± 0.61%) 14.67s (± 0.52%) +0.01s (+ 0.10%) 14.54s 14.91s
Monaco - node (v8.9.0, x64)
Memory used 362,452k (± 0.02%) 362,497k (± 0.02%) +45k (+ 0.01%) 362,374k 362,668k
Parse Time 1.57s (± 0.49%) 1.56s (± 0.43%) -0.01s (- 0.76%) 1.54s 1.57s
Bind Time 0.96s (± 1.15%) 0.95s (± 0.97%) -0.01s (- 0.52%) 0.93s 0.97s
Check Time 5.28s (± 1.23%) 5.30s (± 1.04%) +0.02s (+ 0.45%) 5.22s 5.49s
Emit Time 3.43s (± 3.12%) 3.36s (± 4.12%) -0.07s (- 2.10%) 2.98s 3.50s
Total Time 11.24s (± 0.71%) 11.17s (± 0.93%) -0.07s (- 0.59%) 10.88s 11.32s
TFS - node (v8.9.0, x64)
Memory used 322,674k (± 0.01%) 322,755k (± 0.01%) +81k (+ 0.03%) 322,692k 322,857k
Parse Time 1.27s (± 0.54%) 1.26s (± 0.60%) -0.00s (- 0.16%) 1.25s 1.28s
Bind Time 0.75s (± 0.91%) 0.76s (± 0.76%) +0.01s (+ 0.66%) 0.75s 0.77s
Check Time 4.79s (± 0.47%) 4.79s (± 0.66%) -0.01s (- 0.13%) 4.72s 4.87s
Emit Time 3.22s (± 0.50%) 3.20s (± 0.53%) -0.02s (- 0.74%) 3.16s 3.24s
Total Time 10.04s (± 0.37%) 10.01s (± 0.47%) -0.03s (- 0.26%) 9.90s 10.09s
Angular - node (v8.9.0, x86)
Memory used 199,273k (± 0.02%) 200,212k (± 0.03%) +939k (+ 0.47%) 200,119k 200,384k
Parse Time 2.01s (± 0.64%) 2.05s (± 0.67%) +0.03s (+ 1.64%) 2.01s 2.08s
Bind Time 1.03s (± 0.35%) 1.03s (± 0.80%) +0.01s (+ 0.78%) 1.02s 1.05s
Check Time 4.89s (± 0.60%) 4.84s (± 0.75%) -0.04s (- 0.92%) 4.78s 4.91s
Emit Time 6.10s (± 1.93%) 6.04s (± 1.63%) -0.06s (- 1.05%) 5.94s 6.42s
Total Time 14.03s (± 0.97%) 13.96s (± 0.74%) -0.07s (- 0.49%) 13.76s 14.32s
Monaco - node (v8.9.0, x86)
Memory used 203,369k (± 0.02%) 203,450k (± 0.01%) +81k (+ 0.04%) 203,383k 203,483k
Parse Time 1.60s (± 0.35%) 1.61s (± 0.65%) +0.01s (+ 0.63%) 1.59s 1.63s
Bind Time 0.76s (± 1.35%) 0.77s (± 0.61%) +0.01s (+ 1.45%) 0.76s 0.78s
Check Time 5.08s (± 1.78%) 5.07s (± 0.65%) -0.01s (- 0.16%) 5.00s 5.17s
Emit Time 3.21s (± 2.34%) 3.21s (± 0.60%) -0.00s (- 0.06%) 3.17s 3.26s
Total Time 10.65s (± 0.33%) 10.66s (± 0.37%) +0.01s (+ 0.12%) 10.56s 10.74s
TFS - node (v8.9.0, x86)
Memory used 182,089k (± 0.02%) 182,153k (± 0.02%) +65k (+ 0.04%) 182,072k 182,248k
Parse Time 1.30s (± 0.96%) 1.31s (± 1.03%) +0.01s (+ 0.85%) 1.28s 1.34s
Bind Time 0.71s (± 1.60%) 0.71s (± 0.84%) +0.00s (+ 0.42%) 0.70s 0.73s
Check Time 4.52s (± 0.78%) 4.54s (± 0.41%) +0.03s (+ 0.60%) 4.49s 4.57s
Emit Time 2.99s (± 0.76%) 2.96s (± 1.17%) -0.02s (- 0.74%) 2.91s 3.08s
Total Time 9.52s (± 0.55%) 9.53s (± 0.45%) +0.02s (+ 0.18%) 9.44s 9.62s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-166-generic
Architecturex64
Available Memory16 GB
Available Memory5 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
Benchmark Name Iterations
Current 36248 10
Baseline master 10

@weswigham
Copy link
Member Author

@typescript-bot perf test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jan 21, 2020

Heya @weswigham, I've started to run the perf test suite on this PR at 3295016. You can monitor the build here. It should now contribute to this PR's status checks.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..36248

Metric master 36248 Delta Best Worst
Angular - node (v10.16.3, x64)
Memory used 355,772k (± 0.02%) 357,541k (± 0.02%) +1,769k (+ 0.50%) 357,393k 357,663k
Parse Time 1.60s (± 0.40%) 1.61s (± 0.51%) +0.01s (+ 0.50%) 1.59s 1.63s
Bind Time 0.87s (± 0.75%) 0.88s (± 0.88%) +0.01s (+ 1.50%) 0.87s 0.90s
Check Time 4.57s (± 0.39%) 4.59s (± 0.72%) +0.01s (+ 0.31%) 4.53s 4.67s
Emit Time 5.26s (± 0.70%) 5.19s (± 0.70%) -0.07s (- 1.39%) 5.10s 5.27s
Total Time 12.31s (± 0.36%) 12.27s (± 0.52%) -0.04s (- 0.34%) 12.13s 12.46s
Monaco - node (v10.16.3, x64)
Memory used 364,218k (± 0.02%) 364,323k (± 0.02%) +105k (+ 0.03%) 364,154k 364,458k
Parse Time 1.25s (± 0.60%) 1.25s (± 0.58%) -0.00s (- 0.08%) 1.24s 1.27s
Bind Time 0.77s (± 0.64%) 0.77s (± 0.58%) +0.01s (+ 0.78%) 0.76s 0.78s
Check Time 4.59s (± 0.38%) 4.62s (± 0.34%) +0.03s (+ 0.54%) 4.58s 4.65s
Emit Time 2.93s (± 0.67%) 2.88s (± 0.69%) -0.05s (- 1.64%) 2.84s 2.93s
Total Time 9.54s (± 0.32%) 9.52s (± 0.30%) -0.02s (- 0.17%) 9.46s 9.58s
TFS - node (v10.16.3, x64)
Memory used 323,443k (± 0.01%) 323,606k (± 0.02%) +163k (+ 0.05%) 323,531k 323,724k
Parse Time 0.94s (± 0.39%) 0.95s (± 0.42%) +0.00s (+ 0.53%) 0.94s 0.96s
Bind Time 0.72s (± 1.58%) 0.73s (± 1.75%) +0.01s (+ 1.39%) 0.71s 0.76s
Check Time 4.15s (± 0.59%) 4.18s (± 0.57%) +0.03s (+ 0.75%) 4.14s 4.24s
Emit Time 3.04s (± 0.84%) 3.02s (± 0.98%) -0.02s (- 0.76%) 2.95s 3.07s
Total Time 8.86s (± 0.54%) 8.89s (± 0.38%) +0.02s (+ 0.27%) 8.82s 8.96s
Angular - node (v12.1.0, x64)
Memory used 331,452k (± 0.01%) 333,164k (± 0.03%) +1,712k (+ 0.52%) 332,889k 333,346k
Parse Time 1.56s (± 0.60%) 1.56s (± 0.58%) -0.00s (- 0.06%) 1.54s 1.58s
Bind Time 0.85s (± 0.43%) 0.87s (± 0.34%) +0.02s (+ 2.11%) 0.87s 0.88s
Check Time 4.50s (± 0.56%) 4.51s (± 0.65%) +0.01s (+ 0.27%) 4.44s 4.58s
Emit Time 5.45s (± 0.68%) 5.40s (± 0.42%) -0.05s (- 1.01%) 5.35s 5.47s
Total Time 12.36s (± 0.41%) 12.34s (± 0.34%) -0.03s (- 0.22%) 12.26s 12.44s
Monaco - node (v12.1.0, x64)
Memory used 344,027k (± 0.01%) 344,132k (± 0.01%) +105k (+ 0.03%) 344,071k 344,258k
Parse Time 1.21s (± 0.67%) 1.21s (± 0.64%) -0.00s (- 0.16%) 1.19s 1.23s
Bind Time 0.73s (± 0.99%) 0.75s (± 0.53%) +0.02s (+ 2.60%) 0.74s 0.76s
Check Time 4.49s (± 0.56%) 4.47s (± 0.69%) -0.02s (- 0.40%) 4.40s 4.53s
Emit Time 3.02s (± 0.54%) 2.94s (± 0.76%) -0.08s (- 2.59%) 2.90s 2.99s
Total Time 9.45s (± 0.45%) 9.37s (± 0.50%) -0.08s (- 0.86%) 9.28s 9.47s
TFS - node (v12.1.0, x64)
Memory used 305,774k (± 0.02%) 305,814k (± 0.02%) +40k (+ 0.01%) 305,654k 305,925k
Parse Time 0.93s (± 0.60%) 0.94s (± 0.51%) +0.01s (+ 0.54%) 0.93s 0.95s
Bind Time 0.69s (± 0.58%) 0.70s (± 0.57%) +0.01s (+ 1.16%) 0.69s 0.71s
Check Time 4.10s (± 0.48%) 4.12s (± 0.56%) +0.01s (+ 0.34%) 4.07s 4.16s
Emit Time 3.10s (± 0.90%) 3.08s (± 0.84%) -0.03s (- 0.93%) 3.02s 3.15s
Total Time 8.83s (± 0.40%) 8.82s (± 0.45%) -0.01s (- 0.07%) 8.76s 8.92s
Angular - node (v8.9.0, x64)
Memory used 350,725k (± 0.02%) 352,517k (± 0.02%) +1,792k (+ 0.51%) 352,303k 352,613k
Parse Time 2.09s (± 0.37%) 2.10s (± 0.47%) +0.01s (+ 0.33%) 2.08s 2.12s
Bind Time 0.91s (± 0.77%) 0.93s (± 1.28%) +0.02s (+ 1.87%) 0.90s 0.95s
Check Time 5.40s (± 0.69%) 5.35s (± 0.82%) -0.06s (- 1.04%) 5.29s 5.46s
Emit Time 6.25s (± 1.08%) 6.20s (± 0.65%) -0.05s (- 0.85%) 6.13s 6.33s
Total Time 14.65s (± 0.60%) 14.57s (± 0.60%) -0.08s (- 0.57%) 14.44s 14.85s
Monaco - node (v8.9.0, x64)
Memory used 362,495k (± 0.01%) 362,602k (± 0.01%) +107k (+ 0.03%) 362,447k 362,708k
Parse Time 1.55s (± 0.43%) 1.56s (± 0.37%) +0.01s (+ 0.45%) 1.55s 1.57s
Bind Time 0.95s (± 0.70%) 0.95s (± 0.61%) -0.00s (- 0.31%) 0.94s 0.96s
Check Time 5.25s (± 0.98%) 5.29s (± 1.45%) +0.04s (+ 0.82%) 5.19s 5.53s
Emit Time 3.44s (± 3.06%) 3.36s (± 3.62%) -0.08s (- 2.44%) 3.01s 3.45s
Total Time 11.19s (± 0.72%) 11.15s (± 0.60%) -0.04s (- 0.32%) 10.94s 11.26s
TFS - node (v8.9.0, x64)
Memory used 322,695k (± 0.01%) 322,853k (± 0.01%) +159k (+ 0.05%) 322,749k 322,960k
Parse Time 1.26s (± 0.53%) 1.26s (± 0.49%) +0.00s (+ 0.16%) 1.25s 1.28s
Bind Time 0.75s (± 0.78%) 0.75s (± 1.08%) +0.01s (+ 0.80%) 0.73s 0.77s
Check Time 4.75s (± 0.64%) 4.77s (± 0.55%) +0.02s (+ 0.34%) 4.70s 4.82s
Emit Time 3.21s (± 0.86%) 3.19s (± 0.80%) -0.01s (- 0.34%) 3.12s 3.24s
Total Time 9.96s (± 0.52%) 9.97s (± 0.44%) +0.01s (+ 0.14%) 9.88s 10.04s
Angular - node (v8.9.0, x86)
Memory used 199,330k (± 0.03%) 200,311k (± 0.03%) +982k (+ 0.49%) 200,198k 200,450k
Parse Time 2.02s (± 0.97%) 2.04s (± 0.85%) +0.02s (+ 0.94%) 2.01s 2.09s
Bind Time 1.02s (± 0.93%) 1.05s (± 0.45%) +0.02s (+ 2.15%) 1.04s 1.06s
Check Time 4.87s (± 0.49%) 4.84s (± 0.52%) -0.02s (- 0.47%) 4.79s 4.91s
Emit Time 6.00s (± 0.72%) 6.06s (± 2.04%) +0.06s (+ 1.03%) 5.88s 6.37s
Total Time 13.91s (± 0.43%) 14.00s (± 1.05%) +0.09s (+ 0.63%) 13.79s 14.42s
Monaco - node (v8.9.0, x86)
Memory used 203,444k (± 0.01%) 203,523k (± 0.02%) +80k (+ 0.04%) 203,410k 203,624k
Parse Time 1.60s (± 0.69%) 1.59s (± 0.54%) -0.01s (- 0.81%) 1.58s 1.62s
Bind Time 0.75s (± 0.59%) 0.77s (± 0.58%) +0.02s (+ 2.13%) 0.76s 0.78s
Check Time 5.05s (± 1.16%) 5.09s (± 1.06%) +0.04s (+ 0.79%) 5.00s 5.27s
Emit Time 3.25s (± 1.44%) 3.17s (± 1.42%) -0.07s (- 2.25%) 3.04s 3.24s
Total Time 10.66s (± 0.40%) 10.63s (± 0.37%) -0.03s (- 0.30%) 10.55s 10.73s
TFS - node (v8.9.0, x86)
Memory used 182,085k (± 0.01%) 182,201k (± 0.02%) +116k (+ 0.06%) 182,149k 182,309k
Parse Time 1.32s (± 3.07%) 1.30s (± 0.77%) -0.02s (- 1.81%) 1.28s 1.32s
Bind Time 0.70s (± 0.85%) 0.71s (± 0.91%) +0.00s (+ 0.43%) 0.70s 0.72s
Check Time 4.51s (± 0.86%) 4.53s (± 0.70%) +0.02s (+ 0.49%) 4.45s 4.58s
Emit Time 2.94s (± 1.24%) 2.94s (± 0.60%) +0.00s (+ 0.07%) 2.92s 2.99s
Total Time 9.47s (± 0.62%) 9.48s (± 0.43%) +0.01s (+ 0.11%) 9.40s 9.58s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-166-generic
Architecturex64
Available Memory16 GB
Available Memory5 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v10.16.3, x64)
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
Scenarios
  • Angular - node (v10.16.3, x64)
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Monaco - node (v10.16.3, x64)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • TFS - node (v10.16.3, x64)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
Benchmark Name Iterations
Current 36248 10
Baseline master 10

@weswigham
Copy link
Member Author

@rbuckton perf looks good and your changes are in - anything else to add?

@weswigham weswigham requested a review from rbuckton January 22, 2020 20:38
@weswigham
Copy link
Member Author

@rbuckton added the check back in (and fixed the comments)

@weswigham weswigham merged commit 08e6bc2 into microsoft:master Jan 25, 2020
@weswigham weswigham deleted the trampolines-for-large-binary-expressions branch January 25, 2020 00:30
@minestarks
Copy link
Member

Using 3.8.0-dev.20200208, I'm still getting a stack overflow for the large binary expression in https://github.com/openlayers/ol2/blob/master/tests/speed/wmscaps.js . Was this change not supposed to address that?

    Maximum call stack size exceeded

    RangeError: Maximum call stack size exceeded
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98711:30)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)
        at visitNode (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18318:24)
        at Object.forEachChild (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:18538:24)
        at walk (e:\temp\ol2\node_modules\typescript\lib\tsserver.js:98794:24)

@weswigham
Copy link
Member Author

weswigham commented Feb 10, 2020

It only fully removes the crash (there are many phases which could crash) with the caveats that either noEmit: true is set or removeComments: true is set, due to some limitations in our API layering for emit. It's also possible there's another transform that's enabled that also hasn't been patched with a trampoline? (Afaik, I just targeted es3 with the unittest)

@minestarks
Copy link
Member

@weswigham hmmmmmm

E:\temp\ol2>node_modules\.bin\tsc.cmd -v
Version 3.8.0-dev.20200208

E:\temp\ol2>node_modules\.bin\tsc.cmd --allowJs --noEmit tests\speed\wmscaps.js
E:\temp\ol2\node_modules\typescript\lib\tsc.js:81132
                throw e;
                ^

RangeError: Maximum call stack size exceeded
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14658:23)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14865:24)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14659:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14865:24)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14659:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14865:24)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14659:24)

@minestarks
Copy link
Member

minestarks commented Feb 10, 2020

Here's a modified repro so node prints out the full stack:

>node --stack-trace-limit=1000 --stack-size=100  node_modules\typescript\bin\tsc   --allowJs --noEmit tests\speed\wmscaps.js

E:\temp\ol2\node_modules\typescript\lib\tsc.js:81132
                throw e;
                ^

RangeError: Maximum call stack size exceeded
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81199:30)
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14659:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14865:24)

... yada yada yada ...

    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at walkArray (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81335:25)
    at visitNodes (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14664:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14894:24)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at visitNode (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14659:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14892:21)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at walkArray (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81335:25)
    at visitNodes (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14664:24)
    at Object.forEachChild (E:\temp\ol2\node_modules\typescript\lib\tsc.js:14887:24)
    at walk (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81278:24)
    at E:\temp\ol2\node_modules\typescript\lib\tsc.js:81197:17
    at runWithCancellationToken (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81125:24)
    at getJSSyntacticDiagnosticsForFile (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81194:20)
    at getSyntacticDiagnosticsForFile (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81117:65)
    at E:\temp\ol2\node_modules\typescript\lib\tsc.js:81073:24
    at Object.flatMap (E:\temp\ol2\node_modules\typescript\lib\tsc.js:388:25)
    at getDiagnosticsHelper (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81069:56)
    at Object.getSyntacticDiagnostics (E:\temp\ol2\node_modules\typescript\lib\tsc.js:81077:20)
    at emitFilesAndReportErrors (E:\temp\ol2\node_modules\typescript\lib\tsc.js:84730:45)
    at Object.emitFilesAndReportErrorsAndGetExitStatus (E:\temp\ol2\node_modules\typescript\lib\tsc.js:84765:18)
    at performCompilation (E:\temp\ol2\node_modules\typescript\lib\tsc.js:87119:29)
    at executeCommandLineWorker (E:\temp\ol2\node_modules\typescript\lib\tsc.js:87022:17)
    at Object.executeCommandLine (E:\temp\ol2\node_modules\typescript\lib\tsc.js:87049:20)
    at Object.<anonymous> (E:\temp\ol2\node_modules\typescript\lib\tsc.js:87283:4)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (E:\temp\ol2\node_modules\typescript\bin\tsc:2:1)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
    at startup (internal/bootstrap/node.js:282:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)

@minestarks
Copy link
Member

@weswigham argh, only repros for JS files because of getJSSyntacticDiagnosticsForFile 🤦‍♀

@weswigham
Copy link
Member Author

welp, that's a new callstack to me, XD

The walk function in getJSSyntacticDiagnosticsForFile needs to be rewritten to be a loop, rather than recursive calls~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Stack overflow in bindBinaryExpressionFlow
4 participants