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

Perform bounds-checking on string input in scanner #58362

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

rbuckton
Copy link
Member

@rbuckton rbuckton commented Apr 29, 2024

Following on to #58339, this performs the same bounds checking throughout most of the rest of the scanner.

This also adds the local/bounds-check lint rule to warn if future changes incorrectly perform unchecked calls to charCodeAt or codePointAt on text. The lint rule performs some rudimentary analysis to determine whether a call to codePointUnchecked or charCodeUnchecked follows a valid boundary check to cut down on excess // eslint-disable-line comments for cases like these:

while (pos < end) {
  const ch = charCodeUnchecked(pos); // ok, checked on preceding line
  ...
}
if (pos + 1 < end && charCodeUnchecked(pos + 1) === CharacterCodes._) ...

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

@typescript-bot perf test

@typescript-bot
Copy link
Collaborator

typescript-bot commented Apr 29, 2024

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test ✅ Started ❌ Results

@rbuckton rbuckton marked this pull request as ready for review April 29, 2024 19:22
@typescript-bot
Copy link
Collaborator

@rbuckton, the perf run you requested failed. You can check the log here.

1 similar comment
@typescript-bot
Copy link
Collaborator

@rbuckton, the perf run you requested failed. You can check the log here.

@jakebailey
Copy link
Member

@typescript-bot perf test

@typescript-bot
Copy link
Collaborator

typescript-bot commented Apr 29, 2024

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
perf test ✅ Started 👀 Results

@typescript-bot
Copy link
Collaborator

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

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - node (v18.15.0, x64)
Errors 30 30 ~ ~ ~ p=1.000 n=6
Symbols 62,154 62,154 ~ ~ ~ p=1.000 n=6
Types 50,273 50,273 ~ ~ ~ p=1.000 n=6
Memory used 193,392k (± 0.93%) 192,225k (± 0.07%) ~ 192,128k 192,499k p=0.575 n=6
Parse Time 1.55s (± 1.93%) 1.56s (± 0.91%) ~ 1.54s 1.58s p=0.683 n=6
Bind Time 0.86s (± 0.94%) 0.87s (± 1.03%) ~ 0.86s 0.88s p=0.176 n=6
Check Time 11.32s (± 0.43%) 11.35s (± 0.36%) ~ 11.32s 11.43s p=0.935 n=6
Emit Time 3.12s (± 0.26%) 3.13s (± 0.37%) ~ 3.12s 3.15s p=0.271 n=6
Total Time 16.87s (± 0.49%) 16.91s (± 0.23%) ~ 16.88s 16.99s p=0.260 n=6
angular-1 - node (v18.15.0, x64)
Errors 5 5 ~ ~ ~ p=1.000 n=6
Symbols 945,172 945,172 ~ ~ ~ p=1.000 n=6
Types 408,068 408,068 ~ ~ ~ p=1.000 n=6
Memory used 1,222,007k (± 0.00%) 1,222,031k (± 0.00%) ~ 1,221,973k 1,222,099k p=0.471 n=6
Parse Time 8.08s (± 0.33%) 8.11s (± 0.71%) ~ 8.06s 8.22s p=0.293 n=6
Bind Time 2.24s (± 0.54%) 2.25s (± 0.73%) ~ 2.22s 2.26s p=0.323 n=6
Check Time 36.62s (± 0.35%) 36.59s (± 0.29%) ~ 36.41s 36.67s p=0.809 n=6
Emit Time 17.36s (± 0.91%) 17.34s (± 0.75%) ~ 17.09s 17.44s p=0.748 n=6
Total Time 64.30s (± 0.31%) 64.28s (± 0.32%) ~ 64.07s 64.58s p=0.936 n=6
mui-docs - node (v18.15.0, x64)
Errors 5 5 ~ ~ ~ p=1.000 n=6
Symbols 1,955,870 1,955,870 ~ ~ ~ p=1.000 n=6
Types 676,290 676,290 ~ ~ ~ p=1.000 n=6
Memory used 1,754,501k (± 0.00%) 1,754,537k (± 0.00%) ~ 1,754,508k 1,754,576k p=0.093 n=6
Parse Time 9.79s (± 0.45%) 9.84s (± 0.29%) ~ 9.81s 9.89s p=0.064 n=6
Bind Time 3.34s (± 0.62%) 3.35s (± 0.65%) ~ 3.32s 3.37s p=0.624 n=6
Check Time 82.19s (± 0.60%) 82.18s (± 0.44%) ~ 81.68s 82.67s p=1.000 n=6
Emit Time 0.20s (± 2.62%) 0.20s (± 2.06%) ~ 0.19s 0.20s p=0.595 n=6
Total Time 95.50s (± 0.55%) 95.56s (± 0.38%) ~ 95.02s 96.04s p=0.810 n=6
self-build-src - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,215,708 1,215,710 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 257,646 257,646 ~ ~ ~ p=1.000 n=6
Memory used 2,382,660k (± 6.03%) 2,324,303k (± 0.03%) ~ 2,323,630k 2,325,014k p=0.689 n=6
Parse Time 7.41s (± 0.90%) 7.46s (± 0.46%) ~ 7.40s 7.50s p=0.173 n=6
Bind Time 2.74s (± 0.84%) 2.74s (± 0.78%) ~ 2.72s 2.78s p=0.871 n=6
Check Time 49.45s (± 1.04%) 49.37s (± 0.26%) ~ 49.19s 49.55s p=0.378 n=6
Emit Time 3.86s (± 1.59%) 3.88s (± 1.59%) ~ 3.78s 3.96s p=0.575 n=6
Total Time 63.50s (± 0.81%) 63.46s (± 0.14%) ~ 63.33s 63.57s p=0.810 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,215,708 1,215,710 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 257,646 257,646 ~ ~ ~ p=1.000 n=6
Memory used 2,398,508k (± 0.02%) 2,398,813k (± 0.02%) ~ 2,398,311k 2,399,276k p=0.298 n=6
Parse Time 6.20s (± 1.29%) 6.22s (± 0.88%) ~ 6.15s 6.29s p=0.574 n=6
Bind Time 2.00s (± 1.12%) 2.00s (± 1.13%) ~ 1.98s 2.04s p=1.000 n=6
Check Time 40.45s (± 0.19%) 40.47s (± 0.17%) ~ 40.41s 40.60s p=0.810 n=6
Emit Time 3.18s (± 3.16%) 3.12s (± 1.96%) ~ 3.04s 3.19s p=0.470 n=6
Total Time 51.85s (± 0.42%) 51.83s (± 0.23%) ~ 51.61s 51.94s p=0.936 n=6
self-compiler - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 256,204 256,206 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 103,653 103,653 ~ ~ ~ p=1.000 n=6
Memory used 424,297k (± 0.01%) 424,263k (± 0.01%) ~ 424,219k 424,332k p=0.128 n=6
Parse Time 4.17s (± 0.71%) 4.20s (± 0.85%) ~ 4.14s 4.24s p=0.053 n=6
Bind Time 1.59s (± 1.40%) 1.61s (± 1.11%) ~ 1.59s 1.64s p=0.224 n=6
Check Time 22.60s (± 0.35%) 22.66s (± 0.23%) ~ 22.56s 22.71s p=0.149 n=6
Emit Time 1.71s (± 1.32%) 1.73s (± 2.13%) ~ 1.67s 1.78s p=0.421 n=6
Total Time 30.07s (± 0.37%) 30.20s (± 0.23%) ~ 30.13s 30.30s p=0.065 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors 35 35 ~ ~ ~ p=1.000 n=6
Symbols 224,824 224,824 ~ ~ ~ p=1.000 n=6
Types 93,390 93,390 ~ ~ ~ p=1.000 n=6
Memory used 369,332k (± 0.02%) 369,393k (± 0.02%) ~ 369,343k 369,493k p=0.230 n=6
Parse Time 2.31s (± 0.81%) 2.35s (± 0.70%) +0.05s (+ 2.17%) 2.33s 2.37s p=0.010 n=6
Bind Time 1.35s (± 1.46%) 1.34s (± 1.79%) ~ 1.31s 1.38s p=0.548 n=6
Check Time 13.34s (± 0.31%) 13.33s (± 0.29%) ~ 13.28s 13.39s p=0.687 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 17.00s (± 0.20%) 17.03s (± 0.27%) ~ 16.96s 17.08s p=0.197 n=6
vscode - node (v18.15.0, x64)
Errors 4 4 ~ ~ ~ p=1.000 n=6
Symbols 2,799,024 2,799,024 ~ ~ ~ p=1.000 n=6
Types 950,803 950,803 ~ ~ ~ p=1.000 n=6
Memory used 2,926,630k (± 0.00%) 2,926,632k (± 0.00%) ~ 2,926,454k 2,926,741k p=0.810 n=6
Parse Time 11.17s (± 0.35%) 11.21s (± 0.26%) ~ 11.18s 11.26s p=0.107 n=6
Bind Time 3.42s (± 0.26%) 3.45s (± 1.90%) ~ 3.41s 3.58s p=0.563 n=6
Check Time 62.88s (± 0.25%) 62.97s (± 0.27%) ~ 62.70s 63.15s p=0.574 n=6
Emit Time 17.72s (± 9.57%) 17.81s (± 9.82%) ~ 16.60s 20.14s p=0.575 n=6
Total Time 95.19s (± 1.76%) 95.44s (± 1.80%) ~ 94.10s 97.68s p=0.471 n=6
webpack - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 265,853 265,853 ~ ~ ~ p=1.000 n=6
Types 108,438 108,438 ~ ~ ~ p=1.000 n=6
Memory used 410,323k (± 0.01%) 410,338k (± 0.01%) ~ 410,302k 410,453k p=0.936 n=6
Parse Time 3.80s (± 0.47%) 3.83s (± 0.68%) ~ 3.78s 3.85s p=0.063 n=6
Bind Time 1.66s (± 0.92%) 1.66s (± 0.63%) ~ 1.64s 1.67s p=0.934 n=6
Check Time 17.03s (± 0.27%) 17.02s (± 0.38%) ~ 16.93s 17.13s p=0.574 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 22.48s (± 0.24%) 22.50s (± 0.31%) ~ 22.42s 22.62s p=0.935 n=6
xstate-main - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 523,981 523,981 ~ ~ ~ p=1.000 n=6
Types 178,708 178,708 ~ ~ ~ p=1.000 n=6
Memory used 461,252k (± 0.02%) 461,310k (± 0.03%) ~ 461,170k 461,520k p=0.378 n=6
Parse Time 3.12s (± 0.85%) 3.15s (± 1.12%) ~ 3.11s 3.21s p=0.167 n=6
Bind Time 1.19s (± 0.34%) 1.19s ~ ~ ~ p=0.405 n=6
Check Time 18.21s (± 0.51%) 18.27s (± 0.40%) ~ 18.18s 18.37s p=0.336 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 22.52s (± 0.32%) 22.61s (± 0.37%) ~ 22.49s 22.70s p=0.092 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

tsserver

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsTSServer - node (v18.15.0, x64)
Req 1 - updateOpen 2,297ms (± 0.43%) 2,301ms (± 0.31%) ~ 2,294ms 2,311ms p=0.630 n=6
Req 2 - geterr 5,127ms (± 0.42%) 5,145ms (± 0.61%) ~ 5,114ms 5,188ms p=0.575 n=6
Req 3 - references 286ms (± 2.14%) 288ms (± 1.60%) ~ 283ms 292ms p=0.166 n=6
Req 4 - navto 227ms (± 0.60%) 226ms (± 0.56%) ~ 224ms 227ms p=0.283 n=6
Req 5 - completionInfo count 1,357 1,357 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 81ms (± 7.99%) 84ms (± 9.38%) ~ 77ms 93ms p=0.528 n=6
CompilerTSServer - node (v18.15.0, x64)
Req 1 - updateOpen 3,583ms (± 0.60%) 3,607ms (± 0.55%) ~ 3,573ms 3,624ms p=0.066 n=6
Req 2 - geterr 5,691ms (± 0.16%) 5,683ms (± 0.16%) ~ 5,670ms 5,691ms p=0.128 n=6
Req 3 - references 443ms (± 0.19%) 448ms (± 0.30%) +5ms (+ 1.17%) 446ms 449ms p=0.004 n=6
Req 4 - navto 339ms (± 0.16%) 339ms (± 0.15%) ~ 338ms 339ms p=0.640 n=6
Req 5 - completionInfo count 1,519 1,519 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 108ms (± 1.12%) 112ms (± 5.84%) ~ 109ms 125ms p=0.115 n=6
xstate-main-1-tsserver - node (v18.15.0, x64)
Req 1 - updateOpen 5,105ms (± 0.37%) 5,138ms (± 0.32%) +32ms (+ 0.63%) 5,110ms 5,158ms p=0.020 n=6
Req 2 - geterr 1,129ms (± 0.79%) 1,127ms (± 0.20%) ~ 1,124ms 1,130ms p=0.872 n=6
Req 3 - references 87ms (± 3.85%) 86ms (± 0.98%) ~ 84ms 86ms p=0.928 n=6
Req 4 - navto 450ms (± 0.91%) 449ms (± 0.23%) ~ 447ms 450ms p=1.000 n=6
Req 5 - completionInfo count 3,413 3,413 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 859ms (± 3.26%) 835ms (± 0.39%) -25ms (- 2.85%) 829ms 838ms p=0.010 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • CompilerTSServer - node (v18.15.0, x64)
  • Compiler-UnionsTSServer - node (v18.15.0, x64)
  • xstate-main-1-tsserver - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
tsc-startup - node (v18.15.0, x64)
Execution time 156.33ms (± 0.16%) 156.42ms (± 0.17%) +0.09ms (+ 0.06%) 155.39ms 159.28ms p=0.004 n=600
tsserver-startup - node (v18.15.0, x64)
Execution time 239.28ms (± 0.14%) 239.33ms (± 0.15%) ~ 237.95ms 246.14ms p=0.210 n=600
tsserverlibrary-startup - node (v18.15.0, x64)
Execution time 348.76ms (± 0.30%) 348.86ms (± 0.30%) ~ 341.33ms 359.12ms p=0.197 n=600
typescript-startup - node (v18.15.0, x64)
Execution time 350.20ms (± 0.29%) 350.32ms (± 0.29%) +0.12ms (+ 0.04%) 341.82ms 354.16ms p=0.010 n=600
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • tsc-startup - node (v18.15.0, x64)
  • tsserver-startup - node (v18.15.0, x64)
  • tsserverlibrary-startup - node (v18.15.0, x64)
  • typescript-startup - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@typescript-bot
Copy link
Collaborator

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

Here they are:

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - node (v18.15.0, x64)
Errors 30 30 ~ ~ ~ p=1.000 n=6
Symbols 62,154 62,154 ~ ~ ~ p=1.000 n=6
Types 50,273 50,273 ~ ~ ~ p=1.000 n=6
Memory used 193,925k (± 1.01%) 193,337k (± 0.95%) ~ 192,118k 195,699k p=0.575 n=6
Parse Time 1.57s (± 1.53%) 1.57s (± 1.32%) ~ 1.54s 1.59s p=0.870 n=6
Bind Time 0.87s (± 0.86%) 0.87s (± 1.03%) ~ 0.86s 0.88s p=0.798 n=6
Check Time 11.35s (± 0.29%) 11.37s (± 0.48%) ~ 11.28s 11.43s p=0.422 n=6
Emit Time 3.15s (± 0.31%) 3.14s (± 0.37%) ~ 3.12s 3.15s p=0.498 n=6
Total Time 16.93s (± 0.22%) 16.95s (± 0.41%) ~ 16.83s 17.03s p=0.521 n=6
angular-1 - node (v18.15.0, x64)
Errors 5 5 ~ ~ ~ p=1.000 n=6
Symbols 945,172 945,172 ~ ~ ~ p=1.000 n=6
Types 408,068 408,068 ~ ~ ~ p=1.000 n=6
Memory used 1,222,067k (± 0.00%) 1,222,039k (± 0.00%) ~ 1,221,978k 1,222,090k p=0.298 n=6
Parse Time 8.09s (± 0.26%) 8.12s (± 0.61%) ~ 8.08s 8.21s p=0.227 n=6
Bind Time 2.24s (± 0.69%) 2.24s (± 0.59%) ~ 2.23s 2.26s p=0.796 n=6
Check Time 36.67s (± 0.38%) 36.62s (± 0.32%) ~ 36.52s 36.77s p=0.575 n=6
Emit Time 17.40s (± 0.89%) 17.39s (± 0.63%) ~ 17.28s 17.53s p=0.574 n=6
Total Time 64.40s (± 0.35%) 64.38s (± 0.34%) ~ 64.18s 64.71s p=1.000 n=6
mui-docs - node (v18.15.0, x64)
Errors 5 5 ~ ~ ~ p=1.000 n=6
Symbols 1,955,870 1,955,870 ~ ~ ~ p=1.000 n=6
Types 676,290 676,290 ~ ~ ~ p=1.000 n=6
Memory used 1,754,554k (± 0.00%) 1,754,545k (± 0.00%) ~ 1,754,500k 1,754,646k p=1.000 n=6
Parse Time 9.79s (± 0.38%) 9.76s (± 0.49%) ~ 9.68s 9.80s p=0.191 n=6
Bind Time 3.33s (± 0.64%) 3.34s (± 0.41%) ~ 3.32s 3.36s p=0.742 n=6
Check Time 81.73s (± 0.35%) 82.14s (± 0.63%) ~ 81.60s 82.99s p=0.128 n=6
Emit Time 0.19s (± 2.67%) 0.19s (± 2.67%) ~ 0.19s 0.20s p=1.000 n=6
Total Time 95.04s (± 0.31%) 95.44s (± 0.58%) ~ 94.87s 96.35s p=0.199 n=6
self-build-src - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,215,708 1,215,710 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 257,646 257,646 ~ ~ ~ p=1.000 n=6
Memory used 2,324,373k (± 0.02%) 2,324,231k (± 0.02%) ~ 2,323,755k 2,324,828k p=0.471 n=6
Parse Time 7.45s (± 0.52%) 7.48s (± 0.94%) ~ 7.37s 7.57s p=0.127 n=6
Bind Time 2.74s (± 0.43%) 2.73s (± 1.05%) ~ 2.69s 2.78s p=0.372 n=6
Check Time 49.42s (± 0.69%) 49.45s (± 0.60%) ~ 49.18s 50.00s p=1.000 n=6
Emit Time 3.86s (± 0.97%) 4.01s (± 3.92%) +0.15s (+ 3.80%) 3.86s 4.24s p=0.030 n=6
Total Time 63.47s (± 0.50%) 63.70s (± 0.52%) ~ 63.32s 64.30s p=0.173 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 1,215,708 1,215,710 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 257,646 257,646 ~ ~ ~ p=1.000 n=6
Memory used 2,398,520k (± 0.02%) 2,398,575k (± 0.02%) ~ 2,398,103k 2,399,388k p=0.810 n=6
Parse Time 7.71s (± 1.25%) 7.78s (± 0.96%) ~ 7.71s 7.92s p=0.298 n=6
Bind Time 2.46s (± 0.95%) 2.46s (± 1.23%) ~ 2.41s 2.49s p=0.686 n=6
Check Time 50.10s (± 0.31%) 50.15s (± 0.25%) ~ 50.00s 50.32s p=0.470 n=6
Emit Time 3.91s (± 1.72%) 3.85s (± 2.22%) ~ 3.69s 3.91s p=0.230 n=6
Total Time 64.19s (± 0.26%) 64.23s (± 0.39%) ~ 63.88s 64.58s p=0.936 n=6
self-compiler - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 256,204 256,206 +2 (+ 0.00%) ~ ~ p=0.001 n=6
Types 103,653 103,653 ~ ~ ~ p=1.000 n=6
Memory used 424,319k (± 0.02%) 424,278k (± 0.01%) ~ 424,202k 424,371k p=0.173 n=6
Parse Time 4.14s (± 0.62%) 4.17s (± 1.76%) ~ 4.03s 4.23s p=0.147 n=6
Bind Time 1.60s (± 1.88%) 1.62s (± 1.28%) ~ 1.59s 1.65s p=0.368 n=6
Check Time 22.62s (± 0.49%) 22.64s (± 0.40%) ~ 22.51s 22.77s p=0.872 n=6
Emit Time 1.71s (± 2.68%) 1.74s (± 1.33%) ~ 1.72s 1.78s p=0.196 n=6
Total Time 30.08s (± 0.27%) 30.16s (± 0.40%) ~ 30.03s 30.33s p=0.336 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors 35 35 ~ ~ ~ p=1.000 n=6
Symbols 224,824 224,824 ~ ~ ~ p=1.000 n=6
Types 93,390 93,390 ~ ~ ~ p=1.000 n=6
Memory used 369,325k (± 0.01%) 369,367k (± 0.02%) ~ 369,313k 369,439k p=0.423 n=6
Parse Time 2.84s (± 0.77%) 2.88s (± 0.86%) +0.04s (+ 1.35%) 2.85s 2.92s p=0.029 n=6
Bind Time 1.58s (± 1.01%) 1.59s (± 0.86%) ~ 1.57s 1.60s p=0.680 n=6
Check Time 15.72s (± 0.18%) 15.73s (± 0.19%) ~ 15.69s 15.77s p=0.686 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 20.14s (± 0.21%) 20.18s (± 0.21%) ~ 20.11s 20.22s p=0.091 n=6
vscode - node (v18.15.0, x64)
Errors 4 4 ~ ~ ~ p=1.000 n=6
Symbols 2,799,024 2,799,024 ~ ~ ~ p=1.000 n=6
Types 950,803 950,803 ~ ~ ~ p=1.000 n=6
Memory used 2,926,944k (± 0.02%) 2,926,664k (± 0.00%) ~ 2,926,478k 2,926,780k p=0.936 n=6
Parse Time 11.12s (± 0.16%) 11.22s (± 0.42%) +0.10s (+ 0.88%) 11.16s 11.29s p=0.005 n=6
Bind Time 3.42s (± 0.22%) 3.44s (± 2.11%) ~ 3.40s 3.59s p=0.620 n=6
Check Time 62.97s (± 0.36%) 63.02s (± 0.21%) ~ 62.87s 63.23s p=0.575 n=6
Emit Time 17.74s (± 7.33%) 17.69s (± 9.62%) ~ 16.49s 19.90s p=0.630 n=6
Total Time 95.26s (± 1.21%) 95.37s (± 1.77%) ~ 94.09s 97.65s p=1.000 n=6
webpack - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 265,853 265,853 ~ ~ ~ p=1.000 n=6
Types 108,438 108,438 ~ ~ ~ p=1.000 n=6
Memory used 410,381k (± 0.01%) 410,451k (± 0.02%) ~ 410,377k 410,567k p=0.297 n=6
Parse Time 3.21s (± 0.96%) 3.20s (± 0.46%) ~ 3.18s 3.22s p=1.000 n=6
Bind Time 1.41s (± 0.97%) 1.40s (± 1.08%) ~ 1.38s 1.42s p=0.273 n=6
Check Time 14.45s (± 0.38%) 14.51s (± 0.63%) ~ 14.41s 14.63s p=0.470 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 19.07s (± 0.45%) 19.10s (± 0.48%) ~ 19.01s 19.23s p=0.377 n=6
xstate-main - node (v18.15.0, x64)
Errors 0 0 ~ ~ ~ p=1.000 n=6
Symbols 523,981 523,981 ~ ~ ~ p=1.000 n=6
Types 178,708 178,708 ~ ~ ~ p=1.000 n=6
Memory used 461,344k (± 0.03%) 461,268k (± 0.01%) ~ 461,192k 461,361k p=0.230 n=6
Parse Time 2.60s (± 0.51%) 2.62s (± 0.24%) +0.02s (+ 0.70%) 2.61s 2.63s p=0.009 n=6
Bind Time 0.99s (± 0.82%) 1.00s (± 0.52%) ~ 0.99s 1.00s p=0.523 n=6
Check Time 15.36s (± 0.60%) 15.32s (± 0.10%) ~ 15.30s 15.34s p=0.520 n=6
Emit Time 0.00s 0.00s ~ ~ ~ p=1.000 n=6
Total Time 18.95s (± 0.43%) 18.93s (± 0.09%) ~ 18.91s 18.96s p=0.748 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

tsserver

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-UnionsTSServer - node (v18.15.0, x64)
Req 1 - updateOpen 3,428ms (± 0.43%) 3,422ms (± 0.23%) ~ 3,410ms 3,430ms p=0.630 n=6
Req 2 - geterr 7,591ms (± 0.41%) 7,545ms (± 0.67%) ~ 7,472ms 7,601ms p=0.128 n=6
Req 3 - references 430ms (± 1.52%) 434ms (± 1.42%) ~ 425ms 440ms p=0.422 n=6
Req 4 - navto 337ms (± 0.51%) 339ms (± 0.44%) ~ 337ms 341ms p=0.210 n=6
Req 5 - completionInfo count 1,357 1,357 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 117ms (± 9.12%) 113ms (± 2.27%) ~ 111ms 118ms p=1.000 n=6
CompilerTSServer - node (v18.15.0, x64)
Req 1 - updateOpen 3,583ms (± 0.18%) 3,612ms (± 0.23%) +29ms (+ 0.80%) 3,600ms 3,620ms p=0.005 n=6
Req 2 - geterr 5,675ms (± 0.39%) 5,684ms (± 0.36%) ~ 5,650ms 5,704ms p=0.378 n=6
Req 3 - references 443ms (± 0.39%) 448ms (± 0.41%) +5ms (+ 1.13%) 446ms 450ms p=0.007 n=6
Req 4 - navto 339ms (± 0.83%) 341ms (± 1.19%) ~ 338ms 349ms p=0.267 n=6
Req 5 - completionInfo count 1,519 1,519 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 108ms (± 1.12%) 112ms (± 5.87%) ~ 108ms 125ms p=0.210 n=6
xstate-main-1-tsserver - node (v18.15.0, x64)
Req 1 - updateOpen 6,249ms (± 5.79%) 6,159ms (± 0.40%) ~ 6,125ms 6,184ms p=0.078 n=6
Req 2 - geterr 1,402ms (± 9.97%) 1,351ms (± 1.14%) ~ 1,328ms 1,375ms p=0.872 n=6
Req 3 - references 114ms (±13.31%) 104ms (± 3.86%) ~ 100ms 108ms p=0.220 n=6
Req 4 - navto 568ms (± 3.40%) 541ms (± 7.85%) ~ 497ms 610ms p=0.199 n=6
Req 5 - completionInfo count 3,413 3,413 ~ ~ ~ p=1.000 n=6
Req 5 - completionInfo 1,160ms (±10.71%) 1,128ms (±10.59%) ~ 1,019ms 1,297ms p=0.810 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • CompilerTSServer - node (v18.15.0, x64)
  • Compiler-UnionsTSServer - node (v18.15.0, x64)
  • xstate-main-1-tsserver - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

startup

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
tsc-startup - node (v18.15.0, x64)
Execution time 156.52ms (± 0.17%) 156.47ms (± 0.18%) -0.05ms (- 0.03%) 155.42ms 160.08ms p=0.047 n=600
tsserver-startup - node (v18.15.0, x64)
Execution time 240.16ms (± 0.22%) 240.30ms (± 0.14%) +0.14ms (+ 0.06%) 238.85ms 244.66ms p=0.000 n=600
tsserverlibrary-startup - node (v18.15.0, x64)
Execution time 286.24ms (± 0.28%) 286.21ms (± 0.29%) ~ 279.04ms 289.63ms p=0.913 n=600
typescript-startup - node (v18.15.0, x64)
Execution time 287.33ms (± 0.28%) 287.25ms (± 0.28%) ~ 280.53ms 293.62ms p=0.225 n=600
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • tsc-startup - node (v18.15.0, x64)
  • tsserver-startup - node (v18.15.0, x64)
  • tsserverlibrary-startup - node (v18.15.0, x64)
  • typescript-startup - node (v18.15.0, x64)
Benchmark Name Iterations
Current pr 6
Baseline baseline 6

Developer Information:

Download Benchmarks

@rbuckton
Copy link
Member Author

Looks like there was no noticeable performance improvement with this change, so we should only take it if we think the bounds checking enforcement is worth adding purely for the sake of correctness and stability.

@DanielRosenwasser
Copy link
Member

It seems like parse is (only very slightly) worse - I wonder what happens if you switch that initial call in scan to the old unchecked version, but I'm guessing it's more death by a thousand cuts.

@rbuckton
Copy link
Member Author

It may be that some code paths aren't run enough times to be optimized and thus the functions aren't inlined. I'll have to look at it in deopt-explorer.

@sandersn sandersn added this to Not started in PR Backlog May 7, 2024
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
PR Backlog
  
Not started
Development

Successfully merging this pull request may close these issues.

None yet

4 participants