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

[Perf] Windows/x64: 134 Improvements on 2/8/2023 12:20:29 PM #12983

Closed
performanceautofiler bot opened this issue Feb 14, 2023 · 10 comments
Closed

[Perf] Windows/x64: 134 Improvements on 2/8/2023 12:20:29 PM #12983

performanceautofiler bot opened this issue Feb 14, 2023 · 10 comments

Comments

@performanceautofiler
Copy link

No description provided.

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<MyEventsListerViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromString - Duration of single invocation 373.83 μs 314.57 μs 0.84 0.02 False
DeserializeFromStream - Duration of single invocation 416.77 μs 348.37 μs 0.84 0.05 False
DeserializeFromUtf8Bytes - Duration of single invocation 360.83 μs 303.68 μs 0.84 0.02 False
DeserializeFromStream - Duration of single invocation 424.68 μs 349.99 μs 0.82 0.05 False
DeserializeFromString - Duration of single invocation 379.31 μs 313.38 μs 0.83 0.02 False
DeserializeFromReader - Duration of single invocation 525.05 μs 412.81 μs 0.79 0.18 False
DeserializeFromReader - Duration of single invocation 531.49 μs 405.35 μs 0.76 0.17 False
DeserializeFromUtf8Bytes - Duration of single invocation 371.23 μs 313.55 μs 0.84 0.03 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<MyEventsListerViewModel>.DeserializeFromString(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 314.5678706539362 < 357.92212933618856.
IsChangePoint: Marked as a change because one of 1/9/2023 6:56:09 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 96.03141797244261 (T) = (0 -316542.31931490253) / Math.Sqrt((66844681.09282111 / (299)) + (5040508.154380323 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.16269919470454813 = (378050.89558370446 - 316542.31931490253) / 378050.89558370446 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromStream(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 348.36719471947197 < 397.8229211157842.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 99.66984488344181 (T) = (0 -354214.0124541216) / Math.Sqrt((63932533.34953554 / (299)) + (5650879.086233471 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.15595043154839963 = (419660.2020707425 - 354214.0124541216) / 419660.2020707425 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 303.6836511789182 < 348.8249418803418.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 92.0910786121266 (T) = (0 -304642.69956754416) / Math.Sqrt((57387774.01038781 / (299)) + (7728109.582116718 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.17289203602076922 = (368322.7738515572 - 304642.69956754416) / 368322.7738515572 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 349.9909090909091 < 396.3211094725482.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 53.561586348305916 (T) = (0 -353940.0480387413) / Math.Sqrt((63394625.93625335 / (299)) + (33932505.485177495 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.15711016898037639 = (419912.5852670313 - 353940.0480387413) / 419912.5852670313 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 313.3782765868012 < 356.4684279897535.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 100.32698049216707 (T) = (0 -313495.49403816357) / Math.Sqrt((54947399.15636329 / (299)) + (5640376.926630045 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.16845576489832634 = (377003.9894508224 - 313495.49403816357) / 377003.9894508224 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 412.8119559228651 < 503.2239541502537.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 123.34956052750354 (T) = (0 -411671.5793519569) / Math.Sqrt((186888948.48204795 / (299)) + (4336483.514390067 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.21050151498865594 = (521434.28666116024 - 411671.5793519569) / 521434.28666116024 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 405.3548469387755 < 499.7415265135076.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 96.79185518387003 (T) = (0 -409109.51122832176) / Math.Sqrt((185029749.72636303 / (299)) + (17623848.750272073 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.21223248454655375 = (519327.72449094267 - 409109.51122832176) / 519327.72449094267 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;MyEventsListerViewModel&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 313.5475156054931 < 352.62815506923835.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 100.06779618501783 (T) = (0 -307502.18837594567) / Math.Sqrt((59819936.82414257 / (299)) + (4619258.208607994 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.16666894689986167 = (369003.63574834197 - 307502.18837594567) / 369003.63574834197 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<Nullable<DateTimeOffset>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromUtf8Bytes - Duration of single invocation 153.35 ns 142.32 ns 0.93 0.04 False
DeserializeFromReader - Duration of single invocation 315.36 ns 293.49 ns 0.93 0.01 False
DeserializeFromString - Duration of single invocation 221.87 ns 200.25 ns 0.90 0.28 False
DeserializeFromReader - Duration of single invocation 317.17 ns 294.25 ns 0.93 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 161.81 ns 142.49 ns 0.88 0.02 False

graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;Nullable&lt;DateTimeOffset&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<Nullable<DateTimeOffset>>.DeserializeFromUtf8Bytes(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 142.31752267585836 < 145.8646106395104.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 33.71926810602338 (T) = (0 -142.76877738451307) / Math.Sqrt((14.512704434469802 / (299)) + (4.642114693957605 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.09982602647670803 = (158.60131661629177 - 142.76877738451307) / 158.60131661629177 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Nullable&lt;DateTimeOffset&gt;&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 293.49062501696096 < 299.25563016411354.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 36.199475283456394 (T) = (0 -290.93608847295735) / Math.Sqrt((7.305452432903341 / (299)) + (12.743195037725238 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.08193931414833053 = (316.9028942820494 - 290.93608847295735) / 316.9028942820494 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Nullable&lt;DateTimeOffset&gt;&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 200.25014009152983 < 213.67059544162416.
IsChangePoint: Marked as a change because one of 1/10/2023 11:45:30 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 16.169653826731825 (T) = (0 -208.49905779239802) / Math.Sqrt((72.4984393228583 / (299)) + (36.24565623280812 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08894888254113455 = (228.85549866175526 - 208.49905779239802) / 228.85549866175526 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Nullable&lt;DateTimeOffset&gt;&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 294.25402343675694 < 301.6296086573236.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 36.232537168336215 (T) = (0 -291.44759562394006) / Math.Sqrt((7.164331928749313 / (299)) + (12.203656843243484 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.08030658584731681 = (316.89646912656406 - 291.44759562394006) / 316.89646912656406 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Nullable&lt;DateTimeOffset&gt;&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 142.48725918067925 < 144.6058860204873.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 62.463203591714624 (T) = (0 -142.31872740152662) / Math.Sqrt((14.406548899059961 / (299)) + (0.4750921360649841 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.10164262340351408 = (158.4210594905058 - 142.31872740152662) / 158.4210594905058 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<Hashtable>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromStream - Duration of single invocation 43.86 μs 39.07 μs 0.89 0.00 False
DeserializeFromStream - Duration of single invocation 43.89 μs 39.03 μs 0.89 0.00 False
DeserializeFromReader - Duration of single invocation 51.95 μs 44.25 μs 0.85 0.01 False
DeserializeFromString - Duration of single invocation 42.57 μs 39.00 μs 0.92 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 42.41 μs 38.35 μs 0.90 0.03 False
DeserializeFromUtf8Bytes - Duration of single invocation 41.51 μs 37.99 μs 0.92 0.01 False
DeserializeFromReader - Duration of single invocation 52.06 μs 43.92 μs 0.84 0.04 False
DeserializeFromString - Duration of single invocation 42.84 μs 39.16 μs 0.91 0.01 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<Hashtable>.DeserializeFromStream(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 39.06668753260302 < 41.54307780859936.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 74.60041818990203 (T) = (0 -39211.36699829517) / Math.Sqrt((428901.8592692869 / (299)) + (88136.45175284833 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.11672008458461207 = (44392.911368141875 - 39211.36699829517) / 44392.911368141875 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 39.02536548388261 < 41.6057894971175.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 69.56339405598635 (T) = (0 -39126.17829585445) / Math.Sqrt((280991.2361403472 / (299)) + (127427.08804652283 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.11797147464439629 = (44359.311712827104 - 39126.17829585445) / 44359.311712827104 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 44.25318805488296 < 48.94152122823884.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 75.07139765259078 (T) = (0 -43482.534253396916) / Math.Sqrt((548786.2900949888 / (299)) + (306331.3535988226 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.16542444317644311 = (52101.37524143886 - 43482.534253396916) / 52101.37524143886 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 39.00046278534433 < 40.47349161937788.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 48.92869953825134 (T) = (0 -38723.92362140474) / Math.Sqrt((403378.985921269 / (299)) + (226925.1396981953 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.11094285180940802 = (43556.169252129206 - 38723.92362140474) / 43556.169252129206 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 38.35083943089431 < 40.10538006531048.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 44.67365152030461 (T) = (0 -38248.5252920275) / Math.Sqrt((460681.1386820675 / (299)) + (251228.00184298953 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.10844494674883516 = (42900.912459134815 - 38248.5252920275) / 42900.912459134815 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 37.9875996716698 < 40.009021613435515.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 47.70120363311256 (T) = (0 -38062.466824963165) / Math.Sqrt((411267.5754602485 / (299)) + (232969.33015864587 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.1113862624319242 = (42833.534094499904 - 38062.466824963165) / 42833.534094499904 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 43.9210119047619 < 48.959799705696.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 93.17525431910711 (T) = (0 -43365.846707066186) / Math.Sqrt((890629.9661551651 / (299)) + (156120.5467084555 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.16918951623619377 = (52197.038379446836 - 43365.846707066186) / 52197.038379446836 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Hashtable&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 39.15756683375105 < 40.63140173692427.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 59.738447833066736 (T) = (0 -38798.23386756099) / Math.Sqrt((419743.2933549 / (299)) + (129739.35064258886 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.10962158606727078 = (43574.99380088556 - 38798.23386756099) / 43574.99380088556 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<IndexViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromUtf8Bytes - Duration of single invocation 30.55 μs 25.87 μs 0.85 0.03 False
DeserializeFromReader - Duration of single invocation 44.70 μs 34.89 μs 0.78 0.04 False
DeserializeFromStream - Duration of single invocation 32.89 μs 27.87 μs 0.85 0.00 False
DeserializeFromStream - Duration of single invocation 33.01 μs 27.66 μs 0.84 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 30.02 μs 25.75 μs 0.86 0.00 False
DeserializeFromString - Duration of single invocation 31.80 μs 27.25 μs 0.86 0.01 False
DeserializeFromString - Duration of single invocation 31.68 μs 27.47 μs 0.87 0.02 False
DeserializeFromReader - Duration of single invocation 44.53 μs 35.36 μs 0.79 0.02 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<IndexViewModel>.DeserializeFromUtf8Bytes(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 25.866146166821576 < 28.88849866008711.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 41.3816293908753 (T) = (0 -25837.70188350687) / Math.Sqrt((238225.80007068644 / (299)) + (291559.16940865456 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1493151745504612 = (30372.825646505575 - 25837.70188350687) / 30372.825646505575 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 34.88916341327385 < 42.0464774669139.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 107.14166685830693 (T) = (0 -35184.047185992786) / Math.Sqrt((696478.6168728968 / (299)) + (145140.89730499196 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.21092028876258065 = (44588.71098183205 - 35184.047185992786) / 44588.71098183205 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.873282721149195 < 31.109046777102723.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 112.08496619550381 (T) = (0 -28058.180642040974) / Math.Sqrt((255090.9632783737 / (299)) + (34275.03601209036 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.15543665193304615 = (33222.114961844905 - 28058.180642040974) / 33222.114961844905 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromStream(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.660977886431827 < 31.495339374831186.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 89.13853297504967 (T) = (0 -28087.248512280585) / Math.Sqrt((274983.8034196918 / (299)) + (71281.9138573519 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.15920481524301652 = (33405.57726956856 - 28087.248512280585) / 33405.57726956856 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 25.748720894450717 < 28.513242201248733.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 105.2861950816004 (T) = (0 -25848.22182692228) / Math.Sqrt((140308.23957112405 / (299)) + (35900.00761469724 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14907977784538998 = (30376.78639423112 - 25848.22182692228) / 30376.78639423112 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.246034306755625 < 30.15920644422901.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 91.55677117912275 (T) = (0 -27348.72883962314) / Math.Sqrt((167117.5149262448 / (299)) + (48553.299894811265 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14155999495976268 = (31858.637387642757 - 27348.72883962314) / 31858.637387642757 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.472440482712205 < 30.245801267940145.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 92.89622820332842 (T) = (0 -27362.05633150185) / Math.Sqrt((203587.60301039502 / (299)) + (47358.55539708384 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.14349059524642327 = (31946.00804106067 - 27362.05633150185) / 31946.00804106067 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;IndexViewModel&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 35.361500131395424 < 42.193599256297055.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 133.5497470576871 (T) = (0 -34849.797591577815) / Math.Sqrt((511324.73641588876 / (299)) + (89718.9780808558 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.2158696267191742 = (44443.88175625079 - 34849.797591577815) / 44443.88175625079 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<ImmutableDictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromReader - Duration of single invocation 59.13 μs 48.75 μs 0.82 0.00 False
DeserializeFromReader - Duration of single invocation 59.56 μs 48.86 μs 0.82 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 49.53 μs 44.76 μs 0.90 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 49.43 μs 43.29 μs 0.88 0.00 False
DeserializeFromStream - Duration of single invocation 52.10 μs 46.24 μs 0.89 0.00 False
DeserializeFromString - Duration of single invocation 51.08 μs 44.14 μs 0.86 0.01 False
DeserializeFromStream - Duration of single invocation 53.59 μs 45.88 μs 0.86 0.01 False
DeserializeFromString - Duration of single invocation 50.19 μs 44.24 μs 0.88 0.00 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<ImmutableDictionary<String, String>>.DeserializeFromReader(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 48.745454545454535 < 56.185932549945626.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 72.33779430236164 (T) = (0 -49565.526135589935) / Math.Sqrt((1552333.6019602227 / (299)) + (487148.44113599777 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.1819767330152439 = (60591.82927435436 - 49565.526135589935) / 60591.82927435436 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 48.86184012276785 < 56.67070104325676.
IsChangePoint: Marked as a change because one of 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 54.31161824951732 (T) = (0 -49558.31812868739) / Math.Sqrt((1676092.1509529562 / (299)) + (980109.6956131513 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.18323605809359045 = (60676.42752814634 - 49558.31812868739) / 60676.42752814634 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 44.75994536624849 < 47.096145114436226.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 44.1362189054824 (T) = (0 -44084.99064982504) / Math.Sqrt((1702260.2672343615 / (299)) + (545438.3274606067 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.1387514305497968 = (51187.30203287032 - 44084.99064982504) / 51187.30203287032 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 43.29238114316239 < 47.10240240448919.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 48.23868511027986 (T) = (0 -44001.94930800403) / Math.Sqrt((1593026.3221901858 / (299)) + (415445.11550819105 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13794737399320117 = (51043.228662071255 - 44001.94930800403) / 51043.228662071255 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromStream(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 46.24215918668352 < 49.755564927725246.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 45.43558489082729 (T) = (0 -46181.794147463035) / Math.Sqrt((1663338.4504063365 / (299)) + (618757.8859599031 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.14239151366136987 = (53849.50695232273 - 46181.794147463035) / 53849.50695232273 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 44.14459997982243 < 47.756561033367674.
IsChangePoint: Marked as a change because one of 1/11/2023 8:19:46 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 41.194646751345246 (T) = (0 -44865.77684009208) / Math.Sqrt((1748344.320255381 / (299)) + (570760.0242796947 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13276451524127678 = (51734.249380460205 - 44865.77684009208) / 51734.249380460205 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 45.881082224227384 < 50.315878288277496.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 49.63933205126768 (T) = (0 -46006.89310446362) / Math.Sqrt((1530018.738108052 / (299)) + (518344.8760098592 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14586853125532648 = (53863.9481016669 - 46006.89310446362) / 53863.9481016669 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 44.23774448208042 < 47.846260413332615.
IsChangePoint: Marked as a change because one of 1/12/2023 10:41:19 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 46.920027466433545 (T) = (0 -44717.25582317881) / Math.Sqrt((1817451.4667845971 / (299)) + (428770.95266056503 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13616786455488422 = (51766.14065201092 - 44717.25582317881) / 51766.14065201092 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Document.Tests.Perf_DocumentParse

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Parse - Duration of single invocation 1.04 ms 754.86 μs 0.72 0.00 False Trace Trace
Parse - Duration of single invocation 1.30 ms 1.03 ms 0.79 0.00 False Trace Trace

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_DocumentParse*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Document.Tests.Perf_DocumentParse.Parse(IsDataIndented: False, TestRandomAccess: False, TestCase: Json400KB)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 754.8578851963745 < 0.9962118677612994.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 204.95199937809008 (T) = (0 -759611.1026256344) / Math.Sqrt((79185294.96714242 / (299)) + (44225738.49568821 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.27123588820787947 = (1042327.8127097358 - 759611.1026256344) / 1042327.8127097358 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse()
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,70
       lea       rbp,[rsp+90]
       xor       eax,eax
       mov       [rbp-58],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       vmovdqa   xmmword ptr [rbp-40],xmm4
       mov       [rbp-70],rsp
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M00_L06
       mov       rbx,rdi
       mov       r14d,[rbx+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-28],rcx
       lea       rcx,[rbp-28]
       call      qword ptr [7FFBDA9FBAF8]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-30],rax
       mov       [rbp-40],rbx
       xor       ecx,ecx
       mov       [rbp-38],ecx
       mov       [rbp-34],r14d
       mov       rcx,[rbp-30]
       mov       [rbp-48],rcx
       lea       rcx,[rbp-40]
       mov       rdx,[rbp-48]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFBDA9FB9A8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-60],rax
       cmp       byte ptr [rsi+15],0
       je        near ptr M00_L04
       mov       esi,[rsi+10]
       test      esi,esi
       jne       short M00_L01
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6EBAC8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L01:
       cmp       esi,2
       jne       short M00_L02
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6EBAE0]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L02:
       cmp       esi,1
       jne       short M00_L03
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6EBAF8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L03:
       cmp       esi,3
       jne       short M00_L04
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6EBB10]
       mov       rax,[rbp-60]
M00_L04:
       test      rax,rax
       je        short M00_L05
       mov       rcx,rax
       call      qword ptr [7FFBDA9DBE90]; System.Text.Json.JsonDocument.Dispose()
M00_L05:
       nop
       add       rsp,70
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M00_L06:
       xor       ebx,ebx
       xor       r14d,r14d
       jmp       near ptr M00_L00
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+90]
       cmp       qword ptr [rbp-60],0
       je        short M00_L07
       mov       rcx,[rbp-60]
       call      qword ptr [7FFBDA9DBE90]; System.Text.Json.JsonDocument.Dispose()
M00_L07:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 371
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFBDA9D91B8
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFBDA9FD720]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFBDA9D91B8
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFBDA9FD6F0]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,1BCFF407D38
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFBDA9DE2F0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFBDA9DE2F0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFBDA9FB7C8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFBDA9DE2F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFBDA6AD4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFBDA9FB2E8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,1BCFF407D38
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFBDA9DE2F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,1BCFF407D38
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFBDA9DE2F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFBDA4610D8]
M03_L04:
       mov       rcx,1BCFF407D38
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFBDA9DE2F8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFBDA9DDD78]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFBDA6AD4E0]
       int       3
; Total bytes of code 244

Compare Jit Disasm

; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse()
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,70
       lea       rbp,[rsp+90]
       xor       eax,eax
       mov       [rbp-58],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       vmovdqa   xmmword ptr [rbp-40],xmm4
       mov       [rbp-70],rsp
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M00_L06
       mov       rbx,rdi
       mov       r14d,[rbx+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-28],rcx
       lea       rcx,[rbp-28]
       call      qword ptr [7FF7BEF4BAF8]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-30],rax
       mov       [rbp-40],rbx
       xor       ecx,ecx
       mov       [rbp-38],ecx
       mov       [rbp-34],r14d
       mov       rcx,[rbp-30]
       mov       [rbp-48],rcx
       lea       rcx,[rbp-40]
       mov       rdx,[rbp-48]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FF7BEF4B9A8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-60],rax
       cmp       byte ptr [rsi+15],0
       je        near ptr M00_L04
       mov       esi,[rsi+10]
       test      esi,esi
       jne       short M00_L01
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC3BAC8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L01:
       cmp       esi,2
       jne       short M00_L02
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC3BAE0]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L02:
       cmp       esi,1
       jne       short M00_L03
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC3BAF8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L03:
       cmp       esi,3
       jne       short M00_L04
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC3BB10]
       mov       rax,[rbp-60]
M00_L04:
       test      rax,rax
       je        short M00_L05
       mov       rcx,rax
       call      qword ptr [7FF7BEF2EDC0]; System.Text.Json.JsonDocument.Dispose()
M00_L05:
       nop
       add       rsp,70
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M00_L06:
       xor       ebx,ebx
       xor       r14d,r14d
       jmp       near ptr M00_L00
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+90]
       cmp       qword ptr [rbp-60],0
       je        short M00_L07
       mov       rcx,[rbp-60]
       call      qword ptr [7FF7BEF2EDC0]; System.Text.Json.JsonDocument.Dispose()
M00_L07:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 371
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C4E
       mov       rdx,7FF7BEF2C268
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF7BEF4D720]
       int       3
M01_L01:
       mov       ecx,2C4E
       mov       rdx,7FF7BEF2C268
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF7BEF4D6F0]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L03
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L04
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       mov       ecx,100000
       cmp       edx,400000
       cmovg     ecx,edx
       cmp       edx,100000
       cmovg     edx,ecx
       mov       rcx,264E2407D38
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FF7BEF71240]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FF7BEF71240]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FF7BEF4B7C8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L02
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FF7BEF71248]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L02:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L03:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L04:
       call      qword ptr [7FF7BEBFD4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FF7BEF4B2E8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L05
       mov       rcx,264E2407D38
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FF7BEF71248]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L05:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 659
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,264E2407D38
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FF7BEF71248]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FF7BE9B10D8]
M03_L04:
       mov       rcx,264E2407D38
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FF7BEF71248]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FF7BEF2FD28]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FF7BEBFD4E0]
       int       3
; Total bytes of code 244

System.Text.Json.Document.Tests.Perf_DocumentParse.Parse(IsDataIndented: True, TestRandomAccess: False, TestCase: Json400KB)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 1.0349416253443524 < 1.2705509480953068.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 115.9793125967611 (T) = (0 -1057269.6759831386) / Math.Sqrt((258897592.92779186 / (299)) + (122847751.89539497 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.20336836992501395 = (1327175.1159110002 - 1057269.6759831386) / 1327175.1159110002 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse()
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,70
       lea       rbp,[rsp+90]
       xor       eax,eax
       mov       [rbp-58],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       vmovdqa   xmmword ptr [rbp-40],xmm4
       mov       [rbp-70],rsp
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M00_L06
       mov       rbx,rdi
       mov       r14d,[rbx+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-28],rcx
       lea       rcx,[rbp-28]
       call      qword ptr [7FFBDA9136F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-30],rax
       mov       [rbp-40],rbx
       xor       ecx,ecx
       mov       [rbp-38],ecx
       mov       [rbp-34],r14d
       mov       rcx,[rbp-30]
       mov       [rbp-48],rcx
       lea       rcx,[rbp-40]
       mov       rdx,[rbp-48]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFBDA9135A0]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-60],rax
       cmp       byte ptr [rsi+15],0
       je        near ptr M00_L04
       mov       esi,[rsi+10]
       test      esi,esi
       jne       short M00_L01
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6FBAC8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L01:
       cmp       esi,2
       jne       short M00_L02
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6FBAE0]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L02:
       cmp       esi,1
       jne       short M00_L03
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6FBAF8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L03:
       cmp       esi,3
       jne       short M00_L04
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FFBDA6FBB10]
       mov       rax,[rbp-60]
M00_L04:
       test      rax,rax
       je        short M00_L05
       mov       rcx,rax
       call      qword ptr [7FFBDA90AE18]; System.Text.Json.JsonDocument.Dispose()
M00_L05:
       nop
       add       rsp,70
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M00_L06:
       xor       ebx,ebx
       xor       r14d,r14d
       jmp       near ptr M00_L00
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+90]
       cmp       qword ptr [rbp-60],0
       je        short M00_L07
       mov       rcx,[rbp-60]
       call      qword ptr [7FFBDA90AE18]; System.Text.Json.JsonDocument.Dispose()
M00_L07:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 371
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFBDA908140
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFBDA915060]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFBDA908140
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFBDA915030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,24C7E807CF0
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFBDA90D278]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFBDA90D278]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFBDA9133C0]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFBDA90D280]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFBDA6BD4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFBDA911A38]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,24C7E807CF0
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFBDA90D280]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,24C7E807CF0
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFBDA90D280]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFBDA4710D8]
M03_L04:
       mov       rcx,24C7E807CF0
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFBDA90D280]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFBDA90CD00]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFBDA6BD4E0]
       int       3
; Total bytes of code 244

Compare Jit Disasm

; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse()
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,70
       lea       rbp,[rsp+90]
       xor       eax,eax
       mov       [rbp-58],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       vmovdqa   xmmword ptr [rbp-40],xmm4
       mov       [rbp-70],rsp
       mov       rsi,rcx
       mov       rdi,[rsi+8]
       test      rdi,rdi
       je        near ptr M00_L06
       mov       rbx,rdi
       mov       r14d,[rbx+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-28],rcx
       lea       rcx,[rbp-28]
       call      qword ptr [7FF7BEE736F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-30],rax
       mov       [rbp-40],rbx
       xor       ecx,ecx
       mov       [rbp-38],ecx
       mov       [rbp-34],r14d
       mov       rcx,[rbp-30]
       mov       [rbp-48],rcx
       lea       rcx,[rbp-40]
       mov       rdx,[rbp-48]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FF7BEE735A0]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-60],rax
       cmp       byte ptr [rsi+15],0
       je        near ptr M00_L04
       mov       esi,[rsi+10]
       test      esi,esi
       jne       short M00_L01
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC5BAC8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L01:
       cmp       esi,2
       jne       short M00_L02
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC5BAE0]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L02:
       cmp       esi,1
       jne       short M00_L03
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC5BAF8]
       mov       rax,[rbp-60]
       jmp       short M00_L04
M00_L03:
       cmp       esi,3
       jne       short M00_L04
       cmp       [rax],al
       mov       rcx,rax
       mov       [rbp-58],rcx
       xor       ecx,ecx
       mov       [rbp-50],ecx
       lea       rcx,[rbp-58]
       call      qword ptr [7FF7BEC5BB10]
       mov       rax,[rbp-60]
M00_L04:
       test      rax,rax
       je        short M00_L05
       mov       rcx,rax
       call      qword ptr [7FF7BEE5DE98]; System.Text.Json.JsonDocument.Dispose()
M00_L05:
       nop
       add       rsp,70
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
M00_L06:
       xor       ebx,ebx
       xor       r14d,r14d
       jmp       near ptr M00_L00
       push      rbp
       push      r14
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+90]
       cmp       qword ptr [rbp-60],0
       je        short M00_L07
       mov       rcx,[rbp-60]
       call      qword ptr [7FF7BEE5DE98]; System.Text.Json.JsonDocument.Dispose()
M00_L07:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r14
       pop       rbp
       ret
; Total bytes of code 371
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C4E
       mov       rdx,7FF7BEE5B340
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF7BEE75060]
       int       3
M01_L01:
       mov       ecx,2C4E
       mov       rdx,7FF7BEE5B340
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF7BEE75030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L03
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L04
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       mov       ecx,100000
       cmp       edx,400000
       cmovg     ecx,edx
       cmp       edx,100000
       cmovg     edx,ecx
       mov       rcx,1F3EC807D00
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FF7BEEA02E0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FF7BEEA02E0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FF7BEE733C0]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L02
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FF7BEEA02E8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L02:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L03:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L04:
       call      qword ptr [7FF7BEC1D4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FF7BEE71A38]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L05
       mov       rcx,1F3EC807D00
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FF7BEEA02E8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L05:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 659
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,1F3EC807D00
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FF7BEEA02E8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FF7BE9D10D8]
M03_L04:
       mov       rcx,1F3EC807D00
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FF7BEEA02E8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FF7BEE5FD68]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FF7BEC1D4E0]
       int       3
; Total bytes of code 244

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<ArrayList>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromStream - Duration of single invocation 26.63 μs 23.74 μs 0.89 0.01 False
DeserializeFromString - Duration of single invocation 26.39 μs 22.61 μs 0.86 0.02 False
DeserializeFromReader - Duration of single invocation 29.44 μs 25.56 μs 0.87 0.02 False
DeserializeFromReader - Duration of single invocation 29.21 μs 25.55 μs 0.87 0.02 False
DeserializeFromUtf8Bytes - Duration of single invocation 25.75 μs 22.26 μs 0.86 0.02 False
DeserializeFromUtf8Bytes - Duration of single invocation 25.76 μs 22.34 μs 0.87 0.03 False
DeserializeFromString - Duration of single invocation 26.02 μs 22.45 μs 0.86 0.02 False
DeserializeFromStream - Duration of single invocation 26.17 μs 23.49 μs 0.90 0.04 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<ArrayList>.DeserializeFromStream(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.742787026406425 < 25.158945764855986.
IsChangePoint: Marked as a change because one of 1/12/2023 4:43:01 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 71.99793854850174 (T) = (0 -23210.44924297609) / Math.Sqrt((225416.74235678083 / (299)) + (51002.18296971035 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13915211194942553 = (26962.3118847827 - 23210.44924297609) / 26962.3118847827 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 22.605145234649573 < 24.812140303219554.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 63.644194414933956 (T) = (0 -22747.41347521732) / Math.Sqrt((182080.45447716606 / (299)) + (70890.25713518183 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.13727862192543713 = (26367.045089325835 - 22747.41347521732) / 26367.045089325835 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 25.560400169683255 < 28.044273293603997.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 80.1614280863493 (T) = (0 -25529.636250484855) / Math.Sqrt((218813.11906121526 / (299)) + (62055.77067418919 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.1473718627928751 = (29942.28683809324 - 25529.636250484855) / 29942.28683809324 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 25.54593172784662 < 27.68887053561952.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 92.96356915175315 (T) = (0 -25500.097925994967) / Math.Sqrt((224684.83538509335 / (299)) + (37477.78066517107 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1458238409890906 = (29853.44142070498 - 25500.097925994967) / 29853.44142070498 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 22.25728166195857 < 24.47351270807167.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 55.775742119232504 (T) = (0 -22359.18340197156) / Math.Sqrt((269092.41019372054 / (299)) + (94890.09887943465 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.14217551686210952 = (26064.986301373083 - 22359.18340197156) / 26064.986301373083 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 22.33970767020336 < 24.39489472330086.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 65.82399855938641 (T) = (0 -22391.577914781163) / Math.Sqrt((227733.5373750224 / (299)) + (57058.79136628438 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13780730537923364 = (25970.50294497108 - 22391.577914781163) / 25970.50294497108 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 22.44754818594104 < 24.60311034358026.
IsChangePoint: Marked as a change because one of 1/11/2023 2:37:52 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 75.8159914274535 (T) = (0 -22530.335814911174) / Math.Sqrt((201067.56380677284 / (299)) + (50382.76361394078 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14670205113578297 = (26403.83214901688 - 22530.335814911174) / 26403.83214901688 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;ArrayList&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.493168168168168 < 25.34934099111739.
IsChangePoint: Marked as a change because one of 1/12/2023 4:43:01 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 31.401916540949344 (T) = (0 -23486.597877450884) / Math.Sqrt((350033.96221631655 / (299)) + (292268.9727538062 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.12964344690974527 = (26985.03020866594 - 23486.597877450884) / 26985.03020866594 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromStream<MyEventsListerViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_Reflection_ - Duration of single invocation 419.82 μs 351.35 μs 0.84 0.04 False
SystemTextJson_SourceGen_ - Duration of single invocation 405.19 μs 347.50 μs 0.86 0.05 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromStream&lt;MyEventsListerViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromStream<MyEventsListerViewModel>.SystemTextJson_Reflection_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 351.3531556802244 < 397.7543257829977.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 110.42423820223003 (T) = (0 -350653.56824071705) / Math.Sqrt((59392953.5532472 / (299)) + (4497449.490594957 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1610529735812877 = (417968.6645265114 - 350653.56824071705) / 417968.6645265114 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### MicroBenchmarks.Serializers.Json_FromStream&lt;MyEventsListerViewModel&gt;.SystemTextJson_SourceGen_

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 347.50299026425597 < 394.5572435348002.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 84.83148441137514 (T) = (0 -351423.16103716637) / Math.Sqrt((64408585.28510919 / (299)) + (10248885.205387171 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1585843066165202 = (417657.0080646254 - 351423.16103716637) / 417657.0080646254 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<LoginViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromUtf8Bytes - Duration of single invocation 459.16 ns 417.65 ns 0.91 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 457.93 ns 421.80 ns 0.92 0.02 False
DeserializeFromReader - Duration of single invocation 766.81 ns 720.72 ns 0.94 0.01 False
DeserializeFromReader - Duration of single invocation 782.37 ns 702.26 ns 0.90 0.02 False

graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;LoginViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<LoginViewModel>.DeserializeFromUtf8Bytes(Mode: SourceGen)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 417.6519049497025 < 429.70732795362454.
IsChangePoint: Marked as a change because one of 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 50.43712959644472 (T) = (0 -425.78572433826076) / Math.Sqrt((56.481713129165804 / (299)) + (10.045772957525518 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08149133937279708 = (463.5620137185351 - 425.78572433826076) / 463.5620137185351 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;LoginViewModel&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 421.80116603549885 < 434.57902370127334.
IsChangePoint: Marked as a change because one of 1/13/2023 4:37:08 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 48.23489449272728 (T) = (0 -426.7058662172912) / Math.Sqrt((47.39699037978926 / (299)) + (10.003598936058456 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.07691043850904565 = (462.2583593384862 - 426.7058662172912) / 462.2583593384862 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;LoginViewModel&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 720.7160000307206 < 733.5997739442887.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 39.90611505374121 (T) = (0 -712.2152400223961) / Math.Sqrt((119.15346991725731 / (299)) + (57.674735506899744 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.08310553570706684 = (776.7690478659654 - 712.2152400223961) / 776.7690478659654 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;LoginViewModel&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 702.2560638149523 < 738.5394050308694.
IsChangePoint: Marked as a change because one of 1/11/2023 4:46:06 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 52.35526407794942 (T) = (0 -710.7371491740196) / Math.Sqrt((168.13899970932223 / (299)) + (31.633674073311415 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08842270434630964 = (779.6784239391914 - 710.7371491740196) / 779.6784239391914 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromStream - Duration of single invocation 14.06 μs 13.12 μs 0.93 0.01 False
DeserializeFromReader - Duration of single invocation 15.89 μs 14.91 μs 0.94 0.01 False
DeserializeFromStream - Duration of single invocation 14.09 μs 13.04 μs 0.93 0.01 False

graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromStream(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 13.11583190896006 < 13.413883979373166.
IsChangePoint: Marked as a change because one of 12/21/2022 3:18:57 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 52.114762024004804 (T) = (0 -13127.223829071407) / Math.Sqrt((64947.62041102701 / (299)) + (7949.006180233956 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08239815692229238 = (14306.012927177306 - 13127.223829071407) / 14306.012927177306 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 14.910676337153772 < 14.963407717076661.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 43.080076651034354 (T) = (0 -14668.158371860362) / Math.Sqrt((84454.939261394 / (299)) + (18054.598663670804 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08305537939717975 = (15996.776732511044 - 14668.158371860362) / 15996.776732511044 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;HashSet&lt;String&gt;&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 13.035633246527775 < 13.357875406876545.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/18/2023 3:58:17 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 54.06943198574507 (T) = (0 -13080.588921132925) / Math.Sqrt((50165.94611806056 / (299)) + (8449.328077408867 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08309829325452034 = (14266.07544178553 - 13080.588921132925) / 14266.07544178553 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Document.Tests.Perf_EnumerateArray

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Parse - Duration of single invocation 11.29 μs 9.68 μs 0.86 0.01 False Trace Trace
Parse - Duration of single invocation 1.04 ms 754.72 μs 0.73 0.00 False Trace Trace

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_EnumerateArray*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse(TestCase: ArrayOfStrings)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 9.675787123089632 < 10.72636273928697.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 134.94079548641926 (T) = (0 -9711.54502274799) / Math.Sqrt((18537.650872717746 / (299)) + (2568.853317302068 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14980247511890032 = (11422.692654987619 - 9711.54502274799) / 11422.692654987619 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FFB9AA0B6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFB9AA0D768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FFB9A9FE3F0]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FFB9A9FE3F0]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFB9A86FB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB9AB0B060]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFB9A86FB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB9AB0B030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,23D2FC01EF8
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFB9AB14350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFB9AB14350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFB9AA0D588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFB9AB14358]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFB9A81D4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFB9AA0D0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,23D2FC01EF8
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFB9AB14358]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,23D2FC01EF8
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFB9AB14358]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFB9A5D10D8]
M03_L04:
       mov       rcx,23D2FC01EF8
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFB9AB14358]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFB9AB13DD8]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFB9A81D4E0]
       int       3
; Total bytes of code 244

Compare Jit Disasm

; System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FF9A825B6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FF9A825D768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FF9A824F470]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FF9A824F470]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C4E
       mov       rdx,7FF9A80F2F00
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF9A835B060]
       int       3
M01_L01:
       mov       ecx,2C4E
       mov       rdx,7FF9A80F2F00
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF9A835B030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L03
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L04
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       mov       ecx,100000
       cmp       edx,400000
       cmovg     ecx,edx
       cmp       edx,100000
       cmovg     edx,ecx
       mov       rcx,10580001EF8
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FF9A8365268]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FF9A8365268]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FF9A825D588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L02
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FF9A8365270]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L02:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L03:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L04:
       call      qword ptr [7FF9A806D4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FF9A825D0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L05
       mov       rcx,10580001EF8
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FF9A8365270]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L05:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 659
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,10580001EF8
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FF9A8365270]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FF9A7E210D8]
M03_L04:
       mov       rcx,10580001EF8
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FF9A8365270]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FF9A8364CF0]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FF9A806D4E0]
       int       3
; Total bytes of code 244

System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse(TestCase: Json400KB)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 754.719345238095 < 0.9924835381944445.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 201.51514432165524 (T) = (0 -758088.5170118342) / Math.Sqrt((101492302.8545035 / (299)) + (41572422.64783614 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.2701208093841805 = (1038649.3090345728 - 758088.5170118342) / 1038649.3090345728 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FFB9AAFB6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFB9AAFD768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FFB9AAEE3F0]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FFB9AAEE3F0]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFB9A95FB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB9AC21060]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFB9A95FB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB9AC21030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,15AA2001F00
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFB9AC09ED8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFB9AC09ED8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFB9AAFD588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFB9AC09EE0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFB9A90D4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFB9AAFD0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,15AA2001F00
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFB9AC09EE0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,15AA2001F00
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFB9AC09EE0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFB9A6C10D8]
M03_L04:
       mov       rcx,15AA2001F00
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFB9AC09EE0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFB9AC09960]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFB9A90D4E0]
       int       3
; Total bytes of code 244

Compare Jit Disasm

; System.Text.Json.Document.Tests.Perf_EnumerateArray.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FF9A82CB6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FF9A82CD768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FF9A82BF470]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FF9A82BF470]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C4E
       mov       rdx,7FF9A8162F00
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF9A83F1060]
       int       3
M01_L01:
       mov       ecx,2C4E
       mov       rdx,7FF9A8162F00
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FF9A83F1030]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L03
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L04
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       mov       ecx,100000
       cmp       edx,400000
       cmovg     ecx,edx
       cmp       edx,100000
       cmovg     edx,ecx
       mov       rcx,23314801F00
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FF9A83DADF0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FF9A83DADF0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FF9A82CD588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L02
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FF9A83DADF8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L02:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L03:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L04:
       call      qword ptr [7FF9A80DD4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FF9A82CD0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L05
       mov       rcx,23314801F00
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FF9A83DADF8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L05:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 659
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,23314801F00
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FF9A83DADF8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FF9A7E910D8]
M03_L04:
       mov       rcx,23314801F00
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FF9A83DADF8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FF9A83DA878]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FF9A80DD4E0]
       int       3
; Total bytes of code 244

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromStream<IndexViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_Reflection_ - Duration of single invocation 32.87 μs 27.29 μs 0.83 0.01 False
SystemTextJson_SourceGen_ - Duration of single invocation 31.79 μs 27.49 μs 0.86 0.01 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromStream&lt;IndexViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromStream<IndexViewModel>.SystemTextJson_Reflection_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.286008400318632 < 30.969152689522005.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 88.2417101175405 (T) = (0 -27792.450427714695) / Math.Sqrt((243546.47008465274 / (299)) + (64442.746177767796 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1541198637205928 = (32856.25141874052 - 27792.450427714695) / 32856.25141874052 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### MicroBenchmarks.Serializers.Json_FromStream&lt;IndexViewModel&gt;.SystemTextJson_SourceGen_

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.488182051000617 < 30.446593648347356.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 103.848248187187 (T) = (0 -27475.31059628287) / Math.Sqrt((269591.49738027115 / (299)) + (41244.118641297624 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.15862373560644297 = (32655.20048403836 - 27475.31059628287) / 32655.20048403836 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Document.Tests.Perf_ParseThenWrite

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ParseThenWrite - Duration of single invocation 1.89 ms 1.59 ms 0.84 0.00 False
ParseThenWrite - Duration of single invocation 5.32 μs 4.83 μs 0.91 0.01 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_ParseThenWrite*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Document.Tests.Perf_ParseThenWrite.ParseThenWrite(IsDataIndented: False, TestCase: Json400KB)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 1.5939830997876856 < 1.8049365448717947.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 109.22013889484084 (T) = (0 -1590461.059268473) / Math.Sqrt((238683485.45225197 / (299)) + (180457631.4521405 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.16039652357329812 = (1894300.2309106346 - 1590461.059268473) / 1894300.2309106346 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Document.Tests.Perf_ParseThenWrite.ParseThenWrite(IsDataIndented: True, TestCase: LotsOfStrings)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 4.826037020660309 < 5.109659622379169.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 54.292813006589604 (T) = (0 -4870.320116281407) / Math.Sqrt((4371.867393472423 / (299)) + (2438.7613802309174 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.10249547411382127 = (5426.5131548752315 - 4870.320116281407) / 5426.5131548752315 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromString<IndexViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_SourceGen_ - Duration of single invocation 31.69 μs 26.92 μs 0.85 0.00 False
SystemTextJson_Reflection_ - Duration of single invocation 31.56 μs 27.29 μs 0.86 0.02 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromString&lt;IndexViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromString<IndexViewModel>.SystemTextJson_SourceGen_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 26.922591438294816 < 30.084202978319606.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 70.99735059915731 (T) = (0 -27370.693085130068) / Math.Sqrt((138755.27218050856 / (299)) + (92429.52693947956 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.13921321179698917 = (31797.29691515069 - 27370.693085130068) / 31797.29691515069 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### MicroBenchmarks.Serializers.Json_FromString&lt;IndexViewModel&gt;.SystemTextJson_Reflection_

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 27.292011625794736 < 29.85048869829029.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 106.1691412242242 (T) = (0 -27093.334805733848) / Math.Sqrt((227522.9453265102 / (299)) + (31092.494960598004 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.14773546194016046 = (31789.81829680629 - 27093.334805733848) / 31789.81829680629 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromStream<CollectionsOfPrimitives>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_SourceGen_ - Duration of single invocation 356.76 μs 337.05 μs 0.94 0.00 False
SystemTextJson_Reflection_ - Duration of single invocation 352.81 μs 333.57 μs 0.95 0.00 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromStream&lt;CollectionsOfPrimitives&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromStream<CollectionsOfPrimitives>.SystemTextJson_SourceGen_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 337.05206819201436 < 337.9179495238095.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 5:52:57 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 31.76745625359007 (T) = (0 -335017.19223154057) / Math.Sqrt((27698893.27069173 / (299)) + (8908905.441063108 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.05887760362342085 = (355976.2189502579 - 335017.19223154057) / 355976.2189502579 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### MicroBenchmarks.Serializers.Json_FromStream&lt;CollectionsOfPrimitives&gt;.SystemTextJson_Reflection_

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 333.56823949955316 < 336.2971802450117.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/18/2023 3:58:17 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 46.26341677719651 (T) = (0 -332875.86544472526) / Math.Sqrt((21401935.876496486 / (299)) + (4249640.910494953 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.06235691258020889 = (355013.4053254037 - 332875.86544472526) / 355013.4053254037 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Reader.Tests.Perf_Base64

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ReadBase64EncodedByteArray_NoEscaping - Duration of single invocation 115.08 ns 92.58 ns 0.80 0.32 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Reader.Tests.Perf_Base64*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Reader.Tests.Perf_Base64.ReadBase64EncodedByteArray_NoEscaping(NumberOfBytes: 100)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 92.58308303141335 < 109.89295768624987.
IsChangePoint: Marked as a change because one of 12/14/2022 9:46:59 AM, 2/3/2023 2:46:32 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 15.259786819886605 (T) = (0 -93.26918897454577) / Math.Sqrt((78.13924124610658 / (299)) + (16.022193281378414 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1328989946970839 = (107.56438800571196 - 93.26918897454577) / 107.56438800571196 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<ImmutableSortedDictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromReader - Duration of single invocation 96.19 μs 84.05 μs 0.87 0.10 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;ImmutableSortedDictionary&lt;String, String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<ImmutableSortedDictionary<String, String>>.DeserializeFromReader(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 84.04890232974913 < 93.45450183077274.
IsChangePoint: Marked as a change because one of 1/13/2023 4:18:46 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 19.046605627028548 (T) = (0 -86798.22844732698) / Math.Sqrt((7367009.398935556 / (299)) + (6373640.31351241 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.10231401216267005 = (96691.08087165077 - 86798.22844732698) / 96691.08087165077 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromString<MyEventsListerViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_Reflection_ - Duration of single invocation 365.70 μs 321.60 μs 0.88 0.02 False
SystemTextJson_SourceGen_ - Duration of single invocation 361.31 μs 310.03 μs 0.86 0.02 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromString&lt;MyEventsListerViewModel&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromString<MyEventsListerViewModel>.SystemTextJson_Reflection_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 321.6007426376441 < 357.7831028999779.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 76.28745616295554 (T) = (0 -316891.0461058444) / Math.Sqrt((62540195.05678974 / (299)) + (11429217.673852239 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.16241015977160309 = (378336.78357348917 - 316891.0461058444) / 378336.78357348917 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### MicroBenchmarks.Serializers.Json_FromString&lt;MyEventsListerViewModel&gt;.SystemTextJson_SourceGen_

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 310.02862111801227 < 357.4044897319875.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 118.005800223411 (T) = (0 -312519.7366624175) / Math.Sqrt((47562182.791577525 / (299)) + (3560075.854618522 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.1704223289148564 = (376721.4904104405 - 312519.7366624175) / 376721.4904104405 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

performanceautofiler bot commented Feb 14, 2023

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
DeserializeFromStream - Duration of single invocation 22.74 μs 20.04 μs 0.88 0.00 False
DeserializeFromUtf8Bytes - Duration of single invocation 19.78 μs 18.31 μs 0.93 0.00 False
DeserializeFromStream - Duration of single invocation 23.07 μs 20.32 μs 0.88 0.01 False
DeserializeFromString - Duration of single invocation 20.80 μs 18.91 μs 0.91 0.01 False
DeserializeFromString - Duration of single invocation 21.40 μs 18.59 μs 0.87 0.00 False
DeserializeFromReader - Duration of single invocation 29.11 μs 23.50 μs 0.81 0.01 False
DeserializeFromUtf8Bytes - Duration of single invocation 20.20 μs 18.07 μs 0.89 0.01 False
DeserializeFromReader - Duration of single invocation 29.16 μs 23.11 μs 0.79 0.01 False

graph
graph
graph
graph
graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromStream(Mode: Reflection)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 20.040059588299023 < 21.967055909438926.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 5:52:57 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 79.71792695073452 (T) = (0 -19905.774661170286) / Math.Sqrt((236240.84732172373 / (299)) + (24952.198465414993 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.1422285203817637 = (23206.384374110505 - 19905.774661170286) / 23206.384374110505 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromUtf8Bytes(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 18.31135959219561 < 19.089250299539444.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 2:19:41 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 57.070153001297506 (T) = (0 -18212.719575661882) / Math.Sqrt((187490.10667400196 / (299)) + (28678.916977565692 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.11409508555373273 = (20558.32322258388 - 18212.719575661882) / 20558.32322258388 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromStream(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 20.315748814174107 < 21.758379179078528.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 68.74454272441201 (T) = (0 -19915.367531609198) / Math.Sqrt((217758.16881373854 / (299)) + (38778.35812710973 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.13988184995175396 = (23154.223091899756 - 19915.367531609198) / 23154.223091899756 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromString(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 18.911375685982698 < 19.810851022081923.
IsChangePoint: Marked as a change because one of 12/21/2022 3:18:57 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 53.49070565736236 (T) = (0 -18880.415095189164) / Math.Sqrt((181025.17770758527 / (299)) + (34609.044436106946 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.10959018408670551 = (21204.18571062528 - 18880.415095189164) / 21204.18571062528 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromString(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 18.58815214390872 < 19.82998735796067.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 60.0789405036125 (T) = (0 -18839.332496354797) / Math.Sqrt((154644.23877217504 / (299)) + (28475.800904222924 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.11224279165498001 = (21221.266714888825 - 18839.332496354797) / 21221.266714888825 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromReader(Mode: SourceGen)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.49609038833907 < 27.817325852035417.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 105.19118979108114 (T) = (0 -23502.155540540876) / Math.Sqrt((226033.5173095299 / (299)) + (65871.78248052608 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.20426903879046687 = (29535.303621737865 - 23502.155540540876) / 29535.303621737865 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromUtf8Bytes(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 18.06899030493868 < 19.232942803210957.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 72.2807505197199 (T) = (0 -18079.76565269925) / Math.Sqrt((189502.0364747745 / (299)) + (13861.080593611458 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.12015788398204186 = (20548.87498966943 - 18079.76565269925) / 20548.87498966943 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Serialization.Tests.ReadJson&lt;Dictionary&lt;String, String&gt;&gt;.DeserializeFromReader(Mode: Reflection)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.11145655270655 < 27.480812946147765.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 109.41313385698278 (T) = (0 -23447.171191436224) / Math.Sqrt((303852.1753234703 / (299)) + (54416.51782874406 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.20441226194534448 = (29471.50901139887 - 23447.171191436224) / 29471.50901139887 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Document.Tests.Perf_EnumerateObject

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
Parse - Duration of single invocation 22.14 μs 18.07 μs 0.82 0.11 False
Parse - Duration of single invocation 954.42 μs 703.63 μs 0.74 0.01 False Trace Trace

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Document.Tests.Perf_EnumerateObject*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Document.Tests.Perf_EnumerateObject.Parse(TestCase: StringProperties)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 18.07164904956475 < 20.984796107496297.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 62.154295866741755 (T) = (0 -16995.69561055618) / Math.Sqrt((242126.29914400412 / (299)) + (148831.1990833042 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.2281647308188265 = (22019.848391466505 - 16995.69561055618) / 22019.848391466505 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_EnumerateObject.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FFF8FF8B6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFF8FF8D768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FFF8FF7E3F0]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FFF8FF7E3F0]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFF8FDEFB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF9008B7B0]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFF8FDEFB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF9008B780]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,1ACA2801EF8
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFF90096348]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFF90096348]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFF8FF8D588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFF90096350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFF8FD9D4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFF8FF8D0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,1ACA2801EF8
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFF90096350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,1ACA2801EF8
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFF90096350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFF8FB510D8]
M03_L04:
       mov       rcx,1ACA2801EF8
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFF90096350]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFF90095DD0]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFF8FD9D4E0]
       int       3
; Total bytes of code 244

System.Text.Json.Document.Tests.Perf_EnumerateObject.Parse(TestCase: ObjectProperties)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 703.6290217391305 < 907.5560955882354.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 208.00505809189787 (T) = (0 -717995.9471092847) / Math.Sqrt((74221060.21732788 / (299)) + (29216106.41535533 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.25045334475490316 = (957906.9455983427 - 717995.9471092847) / 957906.9455983427 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Document.Tests.Perf_EnumerateObject.Parse()
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,58
       lea       rbp,[rsp+70]
       xor       eax,eax
       mov       [rbp-38],rax
       mov       [rbp-30],rax
       mov       [rbp-50],rsp
       mov       rsi,[rcx+8]
       test      rsi,rsi
       je        short M00_L01
       mov       rdi,rsi
       mov       ebx,[rdi+8]
M00_L00:
       xor       ecx,ecx
       mov       [rbp-20],rcx
       lea       rcx,[rbp-20]
       call      qword ptr [7FFF8FF9B6F0]; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       mov       [rbp-28],rax
       mov       [rbp-38],rdi
       xor       ecx,ecx
       mov       [rbp-30],ecx
       mov       [rbp-2C],ebx
       mov       rcx,[rbp-28]
       mov       [rbp-40],rcx
       lea       rcx,[rbp-38]
       mov       rdx,[rbp-40]
       xor       r8d,r8d
       xor       r9d,r9d
       call      qword ptr [7FFF8FF9D768]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       mov       [rbp-48],rax
       cmp       [rax],al
       mov       rcx,rax
       call      qword ptr [7FFF8FF8E3F0]; System.Text.Json.JsonDocument.Dispose()
       nop
       add       rsp,58
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
M00_L01:
       xor       edi,edi
       xor       ebx,ebx
       jmp       short M00_L00
       push      rbp
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+70]
       cmp       qword ptr [rbp-48],0
       je        short M00_L02
       mov       rcx,[rbp-48]
       call      qword ptr [7FFF8FF8E3F0]; System.Text.Json.JsonDocument.Dispose()
M00_L02:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       rbp
       ret
; Total bytes of code 181
; System.Text.Json.JsonDocumentOptions.GetReaderOptions()
       sub       rsp,28
       xor       eax,eax
       mov       [rsp+20],rax
       movzx     eax,byte ptr [rcx+5]
       mov       [rsp+25],al
       movzx     eax,byte ptr [rcx+4]
       cmp       eax,2
       jg        short M01_L00
       mov       [rsp+24],al
       mov       eax,[rcx]
       test      eax,eax
       jl        short M01_L01
       mov       [rsp+20],eax
       mov       rax,[rsp+20]
       add       rsp,28
       ret
M01_L00:
       mov       ecx,2C7A
       mov       rdx,7FFF8FDFFB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF9009F438]
       int       3
M01_L01:
       mov       ecx,2C7A
       mov       rdx,7FFF8FDFFB58
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF9009F408]
       int       3
; Total bytes of code 112
; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1<Byte>, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter)
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,88
       vzeroupper
       lea       rbp,[rsp+0C0]
       xor       eax,eax
       mov       [rbp-88],rax
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rbp-80],xmm4
       vmovdqa   xmmword ptr [rbp-70],xmm4
       vmovdqa   xmmword ptr [rbp-60],xmm4
       vmovdqa   xmmword ptr [rbp-50],xmm4
       mov       [rbp-40],rax
       mov       [rbp-0A0],rsp
       mov       [rbp+18],rdx
       mov       rbx,r8
       mov       r14,r9
       mov       r15,[rcx]
       mov       r12d,[rcx+8]
       mov       r13d,[rcx+0C]
       xor       ecx,ecx
       xor       esi,esi
       mov       rdx,r15
       test      rdx,rdx
       je        short M02_L01
       mov       rcx,[r15]
       test      dword ptr [rcx],80000000
       je        near ptr M02_L04
       lea       rcx,[r15+10]
       mov       esi,[r15+8]
M02_L00:
       mov       edx,r12d
       and       edx,7FFFFFFF
       mov       eax,r13d
       add       rax,rdx
       mov       r8d,esi
       cmp       rax,r8
       ja        near ptr M02_L05
       add       rcx,rdx
       mov       esi,r13d
M02_L01:
       mov       rdi,rcx
       lea       edx,[r13+0C]
       cmp       edx,100000
       jle       short M02_L02
       cmp       edx,400000
       jg        short M02_L02
       mov       edx,100000
M02_L02:
       mov       rcx,23303001F00
       mov       rax,[rcx]
       mov       [rbp-98],rax
       mov       rcx,rax
       call      qword ptr [7FFF900A87B8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-48],rax
       xor       ecx,ecx
       mov       [rbp-40],ecx
       mov       byte ptr [rbp-3C],0
       mov       byte ptr [rbp-3B],0
       mov       rcx,[rbp-98]
       mov       edx,200
       call      qword ptr [7FFF900A87B8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32)
       mov       [rbp-58],rax
       mov       rcx,[rbp-58]
       mov       ecx,[rcx+8]
       mov       [rbp-50],ecx
       mov       [rbp-88],rdi
       mov       [rbp-80],esi
       lea       rcx,[rbp-88]
       lea       r9,[rbp-58]
       lea       r8,[rbp-48]
       mov       rdx,[rbp+18]
       call      qword ptr [7FFF8FF9D588]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1<Byte>, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef)
       nop
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L03
       mov       rcx,[rbp-98]
       xor       r8d,r8d
       call      qword ptr [7FFF900A87C0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L03:
       mov       rcx,offset MT_System.Text.Json.JsonDocument
       call      CORINFO_HELP_NEWSFAST
       mov       rsi,rax
       mov       [rbp-90],rsi
       vmovdqu   xmm0,xmmword ptr [rbp-48]
       vmovdqu   xmmword ptr [rbp-78],xmm0
       lea       rdi,[rsi+20]
       mov       rcx,rdi
       mov       rdx,r15
       call      CORINFO_HELP_CHECKED_ASSIGN_REF
       mov       [rdi+8],r12d
       mov       [rdi+0C],r13d
       lea       rdi,[rsi+30]
       lea       rsi,[rbp-78]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       r15,[rbp-90]
       lea       rcx,[r15+8]
       mov       rdx,rbx
       call      CORINFO_HELP_ASSIGN_REF
       lea       rcx,[r15+10]
       mov       rdx,r14
       call      CORINFO_HELP_ASSIGN_REF
       mov       byte ptr [r15+18],1
       mov       rax,r15
       add       rsp,88
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
M02_L04:
       lea       rdx,[rbp-68]
       mov       rcx,r15
       mov       rax,[r15]
       mov       rax,[rax+40]
       call      qword ptr [rax+28]
       mov       rcx,[rbp-68]
       mov       esi,[rbp-60]
       jmp       near ptr M02_L00
M02_L05:
       call      qword ptr [7FFF8FDAD4E0]
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       lea       rcx,[rbp-48]
       call      qword ptr [7FFF8FF9D0A8]; System.Text.Json.JsonDocument+MetadataDb.Dispose()
       call      CORINFO_HELP_RETHROW
       int       3
       push      rbp
       push      r15
       push      r14
       push      r13
       push      r12
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,28
       vzeroupper
       mov       rbp,[rcx+20]
       mov       [rsp+20],rbp
       lea       rbp,[rbp+0C0]
       mov       rdx,[rbp-58]
       xor       ecx,ecx
       mov       [rbp-58],rcx
       mov       [rbp-50],ecx
       test      rdx,rdx
       je        short M02_L06
       mov       rcx,23303001F00
       mov       rcx,[rcx]
       mov       rsi,rcx
       mov       rcx,rsi
       xor       r8d,r8d
       call      qword ptr [7FFF900A87C0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
M02_L06:
       nop
       add       rsp,28
       pop       rbx
       pop       rsi
       pop       rdi
       pop       r12
       pop       r13
       pop       r14
       pop       r15
       pop       rbp
       ret
; Total bytes of code 657
; System.Text.Json.JsonDocument.Dispose()
       push      rdi
       push      rsi
       push      rbx
       sub       rsp,30
       mov       rsi,rcx
       mov       edi,[rsi+2C]
       test      edi,edi
       je        short M03_L00
       cmp       byte ptr [rsi+18],0
       jne       short M03_L01
M03_L00:
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L01:
       lea       rbx,[rsi+30]
       xor       ecx,ecx
       mov       rdx,rcx
       xchg      rdx,[rbx]
       test      rdx,rdx
       je        short M03_L02
       mov       rcx,23303001F00
       mov       rcx,[rcx]
       xor       r8d,r8d
       call      qword ptr [7FFF900A87C0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       xor       edx,edx
       mov       [rbx+8],edx
M03_L02:
       xor       edx,edx
       mov       [rsi+20],rdx
       mov       [rsi+28],rdx
       cmp       qword ptr [rsi+8],0
       je        short M03_L05
       add       rsi,8
       xor       edx,edx
       mov       rbx,rdx
       xchg      rbx,[rsi]
       test      rbx,rbx
       je        short M03_L06
       cmp       [rbx+8],edi
       jb        short M03_L07
       lea       rcx,[rbx+10]
       mov       edx,edi
       mov       [rsp+28],rdx
       test      rdx,rdx
       je        short M03_L04
       cmp       rdx,300
       ja        short M03_L03
       xor       edx,edx
       mov       r8d,[rsp+28]
       call      CORINFO_HELP_MEMSET
       jmp       short M03_L04
M03_L03:
       mov       rdx,[rsp+28]
       call      qword ptr [7FFF8FB610D8]
M03_L04:
       mov       rcx,23303001F00
       mov       rcx,[rcx]
       mov       rdx,rbx
       xor       r8d,r8d
       call      qword ptr [7FFF900A87C0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean)
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L05:
       cmp       qword ptr [rsi+10],0
       je        short M03_L06
       lea       rcx,[rsi+10]
       xor       eax,eax
       xchg      rax,[rcx]
       test      rax,rax
       je        short M03_L06
       mov       rcx,rax
       call      qword ptr [7FFF900A8240]; System.Text.Json.PooledByteBufferWriter.Dispose()
M03_L06:
       nop
       add       rsp,30
       pop       rbx
       pop       rsi
       pop       rdi
       ret
M03_L07:
       call      qword ptr [7FFF8FDAD4E0]
       int       3
; Total bytes of code 244

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Node.Tests.Perf_ParseThenWrite

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ParseThenWrite - Duration of single invocation 9.38 μs 8.70 μs 0.93 0.00 False
ParseThenWrite - Duration of single invocation 42.08 μs 39.58 μs 0.94 0.00 False

graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Node.Tests.Perf_ParseThenWrite*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Node.Tests.Perf_ParseThenWrite.ParseThenWrite(IsDataIndented: True, TestCase: LotsOfStrings)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 8.704494927948428 < 8.97161694761203.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 70.60802975383592 (T) = (0 -8687.533549347112) / Math.Sqrt((10115.104693093564 / (299)) + (2560.636883583928 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.08441005795254328 = (9488.454547589188 - 8687.533549347112) / 9488.454547589188 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```#### System.Text.Json.Node.Tests.Perf_ParseThenWrite.ParseThenWrite(IsDataIndented: False, TestCase: Json4KB)

```log

Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 39.58440203274986 < 39.74572031284052.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 56.03917817336305 (T) = (0 -39355.256734308845) / Math.Sqrt((152067.37135728888 / (299)) + (40639.0836945007 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.06086569961613796 = (41905.88792063368 - 39355.256734308845) / 41905.88792063368 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_FromString<CollectionsOfPrimitives>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
SystemTextJson_SourceGen_ - Duration of single invocation 316.63 μs 298.52 μs 0.94 0.01 False

graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_FromString&lt;CollectionsOfPrimitives&gt;*'

Payloads

Baseline
Compare

Histogram

MicroBenchmarks.Serializers.Json_FromString<CollectionsOfPrimitives>.SystemTextJson_SourceGen_


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 298.51660707191104 < 301.42948121126875.
IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 41.10158236589119 (T) = (0 -297971.5812937096) / Math.Sqrt((15043288.924037028 / (299)) + (4514418.2657375 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.06044340620686068 = (317140.6419391417 - 297971.5812937096) / 317140.6419391417 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@performanceautofiler
Copy link
Author

Run Information

Architecture x64
OS Windows 10.0.18362
Baseline 59dddfdef247b9b85a69d663a1d1c1746206711e
Compare 081d93a5e8817d47e660a38404c08364c286172f
Diff Diff

Improvements in System.Text.Json.Tests.Perf_Depth

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
ReadSpanEmptyLoop - Duration of single invocation 25.72 μs 23.46 μs 0.91 0.00 False 299655.7054525014 268670.96611026814 0.8965988673719923) Trace Trace
ReadSpanEmptyLoop - Duration of single invocation 3.06 μs 2.77 μs 0.91 0.00 False 35345.434432823815 31566.617183150862 0.893088957306358) Trace Trace
ReadSpanEmptyLoop - Duration of single invocation 104.83 ns 85.28 ns 0.81 0.21 False 973.9297666635679 936.5687526607067 0.9616389032539272) Trace Trace
ReadSpanEmptyLoop - Duration of single invocation 3.00 μs 2.72 μs 0.91 0.01 False 34709.734167318216 31022.492086681275 0.8937692215427927) Trace Trace

graph
graph
graph
graph
Test Report

Repro

General Docs link: https://github.com/dotnet/performance/blob/main/docs/benchmarking-workflow-dotnet-runtime.md

Payloads

Baseline
Compare

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Depth*'

Payloads

Baseline
Compare

Histogram

System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop(Depth: 512)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 23.456908470970976 < 24.18283430870981.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 132.44035187203525 (T) = (0 -23268.09409215784) / Math.Sqrt((21114.085953464375 / (299)) + (5384.048517362515 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.08663392667806005 = (25475.10223095005 - 23268.09409215784) / 25475.10223095005 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFB33DBB1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DBB408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DBB7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFB33D11378]
       int       3
M00_L09:
       mov       ecx,2C7A
       mov       rdx,7FFB33CBAEE0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB33D11030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,21E4D801F00
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFB33DBB450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D11378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D11378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D11378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D11378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFB33D11378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Compare Jit Disasm

; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFF11E1B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E1B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E1B7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFF11D71378]
       int       3
M00_L09:
       mov       ecx,2C4E
       mov       rdx,7FFF11D1C0E0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF11D71030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,2B827401F10
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFF11E1B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11D71378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11D71378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11D71378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11D71378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFF11D71378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop(Depth: 65)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 2.7749811770910116 < 2.906482585961339.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 35.439558824489545 (T) = (0 -2842.1762875858703) / Math.Sqrt((829.861454569371 / (299)) + (927.9115750474341 / (27))) is greater than 1.9673127716992511 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (27) - 2, .975) and 0.07062585975519464 = (3058.161578325405 - 2842.1762875858703) / 3058.161578325405 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFB33DAB1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DAB408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DAB7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M00_L09:
       mov       ecx,2C7A
       mov       rdx,7FFB33CAAEE0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB33D01030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,1C830401F00
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFB33D01378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Compare Jit Disasm

; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFF11E4B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E4B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E4B7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M00_L09:
       mov       ecx,2C4E
       mov       rdx,7FFF11D4C0E0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF11DA1030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,210DC401F10
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop(Depth: 1)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 85.28263042605782 < 98.32132331224366.
IsChangePoint: Marked as a change because one of 1/18/2023 3:20:52 PM, 2/6/2023 2:23:37 PM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 10.391231470409489 (T) = (0 -85.8632880153219) / Math.Sqrt((48.44677784460541 / (299)) + (2.614665461840163 / (36))) is greater than 1.9671134448822736 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (36) - 2, .975) and 0.055377862406651754 = (90.89696779082401 - 85.8632880153219) / 90.89696779082401 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFB33D8B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33D8B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33D8B7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFB33CE1378]
       int       3
M00_L09:
       mov       ecx,2C7A
       mov       rdx,7FFB33C8AEE0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB33CE1030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,1A809401F00
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFB33D8B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33CE1378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33CE1378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33CE1378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33CE1378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFB33CE1378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Compare Jit Disasm

; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFF11F2B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11F2B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11F2B7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFF11E81378]
       int       3
M00_L09:
       mov       ecx,2C4E
       mov       rdx,7FFF11E2C0E0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF11E81030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,21085401F10
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFF11F2B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11E81378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11E81378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11E81378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11E81378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFF11E81378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop(Depth: 64)


Description of detection logic

IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small.
IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small.
IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline.
IsImprovementWindowed:Marked as improvement because 2.7211581207756677 < 2.864119837512038.
IsChangePoint: Marked as a change because one of 2/8/2023 6:12:15 AM, 2/14/2023 2:39:38 AM falls between 2/4/2023 10:21:07 PM and 2/14/2023 2:39:38 AM.
IsImprovementStdDev: Marked as improvement because 12.767358569842166 (T) = (0 -2836.692005811512) / Math.Sqrt((1333.41003847593 / (299)) + (5623.266147104838 / (26))) is greater than 1.967335607330539 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (26) - 2, .975) and 0.0626782866152646 = (3026.3803401801238 - 2836.692005811512) / 3026.3803401801238 is greater than 0.05.
IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so.

```### Baseline Jit Disasm

```assembly
; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFB33DAB1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DAB408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFB33DAB7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M00_L09:
       mov       ecx,2C7A
       mov       rdx,7FFB33CAAEE0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFB33D01030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,1A604001F00
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFB33DAB450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFB33D01378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFB33D01378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Compare Jit Disasm

; System.Text.Json.Tests.Perf_Depth.ReadSpanEmptyLoop()
       sub       rsp,128
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqa   xmmword ptr [rsp+20],xmm4
       mov       rax,0FFFFFFFFFFFFFF10
M00_L00:
       vmovdqa   xmmword ptr [rsp+rax+120],xmm4
       vmovdqa   xmmword ptr [rsp+rax+130],xmm4
       vmovdqa   xmmword ptr [rsp+rax+140],xmm4
       add       rax,30
       jne       short M00_L00
       mov       [rsp+120],rax
       mov       rdx,[rcx+8]
       test      rdx,rdx
       je        near ptr M00_L06
       lea       r9,[rdx+10]
       mov       r8d,[rdx+8]
M00_L01:
       mov       edx,[rcx+10]
       test      edx,edx
       jl        near ptr M00_L09
       xor       ecx,ecx
       mov       [rsp+30],rcx
       mov       [rsp+38],rcx
       mov       byte ptr [rsp+40],0
       mov       byte ptr [rsp+41],0
       mov       byte ptr [rsp+42],0
       mov       byte ptr [rsp+43],0
       mov       byte ptr [rsp+44],0
       mov       byte ptr [rsp+45],0
       mov       [rsp+48],edx
       mov       byte ptr [rsp+4C],0
       mov       byte ptr [rsp+4D],0
       vxorps    xmm0,xmm0,xmm0
       vmovdqu   xmmword ptr [rsp+50],xmm0
       mov       [rsp+60],rcx
       mov       [rsp+20],r9
       mov       [rsp+28],r8d
       lea       rdx,[rsp+20]
       lea       rcx,[rsp+68]
       lea       r9,[rsp+30]
       mov       r8d,1
       call      qword ptr [7FFF11E4B1F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
M00_L02:
       cmp       byte ptr [rsp+93],0
       jne       short M00_L07
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E4B408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
M00_L03:
       movzx     ecx,al
       test      ecx,ecx
       jne       short M00_L04
       cmp       byte ptr [rsp+8C],0
       je        short M00_L05
       cmp       byte ptr [rsp+90],0
       je        short M00_L08
M00_L04:
       test      ecx,ecx
       jne       short M00_L02
M00_L05:
       add       rsp,128
       ret
M00_L06:
       xor       r9d,r9d
       xor       r8d,r8d
       jmp       near ptr M00_L01
M00_L07:
       lea       rcx,[rsp+68]
       call      qword ptr [7FFF11E4B7B0]
       jmp       short M00_L03
M00_L08:
       xor       r9d,r9d
       mov       [rsp+20],r9
       xor       r9d,r9d
       mov       [rsp+28],r9d
       lea       r9,[rsp+20]
       lea       rcx,[rsp+68]
       mov       edx,20
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M00_L09:
       mov       ecx,2C4E
       mov       rdx,7FFF11D4C0E0
       call      CORINFO_HELP_STRCNS
       mov       rcx,rax
       call      qword ptr [7FFF11DA1030]
       int       3
; Total bytes of code 366
; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1<Byte>, Boolean, System.Text.Json.JsonReaderState)
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,20
       vzeroupper
       vxorps    xmm4,xmm4,xmm4
       vmovdqu   xmmword ptr [rsp+8],xmm4
       xor       eax,eax
       mov       [rsp+18],rax
       mov       rbx,rcx
       mov       r14d,r8d
       mov       rbp,r9
       lea       rdi,[rbx+30]
       mov       rsi,rdx
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       mov       [rbx+24],r14b
       mov       byte ptr [rbx+25],0
       mov       rax,[rbp]
       mov       [rbx],rax
       mov       rax,[rbp+8]
       mov       [rbx+8],rax
       movzx     eax,byte ptr [rbp+10]
       mov       [rbx+26],al
       movzx     eax,byte ptr [rbp+11]
       mov       [rbx+27],al
       movzx     eax,byte ptr [rbp+12]
       mov       [rbx+2E],al
       movzx     eax,byte ptr [rbp+13]
       mov       [rbx+2C],al
       movzx     eax,byte ptr [rbp+14]
       mov       [rbx+28],al
       movzx     eax,byte ptr [rbp+15]
       mov       [rbx+29],al
       mov       rax,[rbp+18]
       mov       [rbx+40],rax
       cmp       dword ptr [rbx+40],0
       jne       short M01_L00
       mov       dword ptr [rbx+40],40
M01_L00:
       lea       rsi,[rbp+20]
       lea       rdi,[rbx+48]
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       movsq
       xor       eax,eax
       mov       [rbx+20],eax
       mov       [rbx+18],rax
       mov       [rbx+10],rax
       movzx     eax,byte ptr [rbx+24]
       mov       [rbx+2A],al
       mov       byte ptr [rbx+2B],0
       xor       eax,eax
       mov       [rbx+98],rax
       mov       [rbx+0A0],rax
       mov       [rbx+70],rax
       mov       [rbx+78],rax
       mov       [rbx+60],rax
       mov       [rbx+68],rax
       mov       [rbx+80],rax
       mov       [rbx+88],rax
       mov       [rbx+90],rax
       mov       byte ptr [rbx+2D],0
       mov       rax,1F61E401F10
       mov       rax,[rax]
       vmovdqu   xmm0,xmmword ptr [rax+8]
       vmovdqu   xmmword ptr [rsp+8],xmm0
       mov       rdx,[rax+18]
       mov       [rsp+18],rdx
       lea       rdi,[rbx+0A8]
       lea       rsi,[rsp+8]
       call      CORINFO_HELP_ASSIGN_BYREF
       call      CORINFO_HELP_ASSIGN_BYREF
       movsq
       add       rsp,20
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
; Total bytes of code 305
; System.Text.Json.Utf8JsonReader.ReadSingleSegment()
       push      r14
       push      rdi
       push      rsi
       push      rbp
       push      rbx
       sub       rsp,30
       xor       eax,eax
       mov       [rsp+20],rax
       mov       rsi,rcx
       xor       edi,edi
       xor       ecx,ecx
       mov       [rsi+98],rcx
       mov       [rsi+0A0],rcx
       mov       byte ptr [rsi+2E],0
       mov       ecx,[rsi+20]
       movsxd    rax,ecx
       mov       edx,[rsi+38]
       cmp       rax,rdx
       jl        short M02_L02
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L00
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L00:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L16
       cmp       byte ptr [rsi+44],2
       jne       short M02_L01
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L01:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L17
       jmp       near ptr M02_L14
M02_L02:
       lea       rax,[rsi+30]
       cmp       ecx,[rax+8]
       jae       near ptr M02_L21
       mov       rax,[rax]
       mov       ecx,ecx
       movzx     edx,byte ptr [rax+rcx]
       cmp       edx,20
       jg        near ptr M02_L06
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B468]
       mov       ecx,[rsi+20]
       movsxd    rdx,ecx
       mov       eax,[rsi+38]
       cmp       rdx,rax
       jl        short M02_L05
       cmp       byte ptr [rsi+27],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+24],0
       je        near ptr M02_L14
       cmp       byte ptr [rsi+2B],0
       je        short M02_L03
       movzx     ecx,byte ptr [rsi+2A]
       test      ecx,ecx
       je        near ptr M02_L14
M02_L03:
       cmp       dword ptr [rsi+58],0
       jne       near ptr M02_L18
       cmp       byte ptr [rsi+44],2
       jne       short M02_L04
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,6
       je        near ptr M02_L14
M02_L04:
       movzx     ecx,byte ptr [rsi+28]
       cmp       ecx,4
       je        near ptr M02_L14
       cmp       ecx,2
       jne       near ptr M02_L19
       jmp       near ptr M02_L14
M02_L05:
       lea       rdx,[rsi+30]
       cmp       ecx,[rdx+8]
       jae       near ptr M02_L21
       mov       rdx,[rdx]
       mov       ecx,ecx
       movzx     edx,byte ptr [rdx+rcx]
M02_L06:
       movsxd    rcx,dword ptr [rsi+20]
       mov       [rsi+18],rcx
       movzx     ebx,byte ptr [rsi+28]
       test      ebx,ebx
       je        near ptr M02_L15
       cmp       edx,2F
       jne       short M02_L08
M02_L07:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B5E8]; System.Text.Json.Utf8JsonReader.ConsumeNextTokenOrRollback(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L08:
       cmp       ebx,1
       jne       short M02_L10
       cmp       edx,7D
       jne       short M02_L09
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B3A8]; System.Text.Json.Utf8JsonReader.EndObject()
       jmp       short M02_L13
M02_L09:
       cmp       edx,22
       jne       near ptr M02_L20
       mov       ebx,[rsi+20]
       mov       rbp,[rsi+8]
       mov       r14,[rsi]
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B4F8]; System.Text.Json.Utf8JsonReader.ConsumePropertyName()
       mov       edi,eax
       test      edi,edi
       jne       short M02_L14
       mov       [rsi+20],ebx
       mov       byte ptr [rsi+28],1
       mov       [rsi+8],rbp
       mov       [rsi],r14
       jmp       short M02_L14
M02_L10:
       cmp       ebx,3
       jne       short M02_L12
       cmp       edx,5D
       jne       short M02_L11
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B3D8]
       jmp       short M02_L13
M02_L11:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L12:
       cmp       ebx,5
       jne       short M02_L07
       jmp       short M02_L11
M02_L13:
       mov       edi,1
M02_L14:
       mov       eax,edi
       add       rsp,30
       pop       rbx
       pop       rbp
       pop       rsi
       pop       rdi
       pop       r14
       ret
M02_L15:
       mov       rcx,rsi
       call      qword ptr [7FFF11E4B450]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte)
       mov       edi,eax
       jmp       short M02_L14
M02_L16:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L17:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L18:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,19
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L19:
       xor       edi,edi
       mov       [rsp+20],rdi
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       edx,16
       xor       r8d,r8d
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L20:
       xor       ecx,ecx
       mov       [rsp+20],rcx
       xor       ecx,ecx
       mov       [rsp+28],ecx
       mov       rcx,rsi
       lea       r9,[rsp+20]
       mov       r8d,edx
       mov       edx,0C
       call      qword ptr [7FFF11DA1378]
       int       3
M02_L21:
       call      CORINFO_HELP_RNGCHKFAIL
       int       3
; Total bytes of code 687

Docs

Profiling workflow for dotnet/runtime repository
Benchmarking workflow for dotnet/runtime repository

@EgorBo
Copy link
Member

EgorBo commented Mar 28, 2023

dotnet/runtime#81758

@EgorBo EgorBo closed this as completed Mar 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant