Skip to content
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

Monomorphic Symbol access #51880

Merged
merged 1 commit into from
Dec 15, 2022
Merged

Monomorphic Symbol access #51880

merged 1 commit into from
Dec 15, 2022

Conversation

rbuckton
Copy link
Member

@rbuckton rbuckton commented Dec 13, 2022

In the same vein as #51682, this makes Symbol/TransientSymbol/MappedSymbol/ReverseMappedSymbol stable so that all symbol property access becomes monomorphic.

The main change is that rather than having all of the SymbolLinks properties directly on TransientSymbol, instead they are attached to a links internal property that is unconditionally set on every Symbol to ensure the map remains stable.

@typescript-bot typescript-bot added Author: Team For Uncommitted Bug PR for untriaged, rejected, closed or missing bug labels Dec 13, 2022
@rbuckton
Copy link
Member Author

Need to wait on the benchmark CI to catch up to #51682 before I schedule a perf test run.

@rbuckton
Copy link
Member Author

@typescript-bot perf test

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 13, 2022

Heya @rbuckton, I've started to run the perf test suite on this PR at 4d64583. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

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

Here they are:

Compiler

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
Angular - node (v18.10.0, x64)
Memory used 364,508k (± 0.01%) 374,366k (± 0.02%) +9,858k (+ 2.70%) 374,165k 374,480k
Parse Time 1.58s (± 0.71%) 1.58s (± 0.88%) -0.01s (- 0.38%) 1.55s 1.61s
Bind Time 0.55s (± 1.01%) 0.54s (± 0.68%) -0.01s (- 2.19%) 0.53s 0.54s
Check Time 3.89s (± 0.83%) 3.73s (± 0.79%) 🟩-0.16s (- 4.06%) 3.68s 3.80s
Emit Time 3.93s (± 0.90%) 3.85s (± 0.95%) -0.08s (- 1.96%) 3.78s 3.95s
Total Time 9.95s (± 0.55%) 9.69s (± 0.47%) -0.26s (- 2.59%) 9.58s 9.79s
Compiler-Unions - node (v18.10.0, x64)
Memory used 197,917k (± 0.86%) 204,620k (± 0.83%) +6,703k (+ 3.39%) 200,035k 205,827k
Parse Time 0.62s (± 0.80%) 0.63s (± 0.71%) +0.01s (+ 1.95%) 0.62s 0.64s
Bind Time 0.35s (± 1.27%) 0.35s (± 1.27%) 0.00s ( 0.00%) 0.34s 0.36s
Check Time 4.92s (± 0.65%) 4.83s (± 1.13%) -0.09s (- 1.75%) 4.68s 4.93s
Emit Time 1.44s (± 0.77%) 1.44s (± 0.94%) -0.01s (- 0.42%) 1.42s 1.49s
Total Time 7.33s (± 0.57%) 7.25s (± 0.88%) -0.08s (- 1.08%) 7.09s 7.41s
Monaco - node (v18.10.0, x64)
Memory used 347,203k (± 0.01%) 356,305k (± 0.01%) +9,102k (+ 2.62%) 356,177k 356,430k
Parse Time 1.18s (± 0.95%) 1.19s (± 0.59%) +0.01s (+ 1.02%) 1.18s 1.21s
Bind Time 0.51s (± 1.14%) 0.50s (± 1.38%) -0.01s (- 2.37%) 0.49s 0.52s
Check Time 3.65s (± 0.39%) 3.52s (± 0.77%) 🟩-0.13s (- 3.54%) 3.45s 3.58s
Emit Time 2.05s (± 1.00%) 2.06s (± 1.20%) +0.01s (+ 0.63%) 2.02s 2.11s
Total Time 7.38s (± 0.43%) 7.27s (± 0.53%) -0.11s (- 1.54%) 7.16s 7.33s
TFS - node (v18.10.0, x64)
Memory used 306,099k (± 0.24%) 313,649k (± 0.26%) +7,550k (+ 2.47%) 312,411k 314,807k
Parse Time 0.95s (± 1.31%) 0.95s (± 1.05%) -0.00s (- 0.42%) 0.93s 0.97s
Bind Time 0.53s (± 7.71%) 0.57s (± 2.36%) +0.04s (+ 8.56%) 0.52s 0.59s
Check Time 3.37s (± 0.62%) 3.21s (± 0.63%) 🟩-0.17s (- 4.92%) 3.16s 3.24s
Emit Time 2.03s (± 1.24%) 2.02s (± 1.31%) -0.01s (- 0.25%) 1.97s 2.08s
Total Time 6.88s (± 0.67%) 6.75s (± 0.59%) -0.13s (- 1.93%) 6.67s 6.84s
material-ui - node (v18.10.0, x64)
Memory used 451,613k (± 0.01%) 0k 🟩-451,613k (-100.00%) 0k 0k
Parse Time 1.34s (± 0.62%) 0.00s 🟩-1.34s (-100.00%) 0.00s 0.00s
Bind Time 0.44s (± 1.71%) 0.00s 🟩-0.44s (-100.00%) 0.00s 0.00s
Check Time 10.28s (± 0.65%) 0.00s 🟩-10.28s (-100.00%) 0.00s 0.00s
Emit Time 0.00s (± 0.00%) 0.00s 0.00s ( NaN%) 0.00s 0.00s
Total Time 12.06s (± 0.55%) 0.00s 🟩-12.06s (-100.00%) 0.00s 0.00s
xstate - node (v18.10.0, x64)
Memory used 553,460k (± 0.01%) 569,687k (± 0.01%) +16,228k (+ 2.93%) 569,561k 569,802k
Parse Time 1.91s (± 0.50%) 1.92s (± 0.49%) +0.01s (+ 0.31%) 1.90s 1.95s
Bind Time 0.73s (± 3.09%) 0.70s (± 2.68%) 🟩-0.03s (- 4.38%) 0.66s 0.73s
Check Time 1.03s (± 1.17%) 1.00s (± 0.89%) -0.02s (- 2.24%) 0.98s 1.02s
Emit Time 0.05s (± 0.00%) 0.05s (± 0.00%) 0.00s ( 0.00%) 0.05s 0.05s
Total Time 3.72s (± 0.78%) 3.68s (± 0.53%) -0.05s (- 1.32%) 3.63s 3.72s
Angular - node (v16.17.1, x64)
Memory used 363,840k (± 0.02%) 373,729k (± 0.02%) +9,889k (+ 2.72%) 373,584k 373,847k
Parse Time 1.92s (± 0.53%) 1.92s (± 0.79%) +0.00s (+ 0.05%) 1.89s 1.95s
Bind Time 0.67s (± 1.03%) 0.64s (± 0.92%) 🟩-0.02s (- 3.16%) 0.63s 0.66s
Check Time 5.03s (± 0.50%) 4.82s (± 0.41%) 🟩-0.21s (- 4.20%) 4.79s 4.87s
Emit Time 4.69s (± 1.03%) 4.60s (± 0.88%) -0.09s (- 1.84%) 4.52s 4.68s
Total Time 12.30s (± 0.42%) 11.98s (± 0.45%) -0.32s (- 2.59%) 11.86s 12.10s
Compiler-Unions - node (v16.17.1, x64)
Memory used 199,821k (± 0.61%) 202,768k (± 0.58%) +2,948k (+ 1.48%) 201,637k 205,351k
Parse Time 0.80s (± 0.63%) 0.80s (± 1.03%) +0.01s (+ 1.26%) 0.79s 0.83s
Bind Time 0.44s (± 1.31%) 0.44s (± 0.75%) -0.00s (- 0.68%) 0.43s 0.45s
Check Time 5.91s (± 0.46%) 5.65s (± 0.61%) 🟩-0.25s (- 4.32%) 5.57s 5.73s
Emit Time 1.82s (± 1.65%) 1.78s (± 1.14%) -0.04s (- 2.03%) 1.73s 1.83s
Total Time 8.97s (± 0.46%) 8.68s (± 0.39%) 🟩-0.29s (- 3.20%) 8.58s 8.74s
Monaco - node (v16.17.1, x64)
Memory used 346,501k (± 0.02%) 355,634k (± 0.01%) +9,133k (+ 2.64%) 355,576k 355,797k
Parse Time 1.43s (± 0.74%) 1.43s (± 0.58%) +0.01s (+ 0.56%) 1.42s 1.45s
Bind Time 0.61s (± 1.06%) 0.60s (± 0.87%) -0.01s (- 1.80%) 0.59s 0.61s
Check Time 4.64s (± 0.46%) 4.41s (± 0.39%) 🟩-0.23s (- 4.98%) 4.35s 4.44s
Emit Time 2.48s (± 0.78%) 2.48s (± 0.85%) -0.00s (- 0.04%) 2.45s 2.53s
Total Time 9.16s (± 0.51%) 8.92s (± 0.41%) -0.23s (- 2.57%) 8.85s 9.01s
TFS - node (v16.17.1, x64)
Memory used 304,144k (± 0.02%) 312,055k (± 0.03%) +7,911k (+ 2.60%) 311,983k 312,366k
Parse Time 1.20s (± 1.83%) 1.20s (± 1.62%) +0.01s (+ 0.42%) 1.17s 1.25s
Bind Time 0.58s (± 1.56%) 0.57s (± 1.70%) -0.01s (- 2.07%) 0.55s 0.60s
Check Time 4.34s (± 0.38%) 4.11s (± 0.39%) 🟩-0.22s (- 5.12%) 4.09s 4.15s
Emit Time 2.52s (± 1.45%) 2.48s (± 0.56%) -0.04s (- 1.71%) 2.45s 2.51s
Total Time 8.63s (± 0.57%) 8.36s (± 0.38%) 🟩-0.28s (- 3.21%) 8.29s 8.41s
material-ui - node (v16.17.1, x64)
Memory used 450,957k (± 0.01%) 0k 🟩-450,957k (-100.00%) 0k 0k
Parse Time 1.68s (± 0.77%) 0.00s 🟩-1.68s (-100.00%) 0.00s 0.00s
Bind Time 0.50s (± 0.66%) 0.00s 🟩-0.50s (-100.00%) 0.00s 0.00s
Check Time 11.72s (± 0.73%) 0.00s 🟩-11.72s (-100.00%) 0.00s 0.00s
Emit Time 0.00s (± 0.00%) 0.00s 0.00s ( NaN%) 0.00s 0.00s
Total Time 13.89s (± 0.67%) 0.00s 🟩-13.89s (-100.00%) 0.00s 0.00s
xstate - node (v16.17.1, x64)
Memory used 551,026k (± 0.01%) 567,203k (± 0.01%) +16,177k (+ 2.94%) 567,121k 567,439k
Parse Time 2.31s (± 0.35%) 2.31s (± 0.35%) 0.00s ( 0.00%) 2.29s 2.33s
Bind Time 0.82s (± 1.79%) 0.80s (± 2.04%) -0.02s (- 2.21%) 0.77s 0.84s
Check Time 1.34s (± 0.75%) 1.32s (± 0.49%) -0.02s (- 1.42%) 1.30s 1.33s
Emit Time 0.06s (± 0.00%) 0.06s (± 0.00%) 0.00s ( 0.00%) 0.06s 0.06s
Total Time 4.53s (± 0.44%) 4.49s (± 0.42%) -0.03s (- 0.75%) 4.44s 4.52s
Angular - node (v14.15.1, x64)
Memory used 357,711k (± 0.01%) 367,534k (± 0.01%) +9,822k (+ 2.75%) 367,503k 367,601k
Parse Time 2.04s (± 0.47%) 2.05s (± 0.43%) +0.01s (+ 0.54%) 2.03s 2.07s
Bind Time 0.71s (± 0.56%) 0.69s (± 0.68%) -0.02s (- 2.68%) 0.68s 0.70s
Check Time 5.34s (± 0.52%) 5.13s (± 0.53%) 🟩-0.21s (- 3.91%) 5.06s 5.21s
Emit Time 4.80s (± 1.16%) 4.72s (± 0.87%) -0.08s (- 1.71%) 4.64s 4.84s
Total Time 12.90s (± 0.59%) 12.59s (± 0.54%) -0.30s (- 2.36%) 12.44s 12.74s
Compiler-Unions - node (v14.15.1, x64)
Memory used 195,545k (± 0.63%) 199,802k (± 0.38%) +4,257k (+ 2.18%) 196,769k 200,204k
Parse Time 0.90s (± 0.25%) 0.90s (± 0.66%) +0.00s (+ 0.56%) 0.89s 0.92s
Bind Time 0.47s (± 0.63%) 0.47s (± 0.48%) -0.00s (- 0.64%) 0.46s 0.47s
Check Time 6.17s (± 0.75%) 5.91s (± 0.60%) 🟩-0.27s (- 4.36%) 5.82s 5.99s
Emit Time 1.93s (± 0.91%) 1.89s (± 0.73%) -0.04s (- 2.02%) 1.86s 1.92s
Total Time 9.47s (± 0.59%) 9.17s (± 0.37%) 🟩-0.30s (- 3.22%) 9.08s 9.24s
Monaco - node (v14.15.1, x64)
Memory used 341,503k (± 0.00%) 350,682k (± 0.01%) +9,179k (+ 2.69%) 350,626k 350,716k
Parse Time 1.58s (± 0.86%) 1.59s (± 0.59%) +0.01s (+ 0.51%) 1.58s 1.62s
Bind Time 0.65s (± 0.62%) 0.64s (± 0.70%) -0.01s (- 1.69%) 0.63s 0.65s
Check Time 4.93s (± 0.44%) 4.70s (± 0.39%) 🟩-0.24s (- 4.79%) 4.67s 4.74s
Emit Time 2.58s (± 0.83%) 2.58s (± 0.58%) -0.01s (- 0.27%) 2.54s 2.60s
Total Time 9.74s (± 0.41%) 9.49s (± 0.29%) -0.24s (- 2.52%) 9.44s 9.57s
TFS - node (v14.15.1, x64)
Memory used 301,271k (± 0.01%) 309,075k (± 0.01%) +7,804k (+ 2.59%) 309,009k 309,125k
Parse Time 1.32s (± 1.61%) 1.36s (± 1.35%) +0.04s (+ 2.79%) 1.32s 1.40s
Bind Time 0.60s (± 0.60%) 0.60s (± 0.56%) -0.00s (- 0.17%) 0.60s 0.61s
Check Time 4.60s (± 0.78%) 4.38s (± 0.46%) 🟩-0.23s (- 4.91%) 4.34s 4.43s
Emit Time 2.78s (± 0.42%) 2.76s (± 0.65%) -0.02s (- 0.79%) 2.72s 2.80s
Total Time 9.31s (± 0.52%) 9.10s (± 0.47%) -0.21s (- 2.31%) 8.99s 9.17s
material-ui - node (v14.15.1, x64)
Memory used 446,774k (± 0.01%) 0k 🟩-446,774k (-100.00%) 0k 0k
Parse Time 1.88s (± 0.47%) 0.00s 🟩-1.88s (-100.00%) 0.00s 0.00s
Bind Time 0.54s (± 0.63%) 0.00s 🟩-0.54s (-100.00%) 0.00s 0.00s
Check Time 11.95s (± 0.54%) 0.00s 🟩-11.95s (-100.00%) 0.00s 0.00s
Emit Time 0.00s (± 0.00%) 0.00s 0.00s ( NaN%) 0.00s 0.00s
Total Time 14.37s (± 0.48%) 0.00s 🟩-14.37s (-100.00%) 0.00s 0.00s
xstate - node (v14.15.1, x64)
Memory used 539,642k (± 0.01%) 555,871k (± 0.01%) +16,229k (+ 3.01%) 555,756k 556,042k
Parse Time 2.62s (± 0.90%) 2.66s (± 0.70%) +0.03s (+ 1.33%) 2.61s 2.69s
Bind Time 0.82s (± 0.73%) 0.79s (± 0.94%) 🟩-0.03s (- 3.19%) 0.77s 0.80s
Check Time 1.44s (± 0.59%) 1.43s (± 0.35%) -0.02s (- 1.11%) 1.42s 1.44s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 4.96s (± 0.57%) 4.95s (± 0.42%) -0.01s (- 0.16%) 4.91s 4.99s
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.15.1, x64)
Scenarios
  • Angular - node (v18.10.0, x64)
  • Angular - node (v16.17.1, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v18.10.0, x64)
  • Compiler-Unions - node (v16.17.1, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v18.10.0, x64)
  • Monaco - node (v16.17.1, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v18.10.0, x64)
  • TFS - node (v16.17.1, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v18.10.0, x64)
  • material-ui - node (v16.17.1, x64)
  • material-ui - node (v14.15.1, x64)
  • xstate - node (v18.10.0, x64)
  • xstate - node (v16.17.1, x64)
  • xstate - node (v14.15.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

TSServer

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
Compiler-UnionsTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,074ms (± 0.58%) 1,078ms (± 0.69%) +4ms (+ 0.40%) 1,067ms 1,101ms
Req 2 - geterr 2,550ms (± 0.86%) 2,530ms (± 0.70%) -20ms (- 0.78%) 2,492ms 2,568ms
Req 3 - references 165ms (± 1.05%) 165ms (± 0.73%) -0ms (- 0.24%) 161ms 167ms
Req 4 - navto 143ms (± 1.11%) 144ms (± 1.17%) +1ms (+ 0.70%) 141ms 148ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 55ms (± 7.97%) 55ms (± 7.91%) +0ms (+ 0.73%) 49ms 64ms
CompilerTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,150ms (± 0.67%) 1,141ms (± 0.68%) -9ms (- 0.77%) 1,118ms 1,160ms
Req 2 - geterr 1,572ms (± 0.71%) 1,582ms (± 0.94%) +10ms (+ 0.61%) 1,557ms 1,619ms
Req 3 - references 173ms (± 0.85%) 173ms (± 1.32%) +0ms (+ 0.17%) 169ms 181ms
Req 4 - navto 153ms (± 0.32%) 154ms (± 0.44%) +0ms (+ 0.13%) 153ms 156ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 53ms (± 2.09%) 52ms (± 2.67%) -1ms (- 1.52%) 47ms 54ms
xstateTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,546ms (± 1.01%) 1,559ms (± 0.58%) +13ms (+ 0.86%) 1,534ms 1,574ms
Req 2 - geterr 544ms (± 1.41%) 541ms (± 1.42%) -3ms (- 0.59%) 522ms 556ms
Req 3 - references 57ms (± 1.93%) 58ms (± 3.32%) +0ms (+ 0.52%) 54ms 62ms
Req 4 - navto 195ms (± 1.96%) 194ms (± 1.02%) -1ms (- 0.61%) 191ms 200ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 212ms (± 2.39%) 209ms (± 0.83%) -3ms (- 1.42%) 204ms 213ms
Compiler-UnionsTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,330ms (± 0.66%) 1,330ms (± 0.81%) -1ms (- 0.06%) 1,302ms 1,343ms
Req 2 - geterr 3,176ms (± 0.69%) 3,131ms (± 0.62%) -44ms (- 1.40%) 3,075ms 3,167ms
Req 3 - references 196ms (± 1.28%) 193ms (± 0.52%) -3ms (- 1.38%) 192ms 196ms
Req 4 - navto 157ms (± 0.79%) 157ms (± 0.86%) +0ms (+ 0.06%) 152ms 159ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 58ms (± 1.60%) 58ms (± 2.14%) +1ms (+ 1.04%) 56ms 61ms
CompilerTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,420ms (± 0.60%) 1,415ms (± 0.25%) -5ms (- 0.35%) 1,405ms 1,423ms
Req 2 - geterr 2,081ms (± 0.71%) 2,087ms (± 0.71%) +6ms (+ 0.27%) 2,051ms 2,109ms
Req 3 - references 203ms (± 0.98%) 204ms (± 0.77%) +1ms (+ 0.69%) 202ms 210ms
Req 4 - navto 169ms (± 0.97%) 168ms (± 0.55%) -0ms (- 0.18%) 166ms 170ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 57ms (± 1.36%) 56ms (± 1.04%) -1ms (- 2.11%) 54ms 57ms
xstateTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,881ms (± 0.41%) 1,876ms (± 0.66%) -5ms (- 0.25%) 1,846ms 1,901ms
Req 2 - geterr 696ms (± 0.63%) 694ms (± 0.92%) -2ms (- 0.26%) 680ms 706ms
Req 3 - references 66ms (± 0.68%) 69ms (± 2.71%) +3ms (+ 5.17%) 66ms 76ms
Req 4 - navto 199ms (± 0.44%) 195ms (± 0.72%) -4ms (- 1.91%) 192ms 198ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 255ms (± 0.69%) 252ms (± 1.16%) -4ms (- 1.37%) 245ms 260ms
Compiler-UnionsTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 1,480ms (± 0.67%) 1,481ms (± 0.71%) +1ms (+ 0.06%) 1,453ms 1,504ms
Req 2 - geterr 3,360ms (± 0.66%) 3,314ms (± 0.87%) -47ms (- 1.38%) 3,255ms 3,394ms
Req 3 - references 208ms (± 0.51%) 211ms (± 0.99%) +3ms (+ 1.44%) 207ms 216ms
Req 4 - navto 171ms (± 1.03%) 171ms (± 0.75%) +0ms (+ 0.23%) 168ms 174ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 61ms (± 7.32%) 59ms (± 5.22%) 🟩-2ms (- 3.59%) 56ms 71ms
CompilerTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 1,580ms (± 0.58%) 1,580ms (± 0.51%) -0ms (- 0.03%) 1,566ms 1,600ms
Req 2 - geterr 2,225ms (± 0.53%) 2,236ms (± 0.61%) +11ms (+ 0.51%) 2,211ms 2,266ms
Req 3 - references 223ms (± 1.62%) 222ms (± 0.95%) -1ms (- 0.54%) 218ms 227ms
Req 4 - navto 180ms (± 0.69%) 180ms (± 0.62%) -1ms (- 0.28%) 177ms 182ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 59ms (± 3.31%) 59ms (± 5.96%) -0ms (- 0.17%) 56ms 73ms
xstateTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 1,997ms (± 0.40%) 2,009ms (± 0.62%) +12ms (+ 0.60%) 1,986ms 2,039ms
Req 2 - geterr 741ms (± 0.55%) 745ms (± 0.29%) +4ms (+ 0.59%) 740ms 750ms
Req 3 - references 73ms (± 0.96%) 71ms (± 1.69%) -2ms (- 2.87%) 69ms 74ms
Req 4 - navto 215ms (± 1.10%) 216ms (± 0.58%) +1ms (+ 0.51%) 214ms 220ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 280ms (± 1.41%) 274ms (± 1.83%) -6ms (- 2.18%) 268ms 289ms
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.15.1, x64)
Scenarios
  • Compiler-UnionsTSServer - node (v18.10.0, x64)
  • Compiler-UnionsTSServer - node (v16.17.1, x64)
  • Compiler-UnionsTSServer - node (v14.15.1, x64)
  • CompilerTSServer - node (v18.10.0, x64)
  • CompilerTSServer - node (v16.17.1, x64)
  • CompilerTSServer - node (v14.15.1, x64)
  • xstateTSServer - node (v18.10.0, x64)
  • xstateTSServer - node (v16.17.1, x64)
  • xstateTSServer - node (v14.15.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

Startup

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
tsc-startup - node (v16.17.1, x64)
Execution time 118.09ms (± 0.39%) 121.29ms (± 0.57%) +3.20ms (+ 2.71%) 116.95ms 130.87ms
tsserver-startup - node (v16.17.1, x64)
Execution time 197.55ms (± 0.29%) 204.95ms (± 0.35%) +7.40ms (+ 3.75%) 197.57ms 211.77ms
tsserverlibrary-startup - node (v16.17.1, x64)
Execution time 192.19ms (± 0.31%) 197.82ms (± 0.32%) +5.63ms (+ 2.93%) 193.72ms 206.88ms
typescript-startup - node (v16.17.1, x64)
Execution time 177.63ms (± 0.32%) 181.84ms (± 0.41%) +4.21ms (+ 2.37%) 175.86ms 193.60ms
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v16.17.1, x64)
Scenarios
  • tsc-startup - node (v16.17.1, x64)
  • tsserver-startup - node (v16.17.1, x64)
  • tsserverlibrary-startup - node (v16.17.1, x64)
  • typescript-startup - node (v16.17.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

Developer Information:

Download Benchmark

@rbuckton
Copy link
Member Author

material-ui doesn't seem to be reporting any perf results

@rbuckton
Copy link
Member Author

It seems we have a few unchecked casts to TransientSymbol that aren't sound, and we're just leveraging the fact that the resulting property access into SymbolLinks just returns undefined.

@jakebailey
Copy link
Member

If one of the results is zero, the compiler crashed somewhere. (I hit this back when I broke the parser but only in some cases.)

(We should make that more obvious, we just need to have it distinguish error codes somehow.)

@LoemChanndany
Copy link

In the same vein as #51682, this makes Symbol/TransientSymbol/MappedSymbol/ReverseMappedSymbol stable so that all symbol property access becomes monomorphic.

@rbuckton
Copy link
Member Author

If one of the results is zero, the compiler crashed somewhere. (I hit this back when I broke the parser but only in some cases.)

(We should make that more obvious, we just need to have it distinguish error codes somehow.)

Thats why I commented:

It seems we have a few unchecked casts to TransientSymbol

Even after I fixed the crash locally though I have a few failing tests for "infer from usage" code fixes that I have to run down.

@jakebailey
Copy link
Member

Ah, I thought it was just unrelated commentary on the PR, oops.

@rbuckton
Copy link
Member Author

Apparently, we also have unchecked casts to SymbolLinks from Symbol, making them hard to find because SymbolLinks is just full of optional properties.

@rbuckton
Copy link
Member Author

@typescript-bot perf test

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @rbuckton, I've started to run the perf test suite on this PR at d099445. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

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

Here they are:

Compiler

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
Angular - node (v18.10.0, x64)
Memory used 364,536k (± 0.02%) 374,543k (± 0.01%) +10,007k (+ 2.75%) 374,426k 374,631k
Parse Time 1.57s (± 0.87%) 1.56s (± 1.09%) -0.01s (- 0.77%) 1.52s 1.61s
Bind Time 0.55s (± 0.73%) 0.53s (± 0.75%) 🟩-0.02s (- 3.63%) 0.52s 0.54s
Check Time 3.91s (± 0.48%) 3.72s (± 0.70%) 🟩-0.19s (- 4.81%) 3.68s 3.78s
Emit Time 3.92s (± 0.95%) 3.81s (± 0.61%) -0.11s (- 2.81%) 3.77s 3.87s
Total Time 9.94s (± 0.50%) 9.62s (± 0.43%) 🟩-0.33s (- 3.29%) 9.56s 9.73s
Compiler-Unions - node (v18.10.0, x64)
Memory used 199,671k (± 1.06%) 202,920k (± 1.07%) +3,249k (+ 1.63%) 199,840k 205,884k
Parse Time 0.62s (± 0.93%) 0.62s (± 0.77%) -0.01s (- 0.96%) 0.61s 0.63s
Bind Time 0.35s (± 1.69%) 0.35s (± 0.85%) -0.01s (- 1.97%) 0.34s 0.35s
Check Time 4.98s (± 0.87%) 4.70s (± 0.80%) 🟩-0.28s (- 5.62%) 4.62s 4.76s
Emit Time 1.48s (± 1.04%) 1.44s (± 0.85%) -0.04s (- 2.37%) 1.42s 1.46s
Total Time 7.44s (± 0.63%) 7.10s (± 0.55%) 🟩-0.33s (- 4.46%) 7.01s 7.16s
Monaco - node (v18.10.0, x64)
Memory used 347,230k (± 0.01%) 356,326k (± 0.02%) +9,095k (+ 2.62%) 356,090k 356,468k
Parse Time 1.18s (± 0.95%) 1.17s (± 0.78%) -0.01s (- 0.85%) 1.15s 1.19s
Bind Time 0.52s (± 1.16%) 0.49s (± 1.06%) 🟩-0.02s (- 4.66%) 0.48s 0.50s
Check Time 3.68s (± 0.40%) 3.48s (± 0.51%) 🟩-0.20s (- 5.41%) 3.44s 3.51s
Emit Time 2.06s (± 0.74%) 2.03s (± 0.79%) -0.03s (- 1.41%) 2.00s 2.07s
Total Time 7.42s (± 0.28%) 7.16s (± 0.56%) 🟩-0.26s (- 3.49%) 7.10s 7.26s
TFS - node (v18.10.0, x64)
Memory used 305,790k (± 0.25%) 313,486k (± 0.23%) +7,696k (+ 2.52%) 312,557k 314,767k
Parse Time 0.96s (± 1.43%) 0.95s (± 0.89%) -0.01s (- 1.15%) 0.93s 0.96s
Bind Time 0.54s (± 7.53%) 0.51s (± 8.79%) 🟩-0.03s (- 5.56%) 0.44s 0.58s
Check Time 3.39s (± 0.59%) 3.21s (± 0.43%) 🟩-0.18s (- 5.25%) 3.19s 3.26s
Emit Time 2.02s (± 0.76%) 1.99s (± 0.62%) -0.03s (- 1.58%) 1.96s 2.01s
Total Time 6.91s (± 0.53%) 6.67s (± 0.57%) 🟩-0.25s (- 3.57%) 6.61s 6.74s
material-ui - node (v18.10.0, x64)
Memory used 451,744k (± 0.02%) 485,697k (± 0.01%) +33,954k (+ 7.52%) 485,622k 485,814k
Parse Time 1.38s (± 0.94%) 1.37s (± 1.25%) -0.01s (- 1.08%) 1.34s 1.43s
Bind Time 0.41s (± 0.82%) 0.39s (± 0.88%) 🟩-0.03s (- 6.30%) 0.38s 0.39s
Check Time 10.20s (± 0.78%) 9.54s (± 0.45%) 🟩-0.65s (- 6.41%) 9.42s 9.63s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 12.00s (± 0.75%) 11.30s (± 0.44%) 🟩-0.69s (- 5.78%) 11.16s 11.39s
xstate - node (v18.10.0, x64)
Memory used 553,529k (± 0.01%) 569,745k (± 0.01%) +16,217k (+ 2.93%) 569,638k 569,855k
Parse Time 1.92s (± 0.59%) 1.90s (± 0.36%) -0.03s (- 1.35%) 1.88s 1.91s
Bind Time 0.72s (± 1.66%) 0.69s (± 2.20%) 🟩-0.03s (- 4.44%) 0.66s 0.73s
Check Time 1.03s (± 0.97%) 0.99s (± 0.71%) 🟩-0.04s (- 3.51%) 0.98s 1.01s
Emit Time 0.05s (± 0.00%) 0.05s (± 0.00%) 0.00s ( 0.00%) 0.05s 0.05s
Total Time 3.73s (± 0.50%) 3.63s (± 0.43%) -0.09s (- 2.47%) 3.61s 3.67s
Angular - node (v16.17.1, x64)
Memory used 363,888k (± 0.02%) 373,807k (± 0.01%) +9,919k (+ 2.73%) 373,650k 373,858k
Parse Time 1.93s (± 0.39%) 1.90s (± 0.50%) -0.03s (- 1.61%) 1.88s 1.92s
Bind Time 0.67s (± 0.77%) 0.64s (± 0.73%) 🟩-0.03s (- 4.62%) 0.63s 0.65s
Check Time 5.03s (± 0.62%) 4.81s (± 0.89%) 🟩-0.22s (- 4.47%) 4.70s 4.88s
Emit Time 4.71s (± 0.83%) 4.55s (± 0.90%) 🟩-0.16s (- 3.48%) 4.47s 4.62s
Total Time 12.33s (± 0.52%) 11.89s (± 0.45%) 🟩-0.45s (- 3.62%) 11.79s 12.03s
Compiler-Unions - node (v16.17.1, x64)
Memory used 200,231k (± 0.63%) 203,082k (± 0.61%) +2,851k (+ 1.42%) 201,594k 205,313k
Parse Time 0.80s (± 0.83%) 0.79s (± 0.82%) -0.01s (- 1.37%) 0.78s 0.81s
Bind Time 0.45s (± 0.82%) 0.43s (± 0.79%) -0.01s (- 2.91%) 0.43s 0.44s
Check Time 5.92s (± 0.58%) 5.62s (± 0.75%) 🟩-0.31s (- 5.23%) 5.51s 5.71s
Emit Time 1.80s (± 0.95%) 1.78s (± 0.92%) -0.02s (- 1.28%) 1.73s 1.81s
Total Time 8.98s (± 0.46%) 8.62s (± 0.61%) 🟩-0.36s (- 4.01%) 8.48s 8.73s
Monaco - node (v16.17.1, x64)
Memory used 346,594k (± 0.01%) 355,651k (± 0.02%) +9,057k (+ 2.61%) 355,509k 355,777k
Parse Time 1.43s (± 0.93%) 1.43s (± 0.77%) -0.01s (- 0.42%) 1.40s 1.45s
Bind Time 0.61s (± 0.66%) 0.59s (± 0.62%) -0.01s (- 2.30%) 0.59s 0.60s
Check Time 4.64s (± 0.60%) 4.39s (± 0.78%) 🟩-0.25s (- 5.41%) 4.32s 4.47s
Emit Time 2.48s (± 0.82%) 2.44s (± 1.01%) -0.04s (- 1.57%) 2.40s 2.50s
Total Time 9.16s (± 0.52%) 8.85s (± 0.71%) 🟩-0.31s (- 3.39%) 8.75s 9.00s
TFS - node (v16.17.1, x64)
Memory used 304,277k (± 0.02%) 312,125k (± 0.03%) +7,849k (+ 2.58%) 312,057k 312,439k
Parse Time 1.19s (± 1.08%) 1.17s (± 1.65%) -0.02s (- 1.43%) 1.14s 1.23s
Bind Time 0.58s (± 0.90%) 0.57s (± 1.28%) -0.01s (- 1.90%) 0.55s 0.58s
Check Time 4.33s (± 0.45%) 4.11s (± 0.41%) 🟩-0.22s (- 5.10%) 4.07s 4.15s
Emit Time 2.49s (± 1.42%) 2.47s (± 0.90%) -0.02s (- 0.96%) 2.42s 2.51s
Total Time 8.60s (± 0.57%) 8.32s (± 0.51%) 🟩-0.27s (- 3.20%) 8.23s 8.43s
material-ui - node (v16.17.1, x64)
Memory used 451,155k (± 0.02%) 484,996k (± 0.01%) +33,841k (+ 7.50%) 484,955k 485,087k
Parse Time 1.68s (± 0.59%) 1.66s (± 0.56%) -0.02s (- 1.31%) 1.64s 1.67s
Bind Time 0.50s (± 0.68%) 0.48s (± 0.71%) 🟩-0.03s (- 5.17%) 0.47s 0.48s
Check Time 11.59s (± 0.63%) 10.98s (± 0.66%) 🟩-0.60s (- 5.18%) 10.89s 11.23s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 13.77s (± 0.50%) 13.12s (± 0.59%) 🟩-0.65s (- 4.72%) 13.03s 13.38s
xstate - node (v16.17.1, x64)
Memory used 551,127k (± 0.01%) 567,387k (± 0.01%) +16,260k (+ 2.95%) 567,268k 567,564k
Parse Time 2.31s (± 0.28%) 2.29s (± 0.53%) -0.02s (- 0.78%) 2.28s 2.34s
Bind Time 0.85s (± 2.72%) 0.83s (± 2.19%) -0.02s (- 2.24%) 0.79s 0.87s
Check Time 1.35s (± 0.69%) 1.31s (± 0.57%) -0.03s (- 2.60%) 1.30s 1.33s
Emit Time 0.06s (± 0.00%) 0.06s (± 0.00%) 0.00s ( 0.00%) 0.06s 0.06s
Total Time 4.57s (± 0.52%) 4.51s (± 0.55%) -0.07s (- 1.44%) 4.45s 4.55s
Angular - node (v14.15.1, x64)
Memory used 357,638k (± 0.01%) 367,560k (± 0.00%) +9,922k (+ 2.77%) 367,530k 367,582k
Parse Time 2.05s (± 0.41%) 2.03s (± 0.29%) -0.02s (- 0.78%) 2.02s 2.04s
Bind Time 0.71s (± 0.70%) 0.69s (± 0.32%) 🟩-0.02s (- 3.36%) 0.69s 0.70s
Check Time 5.36s (± 0.55%) 5.13s (± 0.45%) 🟩-0.22s (- 4.16%) 5.07s 5.17s
Emit Time 4.82s (± 0.96%) 4.68s (± 0.62%) -0.14s (- 2.82%) 4.63s 4.76s
Total Time 12.94s (± 0.43%) 12.54s (± 0.41%) 🟩-0.40s (- 3.08%) 12.43s 12.67s
Compiler-Unions - node (v14.15.1, x64)
Memory used 196,259k (± 0.52%) 199,142k (± 0.57%) +2,883k (+ 1.47%) 196,787k 200,283k
Parse Time 0.91s (± 0.80%) 0.90s (± 0.50%) -0.01s (- 1.10%) 0.89s 0.91s
Bind Time 0.48s (± 0.76%) 0.47s (± 0.78%) -0.01s (- 2.10%) 0.46s 0.47s
Check Time 6.15s (± 0.48%) 5.87s (± 0.55%) 🟩-0.28s (- 4.57%) 5.79s 5.96s
Emit Time 1.92s (± 0.60%) 1.89s (± 1.11%) -0.04s (- 1.92%) 1.86s 1.94s
Total Time 9.46s (± 0.28%) 9.12s (± 0.37%) 🟩-0.34s (- 3.60%) 9.03s 9.20s
Monaco - node (v14.15.1, x64)
Memory used 341,571k (± 0.01%) 350,687k (± 0.01%) +9,117k (+ 2.67%) 350,613k 350,779k
Parse Time 1.58s (± 0.48%) 1.57s (± 0.59%) -0.02s (- 1.01%) 1.55s 1.59s
Bind Time 0.65s (± 0.72%) 0.63s (± 0.88%) -0.02s (- 2.77%) 0.62s 0.65s
Check Time 4.94s (± 0.44%) 4.68s (± 0.69%) 🟩-0.26s (- 5.28%) 4.61s 4.75s
Emit Time 2.59s (± 1.01%) 2.57s (± 0.84%) -0.02s (- 0.89%) 2.52s 2.62s
Total Time 9.76s (± 0.42%) 9.45s (± 0.43%) 🟩-0.31s (- 3.22%) 9.39s 9.55s
TFS - node (v14.15.1, x64)
Memory used 301,370k (± 0.00%) 309,172k (± 0.01%) +7,802k (+ 2.59%) 309,116k 309,213k
Parse Time 1.33s (± 0.94%) 1.32s (± 0.98%) -0.01s (- 0.68%) 1.29s 1.35s
Bind Time 0.60s (± 0.60%) 0.59s (± 0.61%) -0.01s (- 1.66%) 0.59s 0.60s
Check Time 4.61s (± 0.48%) 4.35s (± 0.53%) 🟩-0.26s (- 5.64%) 4.29s 4.40s
Emit Time 2.77s (± 0.63%) 2.74s (± 0.33%) -0.03s (- 1.26%) 2.72s 2.75s
Total Time 9.31s (± 0.41%) 9.00s (± 0.32%) 🟩-0.31s (- 3.37%) 8.93s 9.05s
material-ui - node (v14.15.1, x64)
Memory used 446,780k (± 0.01%) 480,418k (± 0.01%) +33,638k (+ 7.53%) 480,327k 480,483k
Parse Time 1.88s (± 0.55%) 1.87s (± 0.60%) -0.01s (- 0.69%) 1.84s 1.90s
Bind Time 0.54s (± 1.07%) 0.52s (± 0.43%) 🟩-0.02s (- 4.05%) 0.52s 0.53s
Check Time 11.98s (± 0.62%) 11.47s (± 0.50%) 🟩-0.51s (- 4.27%) 11.34s 11.61s
Emit Time 0.00s (± 0.00%) 0.00s (± 0.00%) 0.00s ( NaN%) 0.00s 0.00s
Total Time 14.41s (± 0.51%) 13.86s (± 0.46%) 🟩-0.54s (- 3.76%) 13.73s 14.03s
xstate - node (v14.15.1, x64)
Memory used 539,770k (± 0.01%) 555,920k (± 0.01%) +16,150k (+ 2.99%) 555,722k 556,084k
Parse Time 2.64s (± 0.56%) 2.62s (± 0.56%) -0.02s (- 0.83%) 2.60s 2.67s
Bind Time 0.82s (± 0.41%) 0.78s (± 0.29%) 🟩-0.04s (- 5.10%) 0.78s 0.79s
Check Time 1.44s (± 0.70%) 1.43s (± 0.62%) -0.02s (- 1.18%) 1.40s 1.44s
Emit Time 0.07s (± 0.00%) 0.07s (± 0.00%) 0.00s ( 0.00%) 0.07s 0.07s
Total Time 4.99s (± 0.38%) 4.91s (± 0.35%) -0.08s (- 1.62%) 4.88s 4.95s
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.15.1, x64)
Scenarios
  • Angular - node (v18.10.0, x64)
  • Angular - node (v16.17.1, x64)
  • Angular - node (v14.15.1, x64)
  • Compiler-Unions - node (v18.10.0, x64)
  • Compiler-Unions - node (v16.17.1, x64)
  • Compiler-Unions - node (v14.15.1, x64)
  • Monaco - node (v18.10.0, x64)
  • Monaco - node (v16.17.1, x64)
  • Monaco - node (v14.15.1, x64)
  • TFS - node (v18.10.0, x64)
  • TFS - node (v16.17.1, x64)
  • TFS - node (v14.15.1, x64)
  • material-ui - node (v18.10.0, x64)
  • material-ui - node (v16.17.1, x64)
  • material-ui - node (v14.15.1, x64)
  • xstate - node (v18.10.0, x64)
  • xstate - node (v16.17.1, x64)
  • xstate - node (v14.15.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

TSServer

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
Compiler-UnionsTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,073ms (± 0.72%) 1,063ms (± 0.79%) -10ms (- 0.94%) 1,046ms 1,090ms
Req 2 - geterr 2,592ms (± 0.79%) 2,511ms (± 0.72%) 🟩-81ms (- 3.12%) 2,490ms 2,566ms
Req 3 - references 167ms (± 0.85%) 164ms (± 1.08%) -2ms (- 1.44%) 161ms 170ms
Req 4 - navto 144ms (± 1.24%) 142ms (± 1.41%) -3ms (- 1.94%) 139ms 148ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 56ms (± 7.73%) 55ms (± 7.97%) -1ms (- 2.15%) 48ms 62ms
CompilerTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,148ms (± 0.69%) 1,136ms (± 0.39%) -12ms (- 1.04%) 1,128ms 1,147ms
Req 2 - geterr 1,575ms (± 0.64%) 1,561ms (± 0.59%) -14ms (- 0.87%) 1,546ms 1,585ms
Req 3 - references 175ms (± 0.95%) 172ms (± 0.93%) -3ms (- 1.94%) 169ms 176ms
Req 4 - navto 153ms (± 0.67%) 152ms (± 0.63%) -2ms (- 1.05%) 149ms 153ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 53ms (± 1.71%) 52ms (± 1.11%) -1ms (- 1.51%) 51ms 54ms
xstateTSServer - node (v18.10.0, x64)
Req 1 - updateOpen 1,554ms (± 1.08%) 1,545ms (± 1.05%) -8ms (- 0.53%) 1,517ms 1,591ms
Req 2 - geterr 548ms (± 1.33%) 544ms (± 1.31%) -3ms (- 0.57%) 532ms 561ms
Req 3 - references 57ms (± 1.68%) 58ms (± 2.92%) +1ms (+ 2.47%) 54ms 62ms
Req 4 - navto 196ms (± 1.20%) 193ms (± 0.62%) -3ms (- 1.63%) 190ms 196ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 219ms (± 1.08%) 211ms (± 1.23%) 🟩-8ms (- 3.52%) 205ms 217ms
Compiler-UnionsTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,334ms (± 0.52%) 1,320ms (± 0.38%) -14ms (- 1.02%) 1,309ms 1,329ms
Req 2 - geterr 3,186ms (± 0.45%) 3,096ms (± 0.86%) -90ms (- 2.83%) 3,057ms 3,163ms
Req 3 - references 196ms (± 0.54%) 192ms (± 0.82%) -4ms (- 1.94%) 190ms 197ms
Req 4 - navto 156ms (± 1.23%) 155ms (± 0.90%) -1ms (- 0.64%) 152ms 158ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 58ms (± 2.08%) 57ms (± 1.66%) -0ms (- 0.52%) 56ms 60ms
CompilerTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,421ms (± 0.76%) 1,402ms (± 0.59%) -19ms (- 1.35%) 1,384ms 1,424ms
Req 2 - geterr 2,074ms (± 0.73%) 2,072ms (± 0.60%) -2ms (- 0.08%) 2,060ms 2,121ms
Req 3 - references 203ms (± 0.28%) 200ms (± 0.40%) -3ms (- 1.58%) 198ms 202ms
Req 4 - navto 167ms (± 0.90%) 166ms (± 1.02%) -1ms (- 0.42%) 163ms 171ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 57ms (± 0.84%) 56ms (± 1.07%) -1ms (- 1.94%) 55ms 57ms
xstateTSServer - node (v16.17.1, x64)
Req 1 - updateOpen 1,871ms (± 0.82%) 1,845ms (± 0.44%) -26ms (- 1.41%) 1,827ms 1,867ms
Req 2 - geterr 698ms (± 0.59%) 686ms (± 0.79%) -12ms (- 1.69%) 674ms 703ms
Req 3 - references 67ms (± 1.44%) 67ms (± 1.77%) +0ms (+ 0.45%) 65ms 70ms
Req 4 - navto 197ms (± 0.77%) 191ms (± 1.19%) 🟩-6ms (- 3.20%) 186ms 197ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 258ms (± 0.84%) 254ms (± 1.31%) -4ms (- 1.51%) 247ms 263ms
Compiler-UnionsTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 1,478ms (± 0.74%) 1,474ms (± 0.66%) -4ms (- 0.25%) 1,453ms 1,501ms
Req 2 - geterr 3,379ms (± 0.83%) 3,286ms (± 0.48%) -93ms (- 2.76%) 3,257ms 3,329ms
Req 3 - references 210ms (± 0.68%) 207ms (± 0.64%) -3ms (- 1.19%) 205ms 211ms
Req 4 - navto 171ms (± 1.05%) 169ms (± 0.87%) -2ms (- 1.28%) 167ms 174ms
Req 5 - completionInfo count 1,356 (± 0.00%) 1,356 (± 0.00%) 0 ( 0.00%) 1,356 1,356
Req 5 - completionInfo 59ms (± 0.99%) 58ms (± 1.44%) -1ms (- 1.87%) 56ms 60ms
CompilerTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 1,583ms (± 0.48%) 1,569ms (± 0.27%) -14ms (- 0.88%) 1,556ms 1,577ms
Req 2 - geterr 2,231ms (± 0.55%) 2,230ms (± 0.49%) -1ms (- 0.04%) 2,212ms 2,265ms
Req 3 - references 222ms (± 0.95%) 220ms (± 1.16%) -2ms (- 0.77%) 216ms 224ms
Req 4 - navto 179ms (± 0.85%) 178ms (± 0.93%) -1ms (- 0.61%) 173ms 182ms
Req 5 - completionInfo count 1,518 (± 0.00%) 1,518 (± 0.00%) 0 ( 0.00%) 1,518 1,518
Req 5 - completionInfo 61ms (± 3.43%) 58ms (± 1.98%) 🟩-3ms (- 4.27%) 56ms 61ms
xstateTSServer - node (v14.15.1, x64)
Req 1 - updateOpen 2,013ms (± 0.88%) 1,994ms (± 0.72%) -19ms (- 0.95%) 1,971ms 2,034ms
Req 2 - geterr 744ms (± 0.54%) 744ms (± 0.42%) -0ms (- 0.04%) 738ms 753ms
Req 3 - references 71ms (± 1.33%) 74ms (± 0.83%) +3ms (+ 3.78%) 73ms 76ms
Req 4 - navto 218ms (± 0.80%) 215ms (± 0.68%) -4ms (- 1.60%) 210ms 217ms
Req 5 - completionInfo count 3,154 (± 0.00%) 3,154 (± 0.00%) 0 ( 0.00%) 3,154 3,154
Req 5 - completionInfo 274ms (± 0.47%) 284ms (± 1.01%) +10ms (+ 3.65%) 277ms 291ms
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v18.10.0, x64)
  • node (v16.17.1, x64)
  • node (v14.15.1, x64)
Scenarios
  • Compiler-UnionsTSServer - node (v18.10.0, x64)
  • Compiler-UnionsTSServer - node (v16.17.1, x64)
  • Compiler-UnionsTSServer - node (v14.15.1, x64)
  • CompilerTSServer - node (v18.10.0, x64)
  • CompilerTSServer - node (v16.17.1, x64)
  • CompilerTSServer - node (v14.15.1, x64)
  • xstateTSServer - node (v18.10.0, x64)
  • xstateTSServer - node (v16.17.1, x64)
  • xstateTSServer - node (v14.15.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

Startup

Comparison Report - main..51880
Metric main 51880 Delta Best Worst
tsc-startup - node (v16.17.1, x64)
Execution time 118.28ms (± 0.38%) 119.87ms (± 0.57%) +1.58ms (+ 1.34%) 116.44ms 129.77ms
tsserver-startup - node (v16.17.1, x64)
Execution time 198.89ms (± 0.29%) 199.87ms (± 0.42%) +0.98ms (+ 0.49%) 195.43ms 208.11ms
tsserverlibrary-startup - node (v16.17.1, x64)
Execution time 193.07ms (± 0.28%) 194.64ms (± 0.43%) +1.57ms (+ 0.81%) 189.91ms 202.46ms
typescript-startup - node (v16.17.1, x64)
Execution time 178.55ms (± 0.32%) 179.63ms (± 0.43%) +1.08ms (+ 0.60%) 175.76ms 190.01ms
System
Machine Namets-ci-ubuntu
Platformlinux 5.4.0-131-generic
Architecturex64
Available Memory16 GB
Available Memory15 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v16.17.1, x64)
Scenarios
  • tsc-startup - node (v16.17.1, x64)
  • tsserver-startup - node (v16.17.1, x64)
  • tsserverlibrary-startup - node (v16.17.1, x64)
  • typescript-startup - node (v16.17.1, x64)
Benchmark Name Iterations
Current 51880 10
Baseline main 10

Developer Information:

Download Benchmark

@rbuckton rbuckton marked this pull request as ready for review December 14, 2022 17:38
/** @internal */ assignmentDeclarationMembers?: Map<number, Declaration>; // detected late-bound assignment declarations associated with the symbol
}

/** @internal */
export interface SymbolLinks {
_symbolLinksBrand: any;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this primarily to catch an unconditional cast to SymbolLinks from Symbol and decided to leave it in to prevent that from happening in the future.

@@ -1302,8 +1303,9 @@ const intrinsicTypeKinds: ReadonlyMap<string, IntrinsicTypeKind> = new Map(getEn
Uncapitalize: IntrinsicTypeKind.Uncapitalize
}));

function SymbolLinks(this: SymbolLinks) {
}
const SymbolLinks = class implements SymbolLinks {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using a class mean instances of SymbolLinks will share the same hidden class even if different properties are attached in different orders? If not, how bad is the memory impact of initializing all the possible properties to undefined? (I assume awful because there are so many.) Did you test the class implementation against an object literal implementation?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, what’s the reason for using a class expression here?

Copy link
Member Author

@rbuckton rbuckton Dec 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder how many more of those kinds of things we have that could be switched.

(Those links don't seem to work, but the example is enough to convince me, personally.)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They don't work because checker isn't expanded by default, you have to expand it manually.

image

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn’t realize we were using a constructor function before. The crux of my question is really, is there a reason why it’s not function createSymbolLinks(): SymbolLinks { return {}; }, and do we know what the difference in performance characteristics between the two is.

Copy link
Member Author

@rbuckton rbuckton Dec 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does using a class mean instances of SymbolLinks will share the same hidden class even if different properties are attached in different orders?

No, whether you are using a class or function has no bearing at the moment because the actual emit from esbuild is a class with no fields. Native classes with native fields would ensure all properties are defined ahead of time, which would help but we can't leverage that currently.

If not, how bad is the memory impact of initializing all the possible properties to undefined? (I assume awful because there are so many.)

You're essentially adding the space for a heap pointer (roughly 8 bytes) for each property, per object. The best way to reduce that cost is to cut back on what we actually need to store on the object, either through the introduction of bitflags to condense booleans, putting lesser used properties in their own objects, or not storing anything that can be trivially recomputed.

Did you test the class implementation against an object literal implementation?

Not for this specifically, but in general I have yes. There's no real difference in storage, but object literals are far harder to isolate when looking at memory snapshots or v8 traces since they all have Object as their constructor.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(roughly 8 bytes) for each property

This isn't entirely accurate. IIRC, every object in V8 has an initial structure that is fixed in size and can hold a small number of properties directly. Additional properties beyond that limit are stored elsewhere on the heap. This means every object allocation has a minimum size that accounts for some of the properties.

Copy link
Member Author

@rbuckton rbuckton Dec 14, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn’t realize we were using a constructor function before. The crux of my question is really, is there a reason why it’s not function createSymbolLinks(): SymbolLinks { return {}; }, and do we know what the difference in performance characteristics between the two is.

All object literals share the same constructor so they show up as Object in the debugger, in memory snapshots, and in the v8 trace logs, which make them impossible to differentiate from one another. We should really try to use object literals only for throw-away things like options bags for functions, or destructuring results. Using a class for objects with a longer lifetime is preferred, even if we're just using it as a tag, i.e.:

function createFlowNode() {
  return {} as FlowNode; // bad for debugging/snapshots/tracing
}

// vs

function createFlowNode() {
  return new FlowNode() as FlowNode; // better for debugging/snapshots/tracing,
                                     // but pretty much the same as {} otherwise
}

// minimum needed to tag the object for diagnostic tooling, though it would be better 
// if the object has a stable set of properties we can pre-allocate:
const FlowNode = class FlowNode {};

The only downside to this approach is that you end up with a unique starting "map" for each tag (since it points to a different constructor/prototype)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example, there are 215 different V8 maps for Object here that I have no insight into without drilling into each one, vs the other constructors in this list:

image

@jakebailey
Copy link
Member

Partially related, but the force pushing is making it a little hard to view the changes as they come in; since we squash on merge, is the force pushing required for all of the updates?

@rbuckton
Copy link
Member Author

rbuckton commented Dec 14, 2022

Partially related, but the force pushing is making it a little hard to view the changes as they come in; since we squash on merge, is the force pushing required for all of the updates?

Maybe not, but I generally try to keep related changes isolated to a single commit, and rebase against main when possible because it makes it easier to walk around through local commit history if I am working on a feature requiring multiple independent changes. This is especially the case with these perf related PRs because I'm often walking back and forth through local commit history to compare v8 trace logs looking for specific differences.

@jakebailey
Copy link
Member

@typescript-bot test this
@typescript-bot test top100
@typescript-bot user test this
@typescript-bot user test tsserver
@typescript-bot test tsserver top100
@typescript-bot run dt

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the diff-based top-repos suite on this PR at d7cbf19. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the diff-based user code test suite on this PR at d7cbf19. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the diff-based top-repos suite (tsserver) on this PR at d7cbf19. You can monitor the build here.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the parallelized Definitely Typed test suite on this PR at d7cbf19. You can monitor the build here.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the extended test suite on this PR at d7cbf19. You can monitor the build here.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Dec 14, 2022

Heya @jakebailey, I've started to run the diff-based user code test suite (tsserver) on this PR at d7cbf19. You can monitor the build here.

Update: The results are in!

Copy link
Member

@jakebailey jakebailey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code looks good to me, but I ran all of the different suites in case there's another crash lurking.

Comment on lines -349 to +350
HasDecorators,
hasDecorators,
HasDecorators,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is some tool doing this? If this is changed, is it likely for this to get flipped back again?

(I am hoping this is moot as of tomorrow-ish, when the next VS Code TS nightly is available with the fix in, and or when we can restore the ordering to be sensitive on main.)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did "Sort lines ascending" because auto-imports stuck a few things at the bottom, and organize imports wouldn't fix it.

@typescript-bot
Copy link
Collaborator

@jakebailey Here are the results of running the user test suite comparing main and refs/pull/51880/merge:

Everything looks good!

1 similar comment
@typescript-bot
Copy link
Collaborator

@jakebailey Here are the results of running the user test suite comparing main and refs/pull/51880/merge:

Everything looks good!

@typescript-bot
Copy link
Collaborator

@jakebailey Here are the results of running the top-repos suite comparing main and refs/pull/51880/merge:

Everything looks good!

@typescript-bot
Copy link
Collaborator

@jakebailey Here are the results of running the top-repos suite comparing main and refs/pull/51880/merge:

Something interesting changed - please have a look.

Details

felixrieseberg/windows95

⚠️ Note that built also had errors ⚠️
Req #1149 - references
    at formatMessage2 (/typescript-main/built/local/tsserver.js:159184:21)
    at IOSession.writeMessage (/typescript-main/built/local/tsserver.js:160191:21)
    at IOSession.send (/typescript-main/built/local/tsserver.js:160188:10)
    at IOSession.doOutput (/typescript-main/built/local/tsserver.js:160235:10)
    at IOSession.onMessage (/typescript-main/built/local/tsserver.js:161846:14)
    at Interface.<anonymous> (/typescript-main/built/local/tsserver.js:163232:14)
Req #1149 - references
    at formatMessage2 (/typescript-51880/built/local/tsserver.js:159200:21)
    at IOSession.writeMessage (/typescript-51880/built/local/tsserver.js:160207:21)
    at IOSession.send (/typescript-51880/built/local/tsserver.js:160204:10)
    at IOSession.doOutput (/typescript-51880/built/local/tsserver.js:160251:10)
    at IOSession.onMessage (/typescript-51880/built/local/tsserver.js:161862:14)
    at Interface.<anonymous> (/typescript-51880/built/local/tsserver.js:163248:14)

That is a filtered view of the text. To see the raw error text, go to RepoResults4/felixrieseberg.windows95.rawError.txt in the artifact folder

Last few requests

{"seq":1146,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":351847,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}
{"seq":1147,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":351847,"entryNames":["_"]}}
{"seq":1148,"type":"request","command":"definitionAndBoundSpan","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":352407}}
{"seq":1149,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/src/renderer/lib/_libwabt.js","line":13,"offset":352852}}

Repro Steps

  1. git clone https://github.com/felixrieseberg/windows95 --recurse-submodules
  2. In dir windows95, run git reset --hard 17a81393467e2668eb2eea291ab4b6a749756dad
  3. In dir windows95, run yarn install --ignore-engines --ignore-scripts --silent
  4. Back in the initial folder, download RepoResults4/felixrieseberg.windows95.replay.txt from the artifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./windows95 ./felixrieseberg.windows95.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

palantir/blueprint

⚠️ Note that built also had errors ⚠️
Req #16168 - references
    at formatMessage2 (/typescript-main/built/local/tsserver.js:159184:21)
    at IOSession.writeMessage (/typescript-main/built/local/tsserver.js:160191:21)
    at IOSession.send (/typescript-main/built/local/tsserver.js:160188:10)
    at IOSession.doOutput (/typescript-main/built/local/tsserver.js:160235:10)
    at IOSession.onMessage (/typescript-main/built/local/tsserver.js:161846:14)
    at Interface.<anonymous> (/typescript-main/built/local/tsserver.js:163232:14)
Req #16168 - references
    at formatMessage2 (/typescript-51880/built/local/tsserver.js:159200:21)
    at IOSession.writeMessage (/typescript-51880/built/local/tsserver.js:160207:21)
    at IOSession.send (/typescript-51880/built/local/tsserver.js:160204:10)
    at IOSession.doOutput (/typescript-51880/built/local/tsserver.js:160251:10)
    at IOSession.onMessage (/typescript-51880/built/local/tsserver.js:161862:14)
    at Interface.<anonymous> (/typescript-51880/built/local/tsserver.js:163248:14)

That is a filtered view of the text. To see the raw error text, go to RepoResults4/palantir.blueprint.rawError.txt in the artifact folder

Last few requests

{"seq":16165,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":2095038,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}
{"seq":16166,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":2095038,"entryNames":["arguments"]}}
{"seq":16167,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":2096623,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":1}}
{"seq":16168,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/site/docs/versions/1/docs-app.js","line":1,"offset":2096978}}

Repro Steps

  1. git clone https://github.com/palantir/blueprint --recurse-submodules
  2. In dir blueprint, run git reset --hard b6c1518ea2f524accfba8045ce6f22cac7c5b56e
  3. In dir blueprint, run yarn install --ignore-engines --ignore-scripts --silent
  4. Back in the initial folder, download RepoResults4/palantir.blueprint.replay.txt from the artifact folder
  5. npm install --no-save @typescript/server-replay
  6. npx tsreplay ./blueprint ./palantir.blueprint.replay.txt path/to/tsserver.js
  7. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

@jakebailey
Copy link
Member

Those ones are all broken on main too, so nothing new there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Author: Team For Uncommitted Bug PR for untriaged, rejected, closed or missing bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants