Skip to content

Move const enums and typeof facts maps out of createTypeChecker#32691

Merged
rbuckton merged 1 commit into
masterfrom
removeExcessAllocationsInChecker
Aug 3, 2019
Merged

Move const enums and typeof facts maps out of createTypeChecker#32691
rbuckton merged 1 commit into
masterfrom
removeExcessAllocationsInChecker

Conversation

@rbuckton
Copy link
Copy Markdown
Contributor

@rbuckton rbuckton commented Aug 3, 2019

We have --preserveConstEnums enabled for the compiler to better support our API consumers, however that means we always preserve const enums, even in places where they would be otherwise unreachable as an API consumer. This means that every time we call createTypeChecker from the language service, we are re-evaluating these unused declarations for const enums, which is unnecessary overhead.

This PR moves the various const enums as well as typeofEQFacts and typeofNEFacts (which are read-only maps) out of createTypeChecker to reduce overhead.

@rbuckton rbuckton requested review from sandersn and weswigham August 3, 2019 01:43
@rbuckton
Copy link
Copy Markdown
Contributor Author

rbuckton commented Aug 3, 2019

@typescript-bot perf test this

I don't expect a significant change in performance here, as our perf tests run benchmarks against the command line compiler which will only really call createTypeChecker once.

@typescript-bot
Copy link
Copy Markdown
Collaborator

typescript-bot commented Aug 3, 2019

Heya @rbuckton, I've started to run the perf test suite on this PR at 909dfbb. 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
Copy Markdown
Collaborator

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

Here they are:

Comparison Report - master..32691

Metric master 32691 Delta Best Worst
Angular - node (v12.1.0, x64)
Memory used 325,416k (± 0.03%) 325,351k (± 0.04%) -65k (- 0.02%) 324,876k 325,532k
Parse Time 1.44s (± 0.91%) 1.44s (± 0.75%) +0.00s (+ 0.00%) 1.42s 1.46s
Bind Time 0.76s (± 0.78%) 0.76s (± 0.81%) -0.01s (- 0.65%) 0.74s 0.77s
Check Time 4.22s (± 0.44%) 4.22s (± 0.45%) -0.01s (- 0.17%) 4.16s 4.26s
Emit Time 5.21s (± 0.49%) 5.23s (± 0.82%) +0.02s (+ 0.36%) 5.15s 5.36s
Total Time 11.64s (± 0.33%) 11.65s (± 0.51%) +0.01s (+ 0.07%) 11.57s 11.86s
Monaco - node (v12.1.0, x64)
Memory used 345,830k (± 0.02%) 345,708k (± 0.02%) -122k (- 0.04%) 345,569k 345,923k
Parse Time 1.19s (± 0.64%) 1.18s (± 0.70%) -0.01s (- 0.84%) 1.16s 1.19s
Bind Time 0.67s (± 0.33%) 0.68s (± 0.76%) +0.01s (+ 1.49%) 0.67s 0.70s
Check Time 4.28s (± 0.44%) 4.27s (± 0.47%) -0.01s (- 0.26%) 4.23s 4.31s
Emit Time 2.84s (± 0.67%) 2.84s (± 0.68%) +0.00s (+ 0.11%) 2.78s 2.87s
Total Time 8.97s (± 0.38%) 8.96s (± 0.39%) -0.01s (- 0.09%) 8.86s 9.02s
TFS - node (v12.1.0, x64)
Memory used 301,335k (± 0.02%) 301,290k (± 0.02%) -45k (- 0.01%) 301,186k 301,378k
Parse Time 0.92s (± 0.84%) 0.91s (± 0.77%) -0.01s (- 1.30%) 0.89s 0.92s
Bind Time 0.62s (± 1.08%) 0.62s (± 0.76%) +0.01s (+ 0.97%) 0.61s 0.63s
Check Time 3.83s (± 0.46%) 3.82s (± 0.57%) -0.01s (- 0.24%) 3.77s 3.88s
Emit Time 2.94s (± 0.63%) 2.94s (± 0.56%) +0.00s (+ 0.03%) 2.90s 2.98s
Total Time 8.30s (± 0.34%) 8.29s (± 0.35%) -0.01s (- 0.16%) 8.20s 8.34s
Angular - node (v8.9.0, x64)
Memory used 343,931k (± 0.01%) 343,949k (± 0.01%) +19k (+ 0.01%) 343,867k 344,109k
Parse Time 1.93s (± 0.34%) 1.82s (± 0.48%) -0.11s (- 5.69%) 1.81s 1.85s
Bind Time 0.82s (± 0.57%) 0.82s (± 0.58%) -0.00s (- 0.37%) 0.81s 0.83s
Check Time 5.07s (± 0.33%) 5.00s (± 0.49%) -0.06s (- 1.24%) 4.96s 5.06s
Emit Time 6.08s (± 0.57%) 6.06s (± 0.52%) -0.02s (- 0.35%) 5.97s 6.12s
Total Time 13.90s (± 0.37%) 13.70s (± 0.29%) -0.20s (- 1.40%) 13.64s 13.84s
Monaco - node (v8.9.0, x64)
Memory used 363,317k (± 0.01%) 363,087k (± 0.02%) -230k (- 0.06%) 362,977k 363,192k
Parse Time 1.52s (± 0.45%) 1.42s (± 0.42%) -0.10s (- 6.56%) 1.41s 1.44s
Bind Time 0.88s (± 0.39%) 0.89s (± 1.63%) +0.01s (+ 1.48%) 0.86s 0.92s
Check Time 5.28s (± 0.35%) 5.14s (± 1.91%) -0.14s (- 2.65%) 4.99s 5.34s
Emit Time 2.93s (± 0.37%) 3.18s (± 5.88%) +0.25s (+ 8.36%) 2.90s 3.44s
Total Time 10.61s (± 0.14%) 10.64s (± 1.07%) +0.02s (+ 0.23%) 10.41s 10.84s
TFS - node (v8.9.0, x64)
Memory used 317,282k (± 0.02%) 317,158k (± 0.02%) -124k (- 0.04%) 317,096k 317,285k
Parse Time 1.23s (± 0.61%) 1.14s (± 0.46%) -0.09s (- 7.62%) 1.13s 1.15s
Bind Time 0.66s (± 0.74%) 0.67s (± 0.87%) +0.00s (+ 0.45%) 0.65s 0.68s
Check Time 4.47s (± 0.57%) 4.47s (± 0.61%) +0.00s (+ 0.04%) 4.41s 4.53s
Emit Time 3.05s (± 0.66%) 3.23s (± 0.99%) +0.17s (+ 5.63%) 3.12s 3.27s
Total Time 9.42s (± 0.33%) 9.50s (± 0.36%) +0.09s (+ 0.90%) 9.43s 9.60s
Angular - node (v8.9.0, x86)
Memory used 194,854k (± 0.02%) 194,738k (± 0.02%) -116k (- 0.06%) 194,625k 194,846k
Parse Time 1.87s (± 0.46%) 1.78s (± 0.54%) -0.09s (- 4.66%) 1.75s 1.80s
Bind Time 0.95s (± 0.87%) 0.96s (± 0.64%) +0.01s (+ 0.52%) 0.95s 0.97s
Check Time 4.59s (± 0.72%) 4.62s (± 0.41%) +0.03s (+ 0.72%) 4.57s 4.65s
Emit Time 5.85s (± 0.87%) 5.85s (± 1.06%) +0.00s (+ 0.03%) 5.69s 5.99s
Total Time 13.26s (± 0.54%) 13.21s (± 0.59%) -0.05s (- 0.36%) 13.01s 13.35s
Monaco - node (v8.9.0, x86)
Memory used 202,921k (± 0.01%) 202,812k (± 0.02%) -109k (- 0.05%) 202,730k 202,875k
Parse Time 1.59s (± 0.56%) 1.49s (± 0.35%) -0.09s (- 5.99%) 1.48s 1.50s
Bind Time 0.70s (± 0.52%) 0.71s (± 0.63%) +0.01s (+ 1.14%) 0.70s 0.72s
Check Time 4.90s (± 0.44%) 4.89s (± 0.59%) -0.01s (- 0.22%) 4.83s 4.94s
Emit Time 3.19s (± 0.76%) 3.17s (± 0.54%) -0.02s (- 0.63%) 3.13s 3.20s
Total Time 10.38s (± 0.30%) 10.26s (± 0.25%) -0.12s (- 1.15%) 10.23s 10.32s
TFS - node (v8.9.0, x86)
Memory used 178,237k (± 0.02%) 178,128k (± 0.02%) -110k (- 0.06%) 178,063k 178,224k
Parse Time 1.30s (± 0.65%) 1.20s (± 0.70%) -0.10s (- 7.84%) 1.18s 1.22s
Bind Time 0.62s (± 1.42%) 0.63s (± 0.54%) +0.00s (+ 0.64%) 0.62s 0.63s
Check Time 4.28s (± 0.70%) 4.31s (± 0.39%) +0.02s (+ 0.47%) 4.27s 4.34s
Emit Time 2.88s (± 0.45%) 2.87s (± 1.01%) -0.01s (- 0.31%) 2.81s 2.94s
Total Time 9.09s (± 0.41%) 9.00s (± 0.49%) -0.09s (- 0.99%) 8.90s 9.10s
Angular - node (v9.0.0, x64)
Memory used 343,623k (± 0.01%) 343,545k (± 0.02%) -78k (- 0.02%) 343,435k 343,665k
Parse Time 1.68s (± 0.49%) 1.68s (± 0.61%) +0.00s (+ 0.24%) 1.66s 1.71s
Bind Time 0.77s (± 0.84%) 0.76s (± 0.65%) -0.00s (- 0.39%) 0.76s 0.78s
Check Time 4.78s (± 0.51%) 4.78s (± 0.77%) -0.00s (- 0.06%) 4.70s 4.84s
Emit Time 5.69s (± 1.81%) 5.68s (± 1.86%) -0.02s (- 0.35%) 5.39s 5.85s
Total Time 12.92s (± 0.87%) 12.90s (± 0.75%) -0.02s (- 0.16%) 12.63s 13.03s
Monaco - node (v9.0.0, x64)
Memory used 363,060k (± 0.03%) 363,330k (± 0.02%) +270k (+ 0.07%) 363,087k 363,409k
Parse Time 1.29s (± 0.90%) 1.28s (± 0.52%) -0.00s (- 0.23%) 1.27s 1.30s
Bind Time 0.85s (± 0.58%) 0.86s (± 0.68%) +0.00s (+ 0.35%) 0.84s 0.87s
Check Time 4.91s (± 0.45%) 4.88s (± 0.76%) -0.02s (- 0.49%) 4.80s 4.95s
Emit Time 3.36s (± 0.43%) 3.36s (± 0.57%) -0.01s (- 0.27%) 3.32s 3.39s
Total Time 10.41s (± 0.36%) 10.38s (± 0.51%) -0.04s (- 0.34%) 10.28s 10.50s
TFS - node (v9.0.0, x64)
Memory used 317,006k (± 0.02%) 317,163k (± 0.02%) +156k (+ 0.05%) 316,990k 317,345k
Parse Time 1.02s (± 0.51%) 1.02s (± 0.36%) -0.01s (- 0.49%) 1.01s 1.02s
Bind Time 0.61s (± 0.97%) 0.62s (± 0.80%) +0.00s (+ 0.33%) 0.61s 0.63s
Check Time 4.34s (± 0.47%) 4.36s (± 0.56%) +0.02s (+ 0.37%) 4.30s 4.43s
Emit Time 3.20s (± 0.62%) 3.21s (± 0.40%) +0.01s (+ 0.31%) 3.19s 3.24s
Total Time 9.18s (± 0.33%) 9.20s (± 0.30%) +0.02s (+ 0.17%) 9.14s 9.26s
Angular - node (v9.0.0, x86)
Memory used 194,883k (± 0.02%) 194,819k (± 0.03%) -64k (- 0.03%) 194,709k 194,924k
Parse Time 1.60s (± 0.55%) 1.59s (± 0.43%) -0.01s (- 0.88%) 1.57s 1.60s
Bind Time 0.88s (± 0.53%) 0.88s (± 1.10%) +0.00s (+ 0.11%) 0.87s 0.91s
Check Time 4.30s (± 0.69%) 4.28s (± 0.69%) -0.02s (- 0.51%) 4.22s 4.34s
Emit Time 5.53s (± 0.99%) 5.50s (± 0.69%) -0.03s (- 0.52%) 5.40s 5.57s
Total Time 12.31s (± 0.59%) 12.24s (± 0.40%) -0.07s (- 0.53%) 12.12s 12.35s
Monaco - node (v9.0.0, x86)
Memory used 202,929k (± 0.02%) 202,897k (± 0.02%) -32k (- 0.02%) 202,809k 203,028k
Parse Time 1.32s (± 0.85%) 1.31s (± 0.72%) -0.00s (- 0.38%) 1.30s 1.34s
Bind Time 0.64s (± 0.62%) 0.64s (± 1.01%) -0.00s (- 0.47%) 0.63s 0.65s
Check Time 4.70s (± 0.56%) 4.71s (± 0.64%) +0.00s (+ 0.09%) 4.64s 4.79s
Emit Time 3.09s (± 0.28%) 3.11s (± 0.67%) +0.02s (+ 0.65%) 3.06s 3.16s
Total Time 9.75s (± 0.32%) 9.77s (± 0.44%) +0.02s (+ 0.16%) 9.70s 9.88s
TFS - node (v9.0.0, x86)
Memory used 178,233k (± 0.01%) 178,233k (± 0.02%) -1k (- 0.00%) 178,166k 178,365k
Parse Time 1.04s (± 0.72%) 1.03s (± 0.82%) -0.01s (- 0.77%) 1.01s 1.05s
Bind Time 0.57s (± 1.19%) 0.58s (± 1.31%) +0.00s (+ 0.35%) 0.56s 0.60s
Check Time 4.12s (± 0.51%) 4.14s (± 0.76%) +0.01s (+ 0.32%) 4.07s 4.20s
Emit Time 2.79s (± 1.18%) 2.79s (± 1.21%) -0.00s (- 0.04%) 2.73s 2.90s
Total Time 8.53s (± 0.53%) 8.53s (± 0.76%) +0.01s (+ 0.09%) 8.40s 8.71s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-142-generic
Architecturex64
Available Memory16 GB
Available Memory1 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
  • node (v9.0.0, x64)
  • node (v9.0.0, x86)
Scenarios
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Angular - node (v9.0.0, x64)
  • Angular - node (v9.0.0, x86)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • Monaco - node (v9.0.0, x64)
  • Monaco - node (v9.0.0, x86)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
  • TFS - node (v9.0.0, x64)
  • TFS - node (v9.0.0, x86)
Benchmark Name Iterations
Current 32691 10
Baseline master 10

@weswigham
Copy link
Copy Markdown
Member

Benchmark failed because of Monaco - node (v8.9.0, x64) emit time? Probably nothing?

@rbuckton
Copy link
Copy Markdown
Contributor Author

rbuckton commented Aug 3, 2019

Yeah, Bind time is such a small portion of total time that the slightest blip can trigger the check to fail. I need to change the benchmark to only fail if total time exceeds a threshold.

@rbuckton rbuckton merged commit 3c690f1 into master Aug 3, 2019
@rbuckton rbuckton deleted the removeExcessAllocationsInChecker branch August 3, 2019 20:09
@microsoft microsoft locked as resolved and limited conversation to collaborators Oct 21, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants