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

Enable caching for control flow paths that precede loops #33510

Merged
merged 3 commits into from
Sep 20, 2019

Conversation

ahejlsberg
Copy link
Member

This PR tweaks our control flow analysis logic for loops to ensure that caching of assignment nodes occurs in control flow paths that precede loops.

@ahejlsberg
Copy link
Member Author

@typescript-bot perf test this
@typescript-bot test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Sep 19, 2019

Heya @ahejlsberg, I've started to run the perf test suite on this PR at 7b77b49. 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

typescript-bot commented Sep 19, 2019

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

@typescript-bot
Copy link
Collaborator

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

Here they are:

Comparison Report - master..33510

Metric master 33510 Delta Best Worst
Angular - node (v12.1.0, x64)
Memory used 331,277k (± 0.02%) 331,732k (± 0.02%) +455k (+ 0.14%) 331,608k 331,826k
Parse Time 1.55s (± 0.61%) 1.56s (± 0.56%) +0.01s (+ 0.64%) 1.54s 1.58s
Bind Time 0.78s (± 0.43%) 0.79s (± 0.76%) +0.01s (+ 0.77%) 0.77s 0.80s
Check Time 4.25s (± 0.33%) 4.30s (± 0.61%) +0.05s (+ 1.15%) 4.24s 4.37s
Emit Time 5.27s (± 1.09%) 5.27s (± 0.93%) +0.00s (+ 0.08%) 5.20s 5.43s
Total Time 11.85s (± 0.51%) 11.92s (± 0.50%) +0.07s (+ 0.57%) 11.82s 12.10s
Monaco - node (v12.1.0, x64)
Memory used 345,950k (± 0.02%) 346,079k (± 0.02%) +130k (+ 0.04%) 345,940k 346,235k
Parse Time 1.23s (± 0.41%) 1.23s (± 0.57%) +0.00s (+ 0.33%) 1.22s 1.25s
Bind Time 0.67s (± 0.66%) 0.68s (± 0.69%) +0.01s (+ 1.19%) 0.67s 0.69s
Check Time 4.25s (± 0.33%) 4.26s (± 0.67%) +0.01s (+ 0.31%) 4.22s 4.32s
Emit Time 2.86s (± 0.72%) 2.85s (± 1.16%) -0.01s (- 0.31%) 2.80s 2.97s
Total Time 9.01s (± 0.17%) 9.02s (± 0.35%) +0.02s (+ 0.19%) 8.95s 9.09s
TFS - node (v12.1.0, x64)
Memory used 301,448k (± 0.02%) 301,494k (± 0.02%) +46k (+ 0.02%) 301,381k 301,626k
Parse Time 0.95s (± 0.65%) 0.96s (± 0.73%) +0.01s (+ 1.05%) 0.94s 0.97s
Bind Time 0.62s (± 0.48%) 0.63s (± 1.10%) +0.00s (+ 0.48%) 0.61s 0.64s
Check Time 3.85s (± 0.46%) 3.85s (± 0.31%) +0.00s (+ 0.10%) 3.82s 3.88s
Emit Time 2.96s (± 1.32%) 2.96s (± 0.87%) -0.01s (- 0.24%) 2.92s 3.05s
Total Time 8.38s (± 0.44%) 8.39s (± 0.47%) +0.01s (+ 0.14%) 8.35s 8.54s
Angular - node (v8.9.0, x64)
Memory used 350,147k (± 0.02%) 350,621k (± 0.02%) +474k (+ 0.14%) 350,503k 350,827k
Parse Time 2.10s (± 0.47%) 2.09s (± 0.48%) -0.01s (- 0.38%) 2.07s 2.12s
Bind Time 0.83s (± 0.48%) 0.84s (± 0.53%) +0.01s (+ 1.09%) 0.83s 0.85s
Check Time 5.10s (± 0.43%) 5.12s (± 0.64%) +0.02s (+ 0.31%) 5.06s 5.20s
Emit Time 5.98s (± 0.91%) 5.96s (± 2.14%) -0.03s (- 0.48%) 5.50s 6.19s
Total Time 14.02s (± 0.41%) 14.00s (± 0.99%) -0.02s (- 0.11%) 13.52s 14.24s
Monaco - node (v8.9.0, x64)
Memory used 363,726k (± 0.01%) 363,844k (± 0.02%) +117k (+ 0.03%) 363,776k 363,992k
Parse Time 1.56s (± 0.48%) 1.56s (± 0.62%) -0.00s (- 0.19%) 1.54s 1.59s
Bind Time 0.88s (± 0.70%) 0.89s (± 0.67%) +0.01s (+ 0.80%) 0.88s 0.90s
Check Time 5.15s (± 1.43%) 5.08s (± 1.23%) -0.07s (- 1.38%) 4.94s 5.25s
Emit Time 3.05s (± 4.26%) 3.22s (± 4.37%) +0.17s (+ 5.60%) 2.92s 3.48s
Total Time 10.64s (± 0.62%) 10.75s (± 0.96%) +0.10s (+ 0.96%) 10.54s 10.97s
TFS - node (v8.9.0, x64)
Memory used 317,662k (± 0.02%) 317,730k (± 0.01%) +67k (+ 0.02%) 317,638k 317,793k
Parse Time 1.26s (± 0.60%) 1.26s (± 0.46%) +0.00s (+ 0.08%) 1.25s 1.27s
Bind Time 0.68s (± 4.63%) 0.71s (± 5.63%) +0.03s (+ 3.94%) 0.66s 0.79s
Check Time 4.44s (± 1.09%) 4.41s (± 1.40%) -0.04s (- 0.79%) 4.27s 4.50s
Emit Time 3.06s (± 0.38%) 3.08s (± 0.48%) +0.02s (+ 0.69%) 3.05s 3.12s
Total Time 9.45s (± 0.27%) 9.46s (± 0.38%) +0.01s (+ 0.11%) 9.37s 9.56s
Angular - node (v8.9.0, x86)
Memory used 198,202k (± 0.02%) 198,428k (± 0.03%) +226k (+ 0.11%) 198,319k 198,579k
Parse Time 2.04s (± 0.57%) 2.03s (± 0.37%) -0.00s (- 0.25%) 2.01s 2.05s
Bind Time 0.95s (± 0.38%) 0.95s (± 0.49%) +0.00s (+ 0.42%) 0.94s 0.96s
Check Time 4.64s (± 0.41%) 4.64s (± 0.51%) +0.00s (+ 0.06%) 4.59s 4.70s
Emit Time 5.69s (± 1.37%) 5.70s (± 0.96%) +0.01s (+ 0.12%) 5.61s 5.85s
Total Time 13.31s (± 0.63%) 13.32s (± 0.52%) +0.01s (+ 0.08%) 13.20s 13.49s
Monaco - node (v8.9.0, x86)
Memory used 203,245k (± 0.02%) 203,309k (± 0.02%) +65k (+ 0.03%) 203,227k 203,392k
Parse Time 1.61s (± 0.68%) 1.61s (± 0.73%) -0.00s (- 0.12%) 1.59s 1.64s
Bind Time 0.72s (± 0.66%) 0.72s (± 0.51%) -0.00s (- 0.14%) 0.71s 0.72s
Check Time 4.89s (± 0.41%) 4.86s (± 0.48%) -0.03s (- 0.59%) 4.81s 4.91s
Emit Time 3.19s (± 0.76%) 3.17s (± 0.53%) -0.02s (- 0.66%) 3.13s 3.22s
Total Time 10.41s (± 0.43%) 10.36s (± 0.30%) -0.05s (- 0.50%) 10.28s 10.44s
TFS - node (v8.9.0, x86)
Memory used 178,569k (± 0.01%) 178,602k (± 0.02%) +33k (+ 0.02%) 178,544k 178,655k
Parse Time 1.31s (± 0.68%) 1.31s (± 0.76%) -0.00s (- 0.38%) 1.29s 1.33s
Bind Time 0.64s (± 1.05%) 0.64s (± 0.57%) -0.00s (- 0.16%) 0.63s 0.64s
Check Time 4.29s (± 0.76%) 4.26s (± 0.57%) -0.02s (- 0.56%) 4.22s 4.33s
Emit Time 2.86s (± 0.61%) 2.84s (± 0.91%) -0.02s (- 0.73%) 2.78s 2.90s
Total Time 9.10s (± 0.40%) 9.05s (± 0.27%) -0.05s (- 0.53%) 8.99s 9.10s
Angular - node (v9.0.0, x64)
Memory used 349,793k (± 0.01%) 350,235k (± 0.01%) +442k (+ 0.13%) 350,131k 350,324k
Parse Time 1.82s (± 0.33%) 1.82s (± 0.52%) +0.00s (+ 0.22%) 1.80s 1.84s
Bind Time 0.77s (± 0.62%) 0.78s (± 0.79%) +0.01s (+ 0.78%) 0.76s 0.79s
Check Time 4.84s (± 0.43%) 4.83s (± 0.32%) -0.01s (- 0.21%) 4.80s 4.86s
Emit Time 5.74s (± 1.28%) 5.71s (± 1.54%) -0.03s (- 0.52%) 5.54s 5.90s
Total Time 13.17s (± 0.58%) 13.14s (± 0.64%) -0.03s (- 0.23%) 12.99s 13.32s
Monaco - node (v9.0.0, x64)
Memory used 363,515k (± 0.02%) 363,552k (± 0.01%) +37k (+ 0.01%) 363,467k 363,658k
Parse Time 1.32s (± 0.52%) 1.32s (± 0.71%) +0.00s (+ 0.30%) 1.30s 1.35s
Bind Time 0.82s (± 0.89%) 0.84s (± 1.12%) +0.02s (+ 2.19%) 0.82s 0.86s
Check Time 5.09s (± 1.15%) 4.97s (± 2.03%) -0.12s (- 2.34%) 4.86s 5.24s
Emit Time 2.97s (± 4.82%) 3.22s (± 5.07%) +0.25s (+ 8.50%) 2.88s 3.38s
Total Time 10.19s (± 1.02%) 10.35s (± 0.85%) +0.16s (+ 1.52%) 10.11s 10.51s
TFS - node (v9.0.0, x64)
Memory used 317,477k (± 0.01%) 317,522k (± 0.02%) +45k (+ 0.01%) 317,430k 317,642k
Parse Time 1.04s (± 0.70%) 1.04s (± 0.32%) +0.00s (+ 0.19%) 1.03s 1.05s
Bind Time 0.62s (± 0.36%) 0.62s (± 0.76%) +0.00s (+ 0.16%) 0.61s 0.63s
Check Time 4.35s (± 0.37%) 4.38s (± 0.68%) +0.02s (+ 0.48%) 4.28s 4.42s
Emit Time 3.19s (± 0.39%) 3.18s (± 0.55%) -0.01s (- 0.31%) 3.13s 3.22s
Total Time 9.21s (± 0.26%) 9.22s (± 0.43%) +0.01s (+ 0.09%) 9.13s 9.31s
Angular - node (v9.0.0, x86)
Memory used 198,395k (± 0.03%) 198,544k (± 0.02%) +148k (+ 0.07%) 198,492k 198,683k
Parse Time 1.72s (± 0.51%) 1.72s (± 0.44%) +0.00s (+ 0.06%) 1.71s 1.75s
Bind Time 0.90s (± 1.04%) 0.90s (± 0.68%) +0.00s (+ 0.11%) 0.89s 0.91s
Check Time 4.33s (± 0.54%) 4.35s (± 0.57%) +0.02s (+ 0.51%) 4.30s 4.41s
Emit Time 5.49s (± 0.55%) 5.54s (± 1.13%) +0.05s (+ 0.91%) 5.44s 5.68s
Total Time 12.44s (± 0.40%) 12.51s (± 0.53%) +0.08s (+ 0.63%) 12.42s 12.70s
Monaco - node (v9.0.0, x86)
Memory used 203,360k (± 0.01%) 203,365k (± 0.02%) +5k (+ 0.00%) 203,244k 203,464k
Parse Time 1.34s (± 0.76%) 1.34s (± 0.43%) -0.00s (- 0.15%) 1.33s 1.35s
Bind Time 0.65s (± 0.77%) 0.64s (± 0.62%) -0.00s (- 0.62%) 0.63s 0.65s
Check Time 4.69s (± 0.47%) 4.70s (± 0.61%) +0.01s (+ 0.19%) 4.65s 4.76s
Emit Time 3.08s (± 0.61%) 3.10s (± 0.87%) +0.02s (+ 0.62%) 3.05s 3.18s
Total Time 9.75s (± 0.32%) 9.76s (± 0.35%) +0.02s (+ 0.17%) 9.70s 9.83s
TFS - node (v9.0.0, x86)
Memory used 178,614k (± 0.02%) 178,702k (± 0.03%) +89k (+ 0.05%) 178,568k 178,803k
Parse Time 1.07s (± 1.05%) 1.06s (± 1.06%) -0.00s (- 0.38%) 1.04s 1.09s
Bind Time 0.57s (± 0.52%) 0.58s (± 1.28%) +0.01s (+ 1.40%) 0.57s 0.60s
Check Time 4.14s (± 0.62%) 4.14s (± 0.37%) -0.01s (- 0.17%) 4.09s 4.17s
Emit Time 2.77s (± 1.05%) 2.78s (± 0.55%) +0.00s (+ 0.07%) 2.75s 2.82s
Total Time 8.56s (± 0.65%) 8.56s (± 0.34%) -0.00s (- 0.01%) 8.51s 8.63s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-161-generic
Architecturex64
Available Memory16 GB
Available Memory9 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 33510 10
Baseline master 10

Copy link
Member

@weswigham weswigham left a comment

Choose a reason for hiding this comment

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

It looks fine, but why's the perf a problem? Is there less caching going on now? Too many more loop cache entries causing memory chrun?

@ahejlsberg
Copy link
Member Author

@typescript-bot perf test this
@typescript-bot test this

@typescript-bot
Copy link
Collaborator

typescript-bot commented Sep 20, 2019

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

@typescript-bot
Copy link
Collaborator

typescript-bot commented Sep 20, 2019

Heya @ahejlsberg, I've started to run the perf test suite on this PR at d4ad0d5. 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

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

Here they are:

Comparison Report - master..33510

Metric master 33510 Delta Best Worst
Angular - node (v12.1.0, x64)
Memory used 331,199k (± 0.08%) 330,165k (± 0.02%) -1,033k (- 0.31%) 330,042k 330,338k
Parse Time 1.56s (± 0.60%) 1.56s (± 0.40%) -0.00s (- 0.13%) 1.55s 1.58s
Bind Time 0.78s (± 0.83%) 0.78s (± 0.60%) -0.00s (- 0.26%) 0.77s 0.79s
Check Time 4.29s (± 0.77%) 4.22s (± 0.71%) -0.07s (- 1.61%) 4.16s 4.30s
Emit Time 5.26s (± 1.21%) 5.24s (± 0.71%) -0.02s (- 0.44%) 5.18s 5.34s
Total Time 11.89s (± 0.76%) 11.80s (± 0.26%) -0.10s (- 0.81%) 11.75s 11.89s
Monaco - node (v12.1.0, x64)
Memory used 345,963k (± 0.02%) 344,590k (± 0.02%) -1,373k (- 0.40%) 344,463k 344,686k
Parse Time 1.23s (± 0.74%) 1.22s (± 0.39%) -0.01s (- 0.49%) 1.21s 1.23s
Bind Time 0.67s (± 0.60%) 0.67s (± 0.50%) +0.00s (+ 0.15%) 0.66s 0.68s
Check Time 4.27s (± 0.63%) 4.20s (± 0.35%) -0.07s (- 1.69%) 4.18s 4.24s
Emit Time 2.85s (± 0.63%) 2.84s (± 0.52%) -0.02s (- 0.56%) 2.79s 2.87s
Total Time 9.02s (± 0.43%) 8.94s (± 0.29%) -0.09s (- 0.99%) 8.87s 9.00s
TFS - node (v12.1.0, x64)
Memory used 301,408k (± 0.02%) 300,008k (± 0.02%) -1,400k (- 0.46%) 299,898k 300,162k
Parse Time 0.95s (± 0.84%) 0.96s (± 1.05%) +0.00s (+ 0.42%) 0.93s 0.97s
Bind Time 0.62s (± 0.79%) 0.62s (± 0.77%) -0.01s (- 1.12%) 0.61s 0.63s
Check Time 3.86s (± 0.54%) 3.76s (± 0.38%) -0.10s (- 2.59%) 3.73s 3.80s
Emit Time 2.98s (± 0.72%) 2.94s (± 0.83%) -0.03s (- 1.14%) 2.89s 3.00s
Total Time 8.41s (± 0.34%) 8.28s (± 0.36%) -0.14s (- 1.60%) 8.23s 8.34s
Angular - node (v8.9.0, x64)
Memory used 350,203k (± 0.01%) 348,736k (± 0.01%) -1,466k (- 0.42%) 348,619k 348,798k
Parse Time 2.09s (± 0.43%) 2.10s (± 0.36%) +0.01s (+ 0.29%) 2.08s 2.11s
Bind Time 0.83s (± 0.44%) 0.84s (± 0.84%) +0.00s (+ 0.60%) 0.82s 0.85s
Check Time 5.12s (± 0.77%) 5.04s (± 0.66%) -0.08s (- 1.62%) 4.98s 5.12s
Emit Time 6.04s (± 1.37%) 6.06s (± 1.15%) +0.02s (+ 0.31%) 5.95s 6.20s
Total Time 14.08s (± 0.56%) 14.03s (± 0.46%) -0.05s (- 0.38%) 13.87s 14.14s
Monaco - node (v8.9.0, x64)
Memory used 363,744k (± 0.01%) 362,153k (± 0.02%) -1,590k (- 0.44%) 362,058k 362,345k
Parse Time 1.56s (± 0.45%) 1.56s (± 0.44%) -0.00s (- 0.19%) 1.54s 1.57s
Bind Time 0.89s (± 0.75%) 0.89s (± 0.82%) -0.00s (- 0.22%) 0.87s 0.90s
Check Time 5.04s (± 1.16%) 5.02s (± 1.48%) -0.02s (- 0.34%) 4.92s 5.24s
Emit Time 3.25s (± 3.50%) 3.25s (± 3.50%) +0.00s (+ 0.09%) 2.94s 3.37s
Total Time 10.73s (± 0.68%) 10.72s (± 0.54%) -0.02s (- 0.14%) 10.57s 10.86s
TFS - node (v8.9.0, x64)
Memory used 317,720k (± 0.02%) 316,079k (± 0.01%) -1,641k (- 0.52%) 315,975k 316,166k
Parse Time 1.26s (± 0.46%) 1.25s (± 0.47%) -0.01s (- 0.71%) 1.24s 1.27s
Bind Time 0.72s (± 6.47%) 0.67s (± 0.56%) -0.05s (- 6.99%) 0.66s 0.67s
Check Time 4.43s (± 1.29%) 4.42s (± 0.57%) -0.00s (- 0.07%) 4.38s 4.50s
Emit Time 3.05s (± 1.12%) 3.05s (± 0.80%) -0.00s (- 0.10%) 2.99s 3.09s
Total Time 9.46s (± 0.62%) 9.40s (± 0.42%) -0.06s (- 0.63%) 9.30s 9.48s
Angular - node (v8.9.0, x86)
Memory used 198,216k (± 0.02%) 197,465k (± 0.02%) -751k (- 0.38%) 197,390k 197,564k
Parse Time 2.04s (± 0.88%) 2.04s (± 0.65%) -0.00s (- 0.20%) 2.01s 2.07s
Bind Time 0.96s (± 0.71%) 0.95s (± 0.97%) -0.00s (- 0.42%) 0.94s 0.98s
Check Time 4.66s (± 0.60%) 4.58s (± 0.61%) -0.08s (- 1.67%) 4.54s 4.65s
Emit Time 5.71s (± 1.72%) 5.70s (± 1.13%) -0.01s (- 0.21%) 5.61s 5.91s
Total Time 13.37s (± 0.93%) 13.27s (± 0.43%) -0.10s (- 0.71%) 13.19s 13.43s
Monaco - node (v8.9.0, x86)
Memory used 203,273k (± 0.02%) 202,402k (± 0.02%) -871k (- 0.43%) 202,303k 202,499k
Parse Time 1.62s (± 0.93%) 1.61s (± 0.58%) -0.01s (- 0.56%) 1.59s 1.63s
Bind Time 0.72s (± 0.62%) 0.72s (± 0.86%) +0.00s (+ 0.42%) 0.71s 0.74s
Check Time 4.88s (± 0.30%) 4.81s (± 0.41%) -0.07s (- 1.52%) 4.76s 4.84s
Emit Time 3.17s (± 0.42%) 3.15s (± 0.60%) -0.02s (- 0.50%) 3.13s 3.21s
Total Time 10.39s (± 0.29%) 10.30s (± 0.20%) -0.09s (- 0.90%) 10.26s 10.34s
TFS - node (v8.9.0, x86)
Memory used 178,573k (± 0.02%) 177,700k (± 0.02%) -873k (- 0.49%) 177,617k 177,785k
Parse Time 1.31s (± 0.75%) 1.31s (± 0.92%) +0.00s (+ 0.15%) 1.29s 1.34s
Bind Time 0.64s (± 1.51%) 0.64s (± 0.75%) -0.00s (- 0.62%) 0.63s 0.65s
Check Time 4.30s (± 0.54%) 4.19s (± 0.47%) -0.11s (- 2.53%) 4.15s 4.23s
Emit Time 2.85s (± 1.07%) 2.84s (± 0.87%) -0.01s (- 0.28%) 2.76s 2.89s
Total Time 9.10s (± 0.42%) 8.98s (± 0.47%) -0.12s (- 1.30%) 8.88s 9.05s
Angular - node (v9.0.0, x64)
Memory used 349,775k (± 0.01%) 348,386k (± 0.02%) -1,389k (- 0.40%) 348,239k 348,575k
Parse Time 1.83s (± 0.54%) 1.82s (± 0.45%) -0.01s (- 0.66%) 1.80s 1.84s
Bind Time 0.78s (± 0.48%) 0.78s (± 0.47%) +0.00s (+ 0.13%) 0.77s 0.78s
Check Time 4.87s (± 0.56%) 4.80s (± 0.59%) -0.07s (- 1.40%) 4.75s 4.85s
Emit Time 5.78s (± 0.55%) 5.72s (± 1.41%) -0.06s (- 0.99%) 5.52s 5.86s
Total Time 13.25s (± 0.31%) 13.12s (± 0.74%) -0.14s (- 1.03%) 12.87s 13.29s
Monaco - node (v9.0.0, x64)
Memory used 363,498k (± 0.02%) 361,855k (± 0.01%) -1,644k (- 0.45%) 361,731k 361,982k
Parse Time 1.31s (± 0.44%) 1.32s (± 0.53%) +0.01s (+ 0.69%) 1.30s 1.33s
Bind Time 0.83s (± 1.62%) 0.84s (± 1.13%) +0.01s (+ 0.72%) 0.82s 0.85s
Check Time 5.02s (± 1.68%) 4.97s (± 1.93%) -0.05s (- 0.96%) 4.81s 5.15s
Emit Time 3.11s (± 5.66%) 3.11s (± 5.70%) -0.00s (- 0.06%) 2.84s 3.38s
Total Time 10.28s (± 1.09%) 10.24s (± 1.04%) -0.04s (- 0.36%) 10.02s 10.40s
TFS - node (v9.0.0, x64)
Memory used 317,519k (± 0.01%) 315,840k (± 0.01%) -1,679k (- 0.53%) 315,762k 315,939k
Parse Time 1.04s (± 0.55%) 1.04s (± 0.43%) -0.00s (- 0.19%) 1.03s 1.05s
Bind Time 0.62s (± 0.76%) 0.62s (± 0.54%) 0.00s ( 0.00%) 0.61s 0.63s
Check Time 4.37s (± 0.44%) 4.30s (± 0.46%) -0.06s (- 1.47%) 4.26s 4.35s
Emit Time 3.20s (± 0.45%) 3.19s (± 0.46%) -0.01s (- 0.28%) 3.15s 3.22s
Total Time 9.23s (± 0.30%) 9.15s (± 0.36%) -0.08s (- 0.85%) 9.08s 9.21s
Angular - node (v9.0.0, x86)
Memory used 198,335k (± 0.04%) 197,594k (± 0.03%) -741k (- 0.37%) 197,431k 197,749k
Parse Time 1.73s (± 0.52%) 1.74s (± 0.84%) +0.01s (+ 0.69%) 1.71s 1.78s
Bind Time 0.90s (± 0.41%) 0.90s (± 0.74%) +0.00s (+ 0.45%) 0.89s 0.92s
Check Time 4.34s (± 0.71%) 4.29s (± 0.61%) -0.05s (- 1.24%) 4.23s 4.36s
Emit Time 5.49s (± 0.58%) 5.51s (± 0.70%) +0.02s (+ 0.38%) 5.42s 5.61s
Total Time 12.46s (± 0.38%) 12.44s (± 0.44%) -0.02s (- 0.13%) 12.31s 12.57s
Monaco - node (v9.0.0, x86)
Memory used 203,346k (± 0.02%) 202,471k (± 0.03%) -876k (- 0.43%) 202,329k 202,634k
Parse Time 1.35s (± 0.44%) 1.34s (± 0.61%) -0.00s (- 0.22%) 1.32s 1.36s
Bind Time 0.64s (± 0.90%) 0.64s (± 0.62%) +0.00s (+ 0.16%) 0.63s 0.65s
Check Time 4.69s (± 0.35%) 4.65s (± 0.50%) -0.05s (- 1.06%) 4.60s 4.71s
Emit Time 3.09s (± 0.92%) 3.10s (± 0.67%) +0.01s (+ 0.26%) 3.06s 3.14s
Total Time 9.77s (± 0.33%) 9.73s (± 0.37%) -0.04s (- 0.43%) 9.67s 9.80s
TFS - node (v9.0.0, x86)
Memory used 178,633k (± 0.02%) 177,727k (± 0.02%) -906k (- 0.51%) 177,652k 177,803k
Parse Time 1.06s (± 0.69%) 1.07s (± 0.88%) +0.01s (+ 0.75%) 1.04s 1.08s
Bind Time 0.58s (± 0.96%) 0.58s (± 0.90%) +0.00s (+ 0.17%) 0.57s 0.59s
Check Time 4.15s (± 0.65%) 4.06s (± 0.99%) -0.09s (- 2.17%) 3.98s 4.18s
Emit Time 2.77s (± 0.62%) 2.77s (± 1.09%) -0.00s (- 0.18%) 2.68s 2.83s
Total Time 8.57s (± 0.43%) 8.49s (± 0.76%) -0.08s (- 0.96%) 8.39s 8.65s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-161-generic
Architecturex64
Available Memory16 GB
Available Memory9 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 33510 10
Baseline master 10

@ahejlsberg
Copy link
Member Author

Optimized our flow assignment caching scheme for an overall ~2% reduction in check time. Now, we only cache when resolution of the cached value involves a recursive invocation of getFlowTypeOfReference (because only then is the operation potentially expensive). Also, by moving the caching logic into getInitialOrAssignedType we no longer need to compute and store a cache key.

@@ -16990,6 +16984,7 @@ namespace ts {
if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & TypeFlags.Narrowable)) {
return declaredType;
}
flowInvocationCount++;
Copy link
Member

Choose a reason for hiding this comment

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

Nothing ever decrements this - that intentional?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, it's just a monotonically increasing count that allows us to detect if the function was (recursively) invoked.

@ahejlsberg ahejlsberg merged commit 10e3f11 into master Sep 20, 2019
@ahejlsberg ahejlsberg deleted the controlFlowLoopCaching branch September 20, 2019 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants