dotnet / perf-autofiling-issues

A landing place for auto-filed performance issues before they receive triage
MIT License
9 stars 4 forks source link

[Perf] Windows/x86: 123 Regressions on 12/21/2022 11:29:15 AM #11113

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Collections.IterateForEach<String>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ConcurrentStack(Size%3a%20512).html>) 4.05 μs 5.15 μs 1.27 0.03 False
[ImmutableQueue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).ImmutableQueue(Size%3a%20512).html>) 5.23 μs 5.98 μs 1.14 0.10 False
[SortedDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).SortedDictionary(Size%3a%20512).html>) 14.73 μs 15.70 μs 1.07 0.02 False
[HashSet - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(String).HashSet(Size%3a%20512).html>) 2.22 μs 2.55 μs 1.15 0.06 False

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;String&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<String>.ConcurrentStack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 5.151033653846154 > 4.249581427800292. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -472.50395553417144 (T) = (0 -5154.197700878222) / Math.Sqrt((50.66278193387956 / (32)) + (69.2099819806719 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.2715948207244051 = (4053.3333549927224 - 5154.197700878222) / 4053.3333549927224 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.ImmutableQueue(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 5.975973074955232 > 5.471714216091675. IsChangePoint: Marked as a change because one of 10/4/2022 8:15:20 AM, 11/2/2022 4:14:20 AM, 11/11/2022 3:15:52 PM, 11/18/2022 7:31:41 AM, 12/23/2022 9:40:21 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -51.53372177383686 (T) = (0 -5949.327894989913) / Math.Sqrt((994.1660841123605 / (47)) + (586.6559486779913 / (3))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (47) + (3) - 2, .025) and -0.14615006150701937 = (5190.705907363839 - 5949.327894989913) / 5190.705907363839 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.SortedDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.704036850921273 > 15.520041673117152. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.457386282838723 (T) = (0 -15605.108365924783) / Math.Sqrt((15013.550778391898 / (32)) + (6552.134691433983 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.05556250801343245 = (14783.68949963331 - 15605.108365924783) / 14783.68949963331 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<String>.HashSet(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.55101924649349 > 2.34047298446203. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/6/2022 2:12:43 AM, 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -84.89518178703695 (T) = (0 -2543.9994933858234) / Math.Sqrt((22.603241662194286 / (32)) + (238.04171326865867 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.14227408157457944 = (2227.135793783416 - 2543.9994933858234) / 2227.135793783416 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToStream(Mode%3a%20SourceGen).html>) 10.25 μs 11.77 μs 1.15 0.02 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToString(Mode%3a%20SourceGen).html>) 11.08 μs 12.88 μs 1.16 0.01 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToString(Mode%3a%20Reflection).html>) 13.10 μs 14.88 μs 1.14 0.08 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToWriter(Mode%3a%20Reflection).html>) 11.80 μs 12.90 μs 1.09 0.02 False
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToStream(Mode%3a%20Reflection).html>) 13.04 μs 14.24 μs 1.09 0.05 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeObjectProperty(Mode%3a%20Reflection).html>) 13.32 μs 14.37 μs 1.08 0.03 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToWriter(Mode%3a%20SourceGen).html>) 9.79 μs 11.33 μs 1.16 0.03 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 11.38 μs 13.00 μs 1.14 0.01 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 12.59 μs 13.49 μs 1.07 0.05 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Dictionary(String%2c%20String)).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 10.49 μs 11.99 μs 1.14 0.02 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) graph_6.png>) graph_7.png>) graph_8.png>) graph_9.png>) graph_10.png>) Test Report.html>)

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;Dictionary&lt;String, String&gt;&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToStream(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 11.771933849446123 > 10.777708560310304. IsChangePoint: Marked as a change because one of 12/5/2022 3:14:07 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -46.57817425143084 (T) = (0 -11783.96874554304) / Math.Sqrt((4814.897247246272 / (32)) + (15552.111690905675 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.14402822034630766 = (10300.417888271957 - 11783.96874554304) / 10300.417888271957 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 12.879637997562957 > 11.70551401080867. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -56.78798545560966 (T) = (0 -12734.888372630892) / Math.Sqrt((18624.874341073177 / (32)) + (3715.0671100153936 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.1431319104313474 = (11140.348945228492 - 12734.888372630892) / 11140.348945228492 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.87737097632349 > 13.743593697041911. IsChangePoint: Marked as a change because one of 12/2/2022 2:38:36 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -25.37895995418689 (T) = (0 -14534.309860694328) / Math.Sqrt((32344.90138811284 / (32)) + (41596.033596516165 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.1118980579171115 = (13071.620871360326 - 14534.309860694328) / 13071.620871360326 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToWriter(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 12.8974329437051 > 12.328029562529537. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.798998121976044 (T) = (0 -13106.553145776172) / Math.Sqrt((21094.88917330017 / (32)) + (49163.887621306356 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10723113941605486 = (11837.233147803689 - 13106.553145776172) / 11837.233147803689 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.244353710462285 > 13.611639406424525. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.447701150485862 (T) = (0 -14309.423607648112) / Math.Sqrt((51340.294122625644 / (32)) + (13969.093200552057 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10741488342557984 = (12921.465858743562 - 14309.423607648112) / 12921.465858743562 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeObjectProperty(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.369081282969468 > 13.960964196825397. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -26.04911883636997 (T) = (0 -14375.021589847785) / Math.Sqrt((32618.686528450937 / (32)) + (9373.812759481956 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.076559144826116 = (13352.746719893048 - 14375.021589847785) / 13352.746719893048 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 11.331964024835646 > 10.410894330322844. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -86.63776024634596 (T) = (0 -11286.20474307961) / Math.Sqrt((3625.005191726313 / (32)) + (2424.9925123162197 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.13751320249716006 = (9921.823077132845 - 11286.20474307961) / 9921.823077132845 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 12.99799390212392 > 12.007539748240736. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -67.44057286388457 (T) = (0 -12977.610861830803) / Math.Sqrt((4999.62368848025 / (32)) + (6083.6579016291535 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.13061772485001735 = (11478.336644290937 - 12977.610861830803) / 11478.336644290937 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 13.491149251583186 > 13.36752926151491. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -4.765887564164871 (T) = (0 -13895.013974128911) / Math.Sqrt((32996.63414706463 / (32)) + (1247509.1463196212 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10006842592657594 = (12631.045166508882 - 13895.013974128911) / 12631.045166508882 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Dictionary<String, String>>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 11.985245535714284 > 11.104144018508425. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -100.1991874873381 (T) = (0 -11977.614142845883) / Math.Sqrt((1630.980842818511 / (32)) + (2647.455344151294 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.13343746283393135 = (10567.51213507473 - 11977.614142845883) / 10567.51213507473 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToWriter(Mode%3a%20SourceGen).html>) 12.13 μs 13.57 μs 1.12 0.01 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToString(Mode%3a%20SourceGen).html>) 13.37 μs 14.47 μs 1.08 0.01 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 13.65 μs 15.14 μs 1.11 0.01 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 21.03 μs 22.46 μs 1.07 0.01 False
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToStream(Mode%3a%20Reflection).html>) 20.77 μs 22.01 μs 1.06 0.01 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 12.61 μs 14.04 μs 1.11 0.01 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableSortedDictionary(String%2c%20String)).SerializeToWriter(Mode%3a%20Reflection).html>) 20.34 μs 21.90 μs 1.08 0.01 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) graph_6.png>) graph_7.png>) Test Report.html>)

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;ImmutableSortedDictionary&lt;String, String&gt;&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 13.56641485507246 > 12.759201703389108. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -63.69327002019893 (T) = (0 -13532.839519138994) / Math.Sqrt((6687.685526967443 / (32)) + (4606.764507360015 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.11294532955100293 = (12159.482734519013 - 13532.839519138994) / 12159.482734519013 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.465783542039356 > 13.958567950675105. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -44.557016310849406 (T) = (0 -14569.33218785267) / Math.Sqrt((9665.487267815857 / (32)) + (8334.703024362847 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.0924095694772749 = (13336.87711544324 - 14569.33218785267) / 13336.87711544324 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.139750741364109 > 14.338173525543118. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -50.69304662299603 (T) = (0 -15053.975850396848) / Math.Sqrt((13831.906225253339 / (32)) + (5748.830993322338 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10171048423530789 = (13664.184979455598 - 15053.975850396848) / 13664.184979455598 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 22.455076029693483 > 22.196564756004733. IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -31.23606478671816 (T) = (0 -22557.314626626503) / Math.Sqrt((19496.365233119217 / (32)) + (23679.214689435492 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.0646812368038068 = (21186.918531920397 - 22557.314626626503) / 21186.918531920397 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 22.00692054536907 > 21.829642675360752. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.320439769437538 (T) = (0 -22403.29811996408) / Math.Sqrt((44832.70908359676 / (32)) + (64941.97132680705 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06859726378901572 = (20965.146439292585 - 22403.29811996408) / 20965.146439292585 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 14.039770926756352 > 13.320773614907484. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -51.607072665607824 (T) = (0 -14078.2055039312) / Math.Sqrt((8572.98905096046 / (32)) + (7873.847694780369 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10785621125188793 = (12707.610753946756 - 14078.2055039312) / 12707.610753946756 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableSortedDictionary<String, String>>.SerializeToWriter(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 21.897453768726592 > 21.358725863745363. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.38406643839338 (T) = (0 -22089.13357706315) / Math.Sqrt((63244.51652269886 / (32)) + (71936.13051184997 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07679552817003736 = (20513.767933827305 - 22089.13357706315) / 20513.767933827305 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<LoginViewModel>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LoginViewModel).SerializeToWriter(Mode%3a%20SourceGen).html>) 226.26 ns 237.91 ns 1.05 0.01 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LoginViewModel).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 602.16 ns 642.84 ns 1.07 0.10 False

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;LoginViewModel&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<LoginViewModel>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 237.914920217565 > 235.46707294429706. IsChangePoint: Marked as a change because one of 12/1/2022 7:29:59 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.75004044213729 (T) = (0 -239.08583329838243) / Math.Sqrt((3.5303530483341508 / (32)) + (4.044621710520141 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.061005141273089925 = (225.3389960123149 - 239.08583329838243) / 225.3389960123149 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<LoginViewModel>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 642.844461912672 > 618.2513206214431. IsChangePoint: Marked as a change because one of 12/21/2022 11:29:15 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -12.666786924033788 (T) = (0 -639.6337221645069) / Math.Sqrt((92.44767593138837 / (33)) + (263.3839893596143 / (17))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (33) + (17) - 2, .025) and -0.09254108657352143 = (585.4550735209018 - 639.6337221645069) / 585.4550735209018 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Collections.IterateForEach<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ConcurrentBag - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(Int32).ConcurrentBag(Size%3a%20512).html>) 2.12 μs 2.27 μs 1.07 0.02 False
[ImmutableStack - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.IterateForEach(Int32).ImmutableStack(Size%3a%20512).html>) 1.61 μs 1.77 μs 1.10 0.02 False

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.IterateForEach&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.IterateForEach<Int32>.ConcurrentBag(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.2680140503875967 > 2.22970440824791. IsChangePoint: Marked as a change because one of 12/14/2022 12:26:48 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.137096740418334 (T) = (0 -2266.7829827888395) / Math.Sqrt((5024.174570653625 / (32)) + (15.818898093375791 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.05953733074274215 = (2139.408321932188 - 2266.7829827888395) / 2139.408321932188 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Collections.IterateForEach<Int32>.ImmutableStack(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.7732885842679658 > 1.6977141505889772. IsChangePoint: Marked as a change because one of 10/11/2022 5:13:36 PM, 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -179.48497138851704 (T) = (0 -1774.1981766605222) / Math.Sqrt((9.299695938607544 / (32)) + (8.492916146348922 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09689345239269552 = (1617.4754009064382 - 1774.1981766605222) / 1617.4754009064382 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions 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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(HashSet(String)).DeserializeFromStream(Mode%3a%20SourceGen).html>) 16.69 μs 17.94 μs 1.07 0.08 False
[DeserializeFromUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(HashSet(String)).DeserializeFromUtf8Bytes(Mode%3a%20Reflection).html>) 14.48 μs 15.84 μs 1.09 0.02 False
[DeserializeFromUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(HashSet(String)).DeserializeFromUtf8Bytes(Mode%3a%20SourceGen).html>) 14.71 μs 15.88 μs 1.08 0.02 False
[DeserializeFromStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(HashSet(String)).DeserializeFromStream(Mode%3a%20Reflection).html>) 16.67 μs 18.06 μs 1.08 0.03 False
[DeserializeFromString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(HashSet(String)).DeserializeFromString(Mode%3a%20Reflection).html>) 14.98 μs 15.84 μs 1.06 0.01 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) Test Report.html>)

Repro

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: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.937820895220568 > 17.4441154014804. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.217296184385276 (T) = (0 -17838.627446702933) / Math.Sqrt((70490.26040522123 / (32)) + (16867.727795223473 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06781349060798365 = (16705.75208461368 - 17838.627446702933) / 16705.75208461368 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.838204966329966 > 15.345047980040931. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -17.1269705223736 (T) = (0 -15620.44068847296) / Math.Sqrt((62855.30976411615 / (32)) + (14960.838653187338 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06153805101059142 = (14714.913585624363 - 15620.44068847296) / 14714.913585624363 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.876772312373223 > 15.392159023703789. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -5.169541528788761 (T) = (0 -15715.986209946584) / Math.Sqrt((25314.351189285124 / (32)) + (549130.1586256982 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06178867527733819 = (14801.425722346854 - 15715.986209946584) / 14801.425722346854 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 18.058806815454762 > 17.5019756002618. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -40.668002564261066 (T) = (0 -17880.312249952553) / Math.Sqrt((11144.95611281637 / (32)) + (10020.498864984302 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07344743607849952 = (16656.905265219706 - 17880.312249952553) / 16656.905265219706 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<HashSet<String>>.DeserializeFromString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.835222475515032 > 15.723259548883243. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -29.785026008529197 (T) = (0 -16014.36230324751) / Math.Sqrt((8403.945145276622 / (32)) + (16161.274449988583 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06764446977988471 = (14999.714564670743 - 16014.36230324751) / 14999.714564670743 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableDictionary(String%2c%20String)).SerializeToString(Mode%3a%20Reflection).html>) 30.70 μs 32.89 μs 1.07 0.00 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableDictionary(String%2c%20String)).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 15.56 μs 17.05 μs 1.10 0.01 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableDictionary(String%2c%20String)).SerializeToWriter(Mode%3a%20SourceGen).html>) 15.03 μs 16.43 μs 1.09 0.03 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableDictionary(String%2c%20String)).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 16.57 μs 18.38 μs 1.11 0.01 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ImmutableDictionary(String%2c%20String)).SerializeToString(Mode%3a%20SourceGen).html>) 16.13 μs 17.58 μs 1.09 0.01 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) Test Report.html>)

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;ImmutableDictionary&lt;String, String&gt;&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeToString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 32.88668417366947 > 32.306163156001524. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.47795234446607 (T) = (0 -32799.4097862722) / Math.Sqrt((159315.54222125156 / (32)) + (27143.6340210612 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.061177310394502145 = (30908.510260249273 - 32799.4097862722) / 30908.510260249273 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.05255486035546 > 16.533627808361192. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -46.35164488988993 (T) = (0 -17141.470411647806) / Math.Sqrt((12458.169573756797 / (32)) + (10957.054789617077 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09340562287785034 = (15677.137608393992 - 17141.470411647806) / 15677.137608393992 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 16.429137990962804 > 15.820149742077707. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -39.232031761308995 (T) = (0 -16271.913955895787) / Math.Sqrt((7028.8673088428895 / (32)) + (12803.388592322308 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07940544549587007 = (15074.885923352556 - 16271.913955895787) / 15074.885923352556 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 18.381756061719322 > 18.081020227120664. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -18.96245618255332 (T) = (0 -18439.998105707426) / Math.Sqrt((90901.02282606206 / (32)) + (45134.65452495182 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08131835534708164 = (17053.255421516038 - 18439.998105707426) / 17053.255421516038 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.576714026023733 > 17.027742617637212. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -36.728922578698445 (T) = (0 -17647.258188491443) / Math.Sqrt((15624.787112330632 / (32)) + (17212.82754620953 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08589845884221563 = (16251.296836084417 - 17647.258188491443) / 16251.296836084417 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<SByte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetHashCodeBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Of(SByte).GetHashCodeBenchmark.html>) 54.60 ns 60.78 ns 1.11 0.04 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of&lt;SByte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Of<SByte>.GetHashCodeBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 60.77664860165154 > 57.33286494565196. IsChangePoint: Marked as a change because one of 12/12/2022 3:40:04 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -100.93998498846399 (T) = (0 -60.77159403509729) / Math.Sqrt((0.0070369195393399685 / (32)) + (0.062010025861206006 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.11179394539667696 = (54.6608427638222 - 60.77159403509729) / 54.6608427638222 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Formats.Cbor.Tests.Perf_CborReader

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SkipValue - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding%3a%20(Text%20String%2c%20Strict)).html>) 79.72 ns 86.92 ns 1.09 0.03 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Formats.Cbor.Tests.Perf_CborReader*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(encoding: (Text String, Strict)) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 86.91738681418953 > 83.73778715280493. IsChangePoint: Marked as a change because one of 11/16/2022 6:51:59 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.705190581016694 (T) = (0 -86.01897904683635) / Math.Sqrt((0.5326323639757619 / (32)) + (0.4889463269870069 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07509144877398075 = (80.01084851426471 - 86.01897904683635) / 80.01084851426471 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(CborEncoding) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,edx mov edi,[esi+8] test edi,edi je short M00_L01 mov ebx,edi mov edi,[ebx+4] M00_L00: mov ecx,offset MT_System.Formats.Cbor.CborReader call CORINFO_HELP_NEWSFAST mov [ebp-10],eax mov esi,[esi+0C] mov byte ptr [eax+2D],1 mov ecx,esi call dword ptr ds:[0B5017C8]; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) mov eax,[ebp-10] lea ecx,[eax+30] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EBX xor edx,edx mov [ecx+4],edx mov [ecx+8],edi mov [eax+28],esi mov byte ptr [eax+2E],0 lea ecx,[eax+40] mov byte ptr [ecx],1 mov dword ptr [ecx+4],1 push 0 mov ecx,eax call dword ptr ds:[0B501060]; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) pop ecx pop ebx pop esi pop edi pop ebp ret M00_L01: xor ebx,ebx xor edi,edi jmp short M00_L00 ; Total bytes of code 112 ``` ```assembly ; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) push ebp mov ebp,esp push esi test ecx,ecx jl short M01_L00 cmp ecx,3 jg short M01_L00 pop esi pop ebp ret M01_L00: mov ecx,offset MT_System.ArgumentOutOfRangeException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,0DFA mov edx,0AA88674 call CORINFO_HELP_STRCNS mov edx,eax mov ecx,esi call dword ptr ds:[89C3018] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 61 ``` ```assembly ; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) push ebp mov ebp,esp push edi push esi push ebx sub esp,78 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-84],ecx mov [ebp-24],edx cmp dword ptr [ecx+4],0 je short M02_L00 mov edx,[ecx+4] mov edx,[edx+8] mov [ebp-70],edx jmp short M02_L01 M02_L00: xor edx,edx mov [ebp-70],edx M02_L01: xor eax,eax vxorps ymm0,ymm0,ymm0 vmovdqu ymmword ptr [ebp-6C],ymm0 mov [ebp-4C],eax mov eax,[ecx+18] mov esi,[ecx+20] mov edi,[ecx+1C] lea ebx,[ecx+48] movzx edx,byte ptr [ebx] mov ebx,[ebx+4] mov [ebp-80],ebx mov ebx,[ecx+50] mov [ebp-7C],ebx mov ebx,[ecx+54] mov [ebp-78],ebx mov ebx,[ecx+58] mov [ebp-74],ebx mov ebx,[ebp-70] mov [ebp-6C],ebx mov [ebp-68],eax mov [ebp-64],esi mov [ebp-60],edi mov [ebp-5C],dl mov ebx,[ebp-80] mov [ebp-58],ebx mov edx,[ebp-7C] mov [ebp-54],edx mov edx,[ebp-78] mov [ebp-50],edx mov edx,[ebp-74] mov [ebp-4C],edx vmovdqu ymm0,ymmword ptr [ebp-6C] vmovdqu ymmword ptr [ebp-48],ymm0 mov edx,[ebp-4C] mov [ebp-28],edx cmp byte ptr [ebp+8],0 sete dl mov [ecx+2D],dl M02_L02: lea edx,[ebp-24] call dword ptr ds:[0B501078]; System.Formats.Cbor.CborReader.SkipNextNode(Int32 ByRef) cmp dword ptr [ebp-24],0 mov ecx,[ebp-84] jg short M02_L02 jmp short M02_L03 lea edx,[ebp-48] mov ecx,[ebp-84] call dword ptr ds:[0B5013C0] call CORINFO_HELP_RETHROW int 3 M02_L03: mov byte ptr [ecx+2D],1 jmp short M02_L04 mov ecx,[ebp-84] mov byte ptr [ecx+2D],1 pop eax jmp eax M02_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 264 ``` ### Compare Jit Disasm ```assembly ; System.Formats.Cbor.Tests.Perf_CborReader.SkipValue(CborEncoding) push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,edx mov edi,[esi+8] test edi,edi je short M00_L01 mov ebx,edi mov edi,[ebx+4] M00_L00: mov ecx,offset MT_System.Formats.Cbor.CborReader call CORINFO_HELP_NEWSFAST mov [ebp-10],eax mov esi,[esi+0C] mov byte ptr [eax+2D],1 mov ecx,esi call dword ptr ds:[0AE59C78]; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) mov eax,[ebp-10] lea ecx,[eax+30] mov edx,ecx call CORINFO_HELP_CHECKED_ASSIGN_REF_EBX xor edx,edx mov [ecx+4],edx mov [ecx+8],edi mov [eax+28],esi mov byte ptr [eax+2E],0 lea ecx,[eax+40] mov byte ptr [ecx],1 mov dword ptr [ecx+4],1 push 0 mov ecx,eax call dword ptr ds:[0AE59510]; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) pop ecx pop ebx pop esi pop edi pop ebp ret M00_L01: xor ebx,ebx xor edi,edi jmp short M00_L00 ; Total bytes of code 112 ``` ```assembly ; System.Formats.Cbor.CborConformanceModeHelpers.Validate(System.Formats.Cbor.CborConformanceMode) push ebp mov ebp,esp push esi test ecx,ecx jl short M01_L00 cmp ecx,3 jg short M01_L00 pop esi pop ebp ret M01_L00: mov ecx,offset MT_System.ArgumentOutOfRangeException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,0DFA mov edx,0A3FBBBC call CORINFO_HELP_STRCNS mov edx,eax mov ecx,esi call dword ptr ds:[8383018] mov ecx,esi call CORINFO_HELP_THROW int 3 ; Total bytes of code 61 ``` ```assembly ; System.Formats.Cbor.CborReader.SkipToAncestor(Int32, Boolean) push ebp mov ebp,esp push edi push esi push ebx sub esp,78 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 vmovdqu xmmword ptr [ebp-28],xmm4 xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov [ebp-84],ecx mov [ebp-24],edx cmp dword ptr [ecx+4],0 je short M02_L00 mov edx,[ecx+4] mov edx,[edx+8] mov [ebp-70],edx jmp short M02_L01 M02_L00: xor edx,edx mov [ebp-70],edx M02_L01: xor eax,eax vxorps ymm0,ymm0,ymm0 vmovdqu ymmword ptr [ebp-6C],ymm0 mov [ebp-4C],eax mov eax,[ecx+18] mov esi,[ecx+20] mov edi,[ecx+1C] lea ebx,[ecx+48] movzx edx,byte ptr [ebx] mov ebx,[ebx+4] mov [ebp-80],ebx mov ebx,[ecx+50] mov [ebp-7C],ebx mov ebx,[ecx+54] mov [ebp-78],ebx mov ebx,[ecx+58] mov [ebp-74],ebx mov ebx,[ebp-70] mov [ebp-6C],ebx mov [ebp-68],eax mov [ebp-64],esi mov [ebp-60],edi mov [ebp-5C],dl mov ebx,[ebp-80] mov [ebp-58],ebx mov edx,[ebp-7C] mov [ebp-54],edx mov edx,[ebp-78] mov [ebp-50],edx mov edx,[ebp-74] mov [ebp-4C],edx vmovdqu ymm0,ymmword ptr [ebp-6C] vmovdqu ymmword ptr [ebp-48],ymm0 mov edx,[ebp-4C] mov [ebp-28],edx cmp byte ptr [ebp+8],0 sete dl mov [ecx+2D],dl M02_L02: lea edx,[ebp-24] call dword ptr ds:[0AE59528]; System.Formats.Cbor.CborReader.SkipNextNode(Int32 ByRef) cmp dword ptr [ebp-24],0 mov ecx,[ebp-84] jg short M02_L02 jmp short M02_L03 lea edx,[ebp-48] mov ecx,[ebp-84] call dword ptr ds:[0AE59870] call CORINFO_HELP_RETHROW int 3 M02_L03: mov byte ptr [ecx+2D],1 jmp short M02_L04 mov ecx,[ebp-84] mov byte ptr [ecx+2D],1 pop eax jmp eax M02_L04: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 4 ; Total bytes of code 264 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Perf_Utf8Encoding

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetByteCount - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Perf_Utf8Encoding.GetByteCount(Input%3a%20Chinese).html>) 12.42 μs 15.54 μs 1.25 0.54 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Perf_Utf8Encoding*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Perf_Utf8Encoding.GetByteCount(Input: Chinese) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 15.543820555032921 > 13.053029502344502. IsChangePoint: Marked as a change because one of 12/12/2022 1:34:22 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -6.110135551973751 (T) = (0 -15683.515035910665) / Math.Sqrt((1727510.0766770258 / (32)) + (936846.9663772702 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.14529196821383955 = (13693.90118082306 - 15683.515035910665) / 13693.90118082306 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Perf_Utf8Encoding.GetByteCount() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+14] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+0C] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Perf_Utf8Encoding.GetByteCount() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+14] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+0C] pop ebp ret ; Total bytes of code 21 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions 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
[SystemTextJsonReflection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/MicroBenchmarks.Serializers.Json_FromString(CollectionsOfPrimitives).SystemTextJsonReflection.html>) 377.41 μs 397.68 μs 1.05 0.05 False

graph Test Report

Repro

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_Reflection_ ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 397.67815580286174 > 396.19369683257923. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.887348617751215 (T) = (0 -398537.6201107693) / Math.Sqrt((4360943.147685442 / (32)) + (13585659.015948707 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.05467524962386845 = (377877.09558264574 - 398537.6201107693) / 377877.09558264574 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in MicroBenchmarks.Serializers.Json_ToString<Location>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SystemTextJsonReflection - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/MicroBenchmarks.Serializers.Json_ToString(Location).SystemTextJsonReflection.html>) 963.43 ns 1.06 μs 1.10 0.03 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'MicroBenchmarks.Serializers.Json_ToString&lt;Location&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### MicroBenchmarks.Serializers.Json_ToString<Location>.SystemTextJson_Reflection_ ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.061679892267347 > 1002.4388202635267. IsChangePoint: Marked as a change because one of 12/13/2022 2:39:04 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -16.632800334200443 (T) = (0 -1023.6358213088001) / Math.Sqrt((88.43956250886006 / (32)) + (214.37415165163134 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06637351154798271 = (959.9224007569888 - 1023.6358213088001) / 959.9224007569888 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Tests.Perf_Get

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Perf_Get.GetString.html>) 4.38 μs 5.12 μs 1.17 0.11 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Get*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Tests.Perf_Get.GetString ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 5.122466085498546 > 4.563767606439051. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -29.99016819453846 (T) = (0 -5142.056528648769) / Math.Sqrt((7493.264175791489 / (32)) + (7593.893723076803 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.17562127734034227 = (4373.905634203781 - 5142.056528648769) / 4373.905634203781 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Get.GetString() push ebp mov ebp,esp push esi sub esp,0B8 vzeroupper vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-0BC],xmm4 vmovdqu xmmword ptr [ebp-0AC],xmm4 mov eax,0FFFFFF70 M00_L00: vmovdqu xmmword ptr [ebp+eax-0C],xmm4 vmovdqu xmmword ptr [ebp+eax+4],xmm4 vmovdqu xmmword ptr [ebp+eax+14],xmm4 add eax,30 jne short M00_L00 mov [ebp-0C],eax mov [ebp-8],eax mov ecx,0B202350 mov edx,233 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov ecx,ds:[78845D0] test ecx,ecx je near ptr M00_L02 lea edx,[ecx+8] mov eax,[ecx+4] M00_L01: xor ecx,ecx mov [ebp-0A4],ecx mov [ebp-0A0],ecx vxorps xmm0,xmm0,xmm0 vmovdqu xmmword ptr [ebp-9C],xmm0 push eax push edx push dword ptr [ebp-90] push dword ptr [ebp-94] push dword ptr [ebp-98] push dword ptr [ebp-9C] push dword ptr [ebp-0A0] push dword ptr [ebp-0A4] push dword ptr [ebp-0A8] push dword ptr [ebp-0AC] push dword ptr [ebp-0B0] push dword ptr [ebp-0B4] push dword ptr [ebp-0B8] push dword ptr [ebp-0BC] lea ecx,[ebp-8C] mov edx,1 call dword ptr ds:[0BC031F8]; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) cmp byte ptr [ebp-61],0 jne short M00_L03 lea ecx,[ebp-8C] call dword ptr ds:[0BC03408]; System.Text.Json.Utf8JsonReader.ReadSingleSegment() jmp short M00_L04 M00_L02: xor edx,edx xor eax,eax jmp near ptr M00_L01 M00_L03: lea ecx,[ebp-8C] call dword ptr ds:[0BC037B0] M00_L04: movzx ecx,al test ecx,ecx jne short M00_L05 cmp byte ptr [ebp-68],0 je short M00_L05 cmp byte ptr [ebp-64],0 je short M00_L07 M00_L05: xor esi,esi M00_L06: lea ecx,[ebp-8C] call dword ptr ds:[0BC03B28]; System.Text.Json.Utf8JsonReader.GetString() inc esi cmp esi,64 jl short M00_L06 lea esp,[ebp-4] pop esi pop ebp ret M00_L07: xor ecx,ecx push 0 push 0 push ecx lea ecx,[ebp-8C] mov edx,20 call dword ptr ds:[0BC058E8] int 3 ; Total bytes of code 330 ``` ```assembly ; System.Text.Json.Utf8JsonReader..ctor(System.ReadOnlySpan`1, Boolean, System.Text.Json.JsonReaderState) push ebp mov ebp,esp push edi push esi sub esp,10 vzeroupper xor eax,eax mov [ebp-18],eax mov [ebp-14],eax mov eax,ecx lea edi,[eax+30] lea esi,[ebp+38] call CORINFO_HELP_ASSIGN_BYREF movsd mov [eax+24],dl mov byte ptr [eax+25],0 mov ecx,eax mov edx,[ebp+8] mov [ecx],edx mov edx,[ebp+0C] mov [ecx+4],edx lea ecx,[eax+8] mov edx,[ebp+10] mov [ecx],edx mov edx,[ebp+14] mov [ecx+4],edx movzx ecx,byte ptr [ebp+18] mov [eax+26],cl movzx ecx,byte ptr [ebp+19] mov [eax+27],cl movzx ecx,byte ptr [ebp+1A] mov [eax+2E],cl movzx ecx,byte ptr [ebp+1B] mov [eax+2C],cl movzx ecx,byte ptr [ebp+1C] mov [eax+28],cl movzx ecx,byte ptr [ebp+1D] mov [eax+29],cl mov ecx,[ebp+20] mov [eax+38],ecx mov ecx,[ebp+24] mov [eax+3C],ecx cmp dword ptr [eax+38],0 jne short M01_L00 mov dword ptr [eax+38],40 M01_L00: lea edi,[eax+40] lea esi,[ebp+28] movsd movsd call CORINFO_HELP_ASSIGN_BYREF movsd xor ecx,ecx mov [eax+20],ecx lea ecx,[eax+18] xor edx,edx mov [ecx],edx mov [ecx+4],edx lea ecx,[eax+10] mov [ecx],edx mov [ecx+4],edx movzx ecx,byte ptr [eax+24] mov [eax+2A],cl mov byte ptr [eax+2B],0 mov [eax+70],edx mov [eax+74],edx mov [eax+58],edx mov [eax+5C],edx mov [eax+50],edx mov [eax+54],edx vxorps xmm0,xmm0,xmm0 vmovq qword ptr [eax+60],xmm0 vmovq qword ptr [eax+68],xmm0 mov byte ptr [eax+2D],0 mov esi,ds:[7881FF8] add esi,4 lea edi,[ebp-18] mov ecx,4 rep movsd lea edi,[eax+78] lea esi,[ebp-18] call CORINFO_HELP_ASSIGN_BYREF call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea esp,[ebp-8] pop esi pop edi pop ebp ret 38 ; Total bytes of code 264 ``` ```assembly ; System.Text.Json.Utf8JsonReader.ReadSingleSegment() push ebp mov ebp,esp push edi push esi push ebx sub esp,0C mov esi,ecx xor ebx,ebx xor ecx,ecx mov [esi+70],ecx mov [esi+74],ecx mov byte ptr [esi+2E],0 mov ecx,[esi+20] mov eax,ecx sar eax,1F cmp ecx,[esi+34] sbb eax,0 jl short M02_L02 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L00 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L00: cmp dword ptr [esi+4C],0 jne near ptr M02_L17 cmp byte ptr [esi+3C],2 jne short M02_L01 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L01: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L18 jmp near ptr M02_L15 M02_L02: mov ecx,[esi+20] lea eax,[esi+30] cmp ecx,[eax+4] jae near ptr M02_L22 mov eax,[eax] movzx edx,byte ptr [eax+ecx] cmp edx,20 jg near ptr M02_L06 mov ecx,esi call dword ptr ds:[0BC03468] mov ecx,[esi+20] mov edx,ecx mov eax,edx sar eax,1F cmp edx,[esi+34] sbb eax,0 jl short M02_L05 cmp byte ptr [esi+27],0 je near ptr M02_L15 cmp byte ptr [esi+24],0 je near ptr M02_L15 cmp byte ptr [esi+2B],0 je short M02_L03 movzx ecx,byte ptr [esi+2A] test ecx,ecx je near ptr M02_L15 M02_L03: cmp dword ptr [esi+4C],0 jne near ptr M02_L19 cmp byte ptr [esi+3C],2 jne short M02_L04 movzx ecx,byte ptr [esi+28] cmp ecx,6 je near ptr M02_L15 M02_L04: movzx ecx,byte ptr [esi+28] cmp ecx,4 je near ptr M02_L15 cmp ecx,2 jne near ptr M02_L20 jmp near ptr M02_L15 M02_L05: lea edx,[esi+30] cmp ecx,[edx+4] jae near ptr M02_L22 mov edx,[edx] movzx edx,byte ptr [edx+ecx] M02_L06: mov ecx,[esi+20] mov eax,ecx sar eax,1F lea ebx,[esi+18] mov [ebx],ecx mov [ebx+4],eax movzx ebx,byte ptr [esi+28] test ebx,ebx je near ptr M02_L16 cmp edx,2F jne short M02_L08 M02_L07: mov ecx,esi call dword ptr ds:[0BC035E8] mov ebx,eax jmp near ptr M02_L15 M02_L08: cmp ebx,1 jne short M02_L11 cmp edx,7D jne short M02_L09 mov ecx,esi call dword ptr ds:[0BC033A8] jmp near ptr M02_L14 M02_L09: cmp edx,22 jne near ptr M02_L21 mov ebx,[esi+20] lea ecx,[esi+8] mov edi,[ecx] mov eax,[ecx+4] mov [ebp-10],eax mov ecx,esi mov edx,[ecx] mov ecx,[ecx+4] mov [ebp-14],edx mov [ebp-18],ecx mov ecx,esi call dword ptr ds:[0BC034F8] test eax,eax jne short M02_L10 mov [esi+20],ebx mov byte ptr [esi+28],1 lea ecx,[esi+8] mov [ecx],edi mov edi,[ebp-10] mov [ecx+4],edi mov edi,[ebp-14] mov [esi],edi mov edi,[ebp-18] mov [esi+4],edi mov ebx,eax jmp short M02_L15 M02_L10: mov ebx,eax jmp short M02_L15 M02_L11: cmp ebx,3 jne short M02_L13 cmp edx,5D jne short M02_L12 mov ecx,esi call dword ptr ds:[0BC033D8] jmp short M02_L14 M02_L12: mov ecx,esi call dword ptr ds:[0BC03480]; System.Text.Json.Utf8JsonReader.ConsumeValue(Byte) mov ebx,eax jmp short M02_L15 M02_L13: cmp ebx,5 jne near ptr M02_L07 jmp short M02_L12 M02_L14: mov ebx,1 M02_L15: mov eax,ebx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M02_L16: mov ecx,esi call dword ptr ds:[0BC03450] mov ebx,eax jmp short M02_L15 M02_L17: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BC058E8] int 3 M02_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BC058E8] int 3 M02_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0BC058E8] int 3 M02_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0BC058E8] int 3 M02_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0BC058E8] int 3 M02_L22: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 639 ``` ```assembly ; System.Text.Json.Utf8JsonReader.GetString() push ebp mov ebp,esp push edi push esi push ebx sub esp,10 xor eax,eax mov [ebp-1C],eax mov [ebp-18],eax mov ebx,ecx movzx ecx,byte ptr [ebx+28] cmp ecx,0B jne short M03_L00 xor eax,eax lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M03_L00: cmp ecx,7 je short M03_L01 cmp ecx,5 jne short M03_L07 M03_L01: cmp byte ptr [ebx+2D],0 jne short M03_L02 lea ecx,[ebx+70] mov eax,[ecx] mov edx,[ecx+4] jmp short M03_L04 M03_L02: lea esi,[ebx+78] lea edi,[ebp-1C] mov ecx,4 rep movsd lea ecx,[ebp-1C] call dword ptr ds:[0BC079C0] test eax,eax je short M03_L05 lea edx,[eax+8] mov eax,[eax+4] M03_L03: xchg eax,edx M03_L04: cmp byte ptr [ebx+2E],0 je short M03_L06 push edx push eax call dword ptr ds:[0BC07B28] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M03_L05: xor eax,eax xor edx,edx xchg eax,edx jmp short M03_L03 M03_L06: push edx push eax call dword ptr ds:[0BC07BB8]; System.Text.Json.JsonReaderHelper.TranscodeHelper(System.ReadOnlySpan`1) lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M03_L07: call dword ptr ds:[0BC057F8] int 3 ; Total bytes of code 151 ``` ### Compare Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp push eax mov [ebp-4],ecx mov ecx,[ebp-4] cmp dword ptr [ecx+20],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0A5676A8] mov esp,ebp pop ebp ret M00_L00: xor eax,eax mov esp,ebp pop ebp ret ; Total bytes of code 35 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt16>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetHashCodeBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Of(UInt16).GetHashCodeBenchmark.html>) 29.98 ns 31.54 ns 1.05 0.04 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of&lt;UInt16&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Of<UInt16>.GetHashCodeBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 31.543987855004204 > 31.470095804281613. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.053092872259867 (T) = (0 -31.77339350056545) / Math.Sqrt((0.10740545650688203 / (32)) + (0.06865817492489831 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06546151748153482 = (29.821249270146545 - 31.77339350056545) / 29.821249270146545 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions 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
[DeserializeFromString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(LoginViewModel).DeserializeFromString(Mode%3a%20Reflection).html>) 586.94 ns 635.32 ns 1.08 0.02 False

graph Test Report

Repro

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>.DeserializeFromString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 635.3224501467631 > 629.9887344864806. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -8.668174305477775 (T) = (0 -629.1576236324364) / Math.Sqrt((74.18030755785018 / (32)) + (188.64045612285204 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.05184334346297221 = (598.1476495930161 - 629.1576236324364) / 598.1476495930161 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Tests.Perf_Random

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ctor_seeded - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_Random.ctor_seeded.html>) 395.38 ns 432.99 ns 1.10 0.04 False Trace Trace

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_Random*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_Random.ctor_seeded ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 432.9887627394931 > 414.22520935041996. IsChangePoint: Marked as a change because one of 10/26/2022 7:11:30 AM, 11/7/2022 4:10:19 PM, 11/18/2022 7:31:41 AM, 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -106.04590374312893 (T) = (0 -434.02967949026527) / Math.Sqrt((1.1473484204026436 / (32)) + (1.8799732130527949 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10073550218472721 = (394.308785924328 - 434.02967949026527) / 394.308785924328 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_Random.ctor_seeded() push ebp mov ebp,esp push edi push esi sub esp,18 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax mov ecx,offset MT_System.Random call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,offset MT_System.Random+Net5CompatSeedImpl call CORINFO_HELP_NEWSFAST mov edi,eax xor ecx,ecx mov [ebp-20],ecx mov [ebp-1C],ecx mov [ebp-18],ecx lea ecx,[ebp-20] mov edx,1E240 call dword ptr ds:[0B3292B8]; System.Random+CompatPrng..ctor(Int32) lea eax,[edi+4] mov ecx,[ebp-20] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov edx,[ebp-1C] mov [eax+4],edx mov edx,[ebp-18] mov [eax+8],edx lea edx,[esi+4] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi lea esp,[ebp-8] pop esi pop edi pop ebp ret ; Total bytes of code 116 ``` ```assembly ; System.Random+CompatPrng..ctor(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov [ebp-14],ecx mov edi,edx mov ecx,offset MT_System.Int32[] mov edx,38 call CORINFO_HELP_NEWARR_1_VC cmp edi,80000000 je short M01_L02 mov esi,[ebp-14] test edi,edi jl short M01_L01 M01_L00: jmp short M01_L03 M01_L01: neg edi js near ptr M01_L12 jmp short M01_L00 nop nop nop nop M01_L02: mov esi,[ebp-14] mov edi,7FFFFFFF M01_L03: mov edx,edi neg edx add edx,9A4EC86 mov [eax+0E4],edx mov ecx,1 xor edi,edi mov ebx,1 M01_L04: add edi,15 cmp edi,37 jl short M01_L05 add edi,0FFFFFFC9 M01_L05: cmp edi,38 jae near ptr M01_L13 mov [eax+edi*4+8],ecx sub edx,ecx mov ecx,edx test ecx,ecx jge short M01_L06 add ecx,7FFFFFFF M01_L06: mov edx,[eax+edi*4+8] inc ebx cmp ebx,37 jl short M01_L04 mov dword ptr [ebp-10],1 M01_L07: mov ecx,1 nop nop nop nop M01_L08: lea edi,[ecx+1E] cmp edi,37 jl short M01_L11 add edi,0FFFFFFC9 mov [ebp-14],esi M01_L09: lea ebx,[eax+ecx*4+8] mov esi,[ebx] lea edx,[edi+1] cmp edx,38 jae short M01_L13 sub esi,[eax+edi*4+0C] mov [ebx],esi test esi,esi jge short M01_L10 lea edx,[eax+ecx*4+8] add esi,7FFFFFFF mov [edx],esi M01_L10: inc ecx cmp ecx,38 mov esi,[ebp-14] jl short M01_L08 mov edx,[ebp-10] inc edx cmp edx,5 mov [ebp-10],edx jl short M01_L07 mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor eax,eax mov [esi+4],eax mov dword ptr [esi+8],15 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L11: mov [ebp-14],esi jmp short M01_L09 M01_L12: call dword ptr ds:[0B863CA8] int 3 M01_L13: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 276 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_Random.ctor_seeded() push ebp mov ebp,esp push edi push esi sub esp,18 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov [ebp-0C],eax mov ecx,offset MT_System.Random call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,offset MT_System.Random+Net5CompatSeedImpl call CORINFO_HELP_NEWSFAST mov edi,eax xor ecx,ecx mov [ebp-20],ecx mov [ebp-1C],ecx mov [ebp-18],ecx lea ecx,[ebp-20] mov edx,1E240 call dword ptr ds:[0A8812B8]; System.Random+CompatPrng..ctor(Int32) lea eax,[edi+4] mov ecx,[ebp-20] mov edx,eax call CORINFO_HELP_CHECKED_ASSIGN_REF_ECX mov edx,[ebp-1C] mov [eax+4],edx mov edx,[ebp-18] mov [eax+8],edx lea edx,[esi+4] call CORINFO_HELP_ASSIGN_REF_EDI mov eax,esi lea esp,[ebp-8] pop esi pop edi pop ebp ret ; Total bytes of code 116 ``` ```assembly ; System.Random+CompatPrng..ctor(Int32) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov [ebp-14],ecx mov edi,edx mov ecx,offset MT_System.Int32[] mov edx,38 call CORINFO_HELP_NEWARR_1_VC cmp edi,80000000 je short M01_L02 mov esi,[ebp-14] test edi,edi jl short M01_L01 M01_L00: jmp short M01_L03 M01_L01: neg edi js near ptr M01_L12 jmp short M01_L00 nop nop nop nop M01_L02: mov esi,[ebp-14] mov edi,7FFFFFFF M01_L03: mov edx,edi neg edx add edx,9A4EC86 mov [eax+0E4],edx mov ecx,1 xor edi,edi mov ebx,1 M01_L04: add edi,15 cmp edi,37 jl short M01_L05 add edi,0FFFFFFC9 M01_L05: cmp edi,38 jae near ptr M01_L13 mov [eax+edi*4+8],ecx sub edx,ecx mov ecx,edx test ecx,ecx jge short M01_L06 add ecx,7FFFFFFF M01_L06: mov edx,[eax+edi*4+8] inc ebx cmp ebx,37 jl short M01_L04 mov dword ptr [ebp-10],1 M01_L07: mov ecx,1 nop nop nop nop M01_L08: lea edi,[ecx+1E] cmp edi,37 jl short M01_L11 add edi,0FFFFFFC9 mov [ebp-14],esi M01_L09: lea ebx,[eax+ecx*4+8] mov esi,[ebx] lea edx,[edi+1] cmp edx,38 jae short M01_L13 sub esi,[eax+edi*4+0C] mov [ebx],esi test esi,esi jge short M01_L10 lea edx,[eax+ecx*4+8] add esi,7FFFFFFF mov [edx],esi M01_L10: inc ecx cmp ecx,38 mov esi,[ebp-14] jl short M01_L08 mov edx,[ebp-10] inc edx cmp edx,5 mov [ebp-10],edx jl short M01_L07 mov edx,esi call CORINFO_HELP_CHECKED_ASSIGN_REF_EAX xor eax,eax mov [esi+4],eax mov dword ptr [esi+8],15 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L11: mov [ebp-14],esi jmp short M01_L09 M01_L12: call dword ptr ds:[0AD9BCC0] int 3 M01_L13: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 276 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<Hashtable>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 16.06 μs 17.24 μs 1.07 0.03 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 16.04 μs 17.31 μs 1.08 0.01 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToString(Mode%3a%20SourceGen).html>) 16.97 μs 17.85 μs 1.05 0.00 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToString(Mode%3a%20Reflection).html>) 16.82 μs 18.05 μs 1.07 0.03 False
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToStream(Mode%3a%20Reflection).html>) 15.81 μs 17.45 μs 1.10 0.03 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Hashtable).SerializeToWriter(Mode%3a%20Reflection).html>) 15.64 μs 17.00 μs 1.09 0.01 False

graph graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;Hashtable&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.241077649431606 > 16.73673762398435. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.38970245931252 (T) = (0 -17268.527726101558) / Math.Sqrt((37602.06661262268 / (32)) + (39995.2326057566 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07781104296506187 = (16021.850804753103 - 17268.527726101558) / 16021.850804753103 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.312140046296296 > 16.745979894085703. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -31.254728770467068 (T) = (0 -17358.670005591157) / Math.Sqrt((27637.95118724811 / (32)) + (17368.043457470052 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08341638106036477 = (16022.159447692515 - 17358.670005591157) / 16022.159447692515 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.84630022962113 > 17.67254403267159. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.87372249602658 (T) = (0 -18156.92248107528) / Math.Sqrt((35658.838026439895 / (32)) + (37713.398503791694 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07324896403276267 = (16917.71722084887 - 18156.92248107528) / 16917.71722084887 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 18.04847638248848 > 17.940027941027644. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -27.302068148801848 (T) = (0 -18180.598551805197) / Math.Sqrt((29974.71795713367 / (32)) + (24522.978200480593 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07759267128767978 = (16871.494244741025 - 18180.598551805197) / 16871.494244741025 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 17.445755237560792 > 16.59238173967873. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -24.801543442445883 (T) = (0 -17526.097307269036) / Math.Sqrt((114538.64088793128 / (32)) + (12304.162103719294 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10180023351980244 = (15906.783075621886 - 17526.097307269036) / 15906.783075621886 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Hashtable>.SerializeToWriter(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 16.995487914862917 > 16.572195115188478. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.317282337171928 (T) = (0 -16928.14228090363) / Math.Sqrt((49276.91326769063 / (32)) + (25267.473342004403 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07333314574026657 = (15771.563887769877 - 16928.14228090363) / 15771.563887769877 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions 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](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromStream(Mode%3a%20SourceGen).html>) 27.08 μs 30.24 μs 1.12 0.08 False
[DeserializeFromString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromString(Mode%3a%20SourceGen).html>) 24.96 μs 27.76 μs 1.11 0.03 False
[DeserializeFromUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromUtf8Bytes(Mode%3a%20SourceGen).html>) 24.51 μs 26.79 μs 1.09 0.05 False
[DeserializeFromReader - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromReader(Mode%3a%20Reflection).html>) 35.23 μs 37.45 μs 1.06 0.12 False
[DeserializeFromString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromString(Mode%3a%20Reflection).html>) 24.89 μs 28.31 μs 1.14 0.01 False
[DeserializeFromUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromUtf8Bytes(Mode%3a%20Reflection).html>) 23.95 μs 27.57 μs 1.15 0.01 False
[DeserializeFromStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.ReadJson(Dictionary(String%2c%20String)).DeserializeFromStream(Mode%3a%20Reflection).html>) 27.02 μs 29.39 μs 1.09 0.11 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) graph_6.png>) graph_7.png>) Test Report.html>)

Repro

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: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 30.24465153709963 > 28.603389213752703. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -19.69926003773081 (T) = (0 -30392.993729197227) / Math.Sqrt((418743.961534717 / (32)) + (187076.6132120313 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.11026618887462863 = (27374.5107558429 - 30392.993729197227) / 27374.5107558429 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 27.764905674390967 > 26.40164299869405. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.862656319902781 (T) = (0 -27877.797032091974) / Math.Sqrt((175306.08370565818 / (32)) + (841995.8674428756 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09778256613942543 = (25394.64361337955 - 27877.797032091974) / 25394.64361337955 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 26.79371926815323 > 25.863149028627895. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -25.481804972506204 (T) = (0 -26934.59445166699) / Math.Sqrt((88015.22231919834 / (32)) + (88740.03751304795 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09040709939007804 = (24701.411488179896 - 26934.59445166699) / 24701.411488179896 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromReader(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 37.45457990750257 > 37.2779456210128. IsChangePoint: Marked as a change because one of 12/20/2022 11:23:14 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.355647898428245 (T) = (0 -37958.251949320314) / Math.Sqrt((871008.5467572366 / (30)) + (437328.0059190626 / (20))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (30) + (20) - 2, .025) and -0.06558719130845443 = (35621.91086654361 - 37958.251949320314) / 35621.91086654361 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 28.31204476709014 > 26.15001717228549. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -39.05918929129766 (T) = (0 -28379.173504515504) / Math.Sqrt((40888.9313903346 / (32)) + (116000.69042816144 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.13758806834592602 = (24946.79251143988 - 28379.173504515504) / 24946.79251143988 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 27.57111160188457 > 25.375317629792804. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -39.99531501739904 (T) = (0 -27416.467736500148) / Math.Sqrt((47182.73973689502 / (32)) + (89129.68965361429 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.1324288560415447 = (24210.322432382753 - 27416.467736500148) / 24210.322432382753 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.ReadJson<Dictionary<String, String>>.DeserializeFromStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 29.39420405606452 > 28.681842629439757. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -31.924989359442257 (T) = (0 -30043.034128356565) / Math.Sqrt((49244.50564342285 / (32)) + (107027.75627317712 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10124234969443335 = (27281.03776311612 - 30043.034128356565) / 27281.03776311612 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<ArrayList>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ArrayList).SerializeObjectProperty(Mode%3a%20Reflection).html>) 9.60 μs 10.78 μs 1.12 0.03 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ArrayList).SerializeToWriter(Mode%3a%20SourceGen).html>) 9.01 μs 9.51 μs 1.06 0.01 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ArrayList).SerializeToWriter(Mode%3a%20Reflection).html>) 8.78 μs 9.27 μs 1.06 0.02 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ArrayList).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 8.92 μs 9.44 μs 1.06 0.01 False
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(ArrayList).SerializeToStream(Mode%3a%20SourceGen).html>) 9.07 μs 9.95 μs 1.10 0.01 False

graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;ArrayList&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<ArrayList>.SerializeObjectProperty(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 10.775544596912523 > 10.107587183361625. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -19.711400767011018 (T) = (0 -10633.164159210026) / Math.Sqrt((11019.804649605943 / (32)) + (39996.39938730483 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10364432370757222 = (9634.593256900987 - 10633.164159210026) / 9634.593256900987 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ArrayList>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.51480933496034 > 9.42868902874628. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -19.870150003625774 (T) = (0 -9585.786839493827) / Math.Sqrt((9905.14882740164 / (32)) + (10470.014766756107 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06596357056361275 = (8992.602659418728 - 9585.786839493827) / 8992.602659418728 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ArrayList>.SerializeToWriter(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.268526984609151 > 9.189215478618205. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -16.019127394991127 (T) = (0 -9348.02837443199) / Math.Sqrt((13567.714774926435 / (32)) + (16104.21079607866 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06635743810402125 = (8766.317972192084 - 9348.02837443199) / 8766.317972192084 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ArrayList>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.444123867069486 > 9.392469096613452. IsChangePoint: Marked as a change because one of 12/1/2022 5:03:18 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -22.774719066754056 (T) = (0 -9574.489254957793) / Math.Sqrt((3890.612004953169 / (32)) + (11585.457479486824 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07043531699954406 = (8944.48184108435 - 9574.489254957793) / 8944.48184108435 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ArrayList>.SerializeToStream(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.953975916453539 > 9.437421633055823. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.33128539880293 (T) = (0 -9928.256816526215) / Math.Sqrt((8242.055507457535 / (32)) + (14025.20912513196 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10117804294682718 = (9016.032312047855 - 9928.256816526215) / 9016.032312047855 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int16>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetHashCodeBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Of(Int16).GetHashCodeBenchmark.html>) 29.36 ns 31.51 ns 1.07 0.04 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of&lt;Int16&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Int16>.GetHashCodeBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 31.505951586810347 > 30.83442915769053. IsChangePoint: Marked as a change because one of 12/12/2022 1:34:22 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -22.730757794647317 (T) = (0 -31.809537691602014) / Math.Sqrt((0.12806845808126133 / (32)) + (0.05986781748011169 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06515790466213252 = (29.86368270129111 - 31.809537691602014) / 29.86368270129111 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.IO.Tests.BinaryWriterExtendedTests

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WriteAsciiString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString(StringLengthInChars%3a%2032).html>) 25.66 ns 28.99 ns 1.13 0.20 False 251.2611190990779 288.9683701416417 1.1500719696615496 Trace Trace
[WriteAsciiCharArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray(StringLengthInChars%3a%208000).html>) 468.47 ns 545.26 ns 1.16 0.02 False 5720.694235752706 6257.4084471894685 1.0938197689508473 Trace Trace
[WriteAsciiString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString(StringLengthInChars%3a%208000).html>) 479.45 ns 539.81 ns 1.13 0.02 False 5726.611123917411 6294.16100187608 1.099107459137268 Trace Trace
[WriteAsciiCharArray - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray(StringLengthInChars%3a%202000000).html>) 152.17 μs 163.73 μs 1.08 0.17 False 1285586.7346938776 1411666.6666666665 1.0980718986671956 Trace Trace

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.IO.Tests.BinaryWriterExtendedTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString(StringLengthInChars: 32) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 28.99238483867813 > 24.633642556046016. IsChangePoint: Marked as a change because one of 10/7/2022 9:25:17 PM, 10/25/2022 2:56:59 AM, 10/26/2022 2:40:44 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -36.82838575675728 (T) = (0 -28.97481266854866) / Math.Sqrt((0.520625009223676 / (32)) + (0.10538675747905904 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.23313530915502342 = (23.496864012760255 - 28.97481266854866) / 23.496864012760255 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+4] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+4] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray(StringLengthInChars: 8000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 545.2610005605383 > 490.73120427157045. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -35.87921743303282 (T) = (0 -539.4383839965153) / Math.Sqrt((62.30439385626619 / (32)) + (40.27191728261921 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.15748115135207005 = (466.0450698194003 - 539.4383839965153) / 466.0450698194003 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+8] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+4] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+8] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+4] pop ebp ret ; Total bytes of code 21 ``` #### System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString(StringLengthInChars: 8000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 539.8138547311379 > 495.9620331789561. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -43.16416787898883 (T) = (0 -541.0897442578942) / Math.Sqrt((42.110836875899345 / (32)) + (25.644784849857604 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.1521580011128447 = (469.6315468323504 - 541.0897442578942) / 469.6315468323504 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+4] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+4] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray(StringLengthInChars: 2000000) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 163.72732768469152 > 158.86946665272546. IsChangePoint: Marked as a change because one of 10/6/2022 2:13:23 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.777043919644107 (T) = (0 -161666.85085192494) / Math.Sqrt((17516277.141142268 / (32)) + (15094749.177355926 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08516327933598591 = (148979.2862792494 - 161666.85085192494) / 148979.2862792494 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+8] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+4] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiCharArray() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+0C] mov edx,[edx+8] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+4] pop ebp ret ; Total bytes of code 21 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Byte>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetHashCodeBenchmark - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Runtime.Intrinsics.Tests.Perf_Vector128Of(Byte).GetHashCodeBenchmark.html>) 54.69 ns 60.77 ns 1.11 0.03 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Runtime.Intrinsics.Tests.Perf_Vector128Of&lt;Byte&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Runtime.Intrinsics.Tests.Perf_Vector128Of<Byte>.GetHashCodeBenchmark ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 60.77278950652627 > 57.37938312153381. IsChangePoint: Marked as a change because one of 12/12/2022 5:25:39 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -14.449912473752311 (T) = (0 -60.301307113324356) / Math.Sqrt((0.02290773619606039 / (32)) + (2.737202391956975 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10334431590735986 = (54.65320865294369 - 60.301307113324356) / 54.65320865294369 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToString(Mode%3a%20Reflection).html>) 7.78 μs 8.30 μs 1.07 0.01 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeObjectProperty(Mode%3a%20Reflection).html>) 7.96 μs 8.57 μs 1.08 0.03 False
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToStream(Mode%3a%20Reflection).html>) 7.31 μs 7.82 μs 1.07 0.01 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 7.43 μs 8.16 μs 1.10 0.01 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToWriter(Mode%3a%20SourceGen).html>) 5.50 μs 6.01 μs 1.09 0.08 False
[SerializeObjectProperty - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 6.20 μs 6.85 μs 1.11 0.04 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 5.45 μs 6.04 μs 1.11 0.12 False
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToString(Mode%3a%20SourceGen).html>) 5.84 μs 6.44 μs 1.10 0.03 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(HashSet(String)).SerializeToWriter(Mode%3a%20Reflection).html>) 7.26 μs 7.78 μs 1.07 0.02 False

graph_1.png>) graph_2.png>) graph_3.png>) graph_4.png>) graph_5.png>) graph_6.png>) graph_7.png>) graph_8.png>) graph_9.png>) Test Report.html>)

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;HashSet&lt;String&gt;&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 8.29748185519561 > 8.197577290214866. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -27.847633470401252 (T) = (0 -8394.413712118308) / Math.Sqrt((5611.827232499586 / (32)) + (5774.177432844936 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07978968770094615 = (7774.119171291057 - 8394.413712118308) / 7774.119171291057 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeObjectProperty(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 8.567784022114088 > 8.415626985805797. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.322057013038492 (T) = (0 -8618.207442486937) / Math.Sqrt((7153.597304451936 / (32)) + (8307.675704685636 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07623039496782413 = (8007.7718328560995 - 8618.207442486937) / 8007.7718328560995 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.817619436077646 > 7.52584799826088. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.375851434070757 (T) = (0 -7895.260485693235) / Math.Sqrt((10610.810794955816 / (32)) + (9955.143022865403 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09656540962047945 = (7199.990457865873 - 7895.260485693235) / 7199.990457865873 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 8.155663635587432 > 7.649913438168293. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.85996373834598 (T) = (0 -7990.035835409435) / Math.Sqrt((4586.725988155578 / (32)) + (16943.96051081603 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09407162722733174 = (7303.028098496905 - 7990.035835409435) / 7303.028098496905 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.008922892720306 > 5.4891655649608335. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -31.836050751526617 (T) = (0 -5947.056796019352) / Math.Sqrt((7156.724257985062 / (32)) + (6742.560180566012 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.15066072398576094 = (5168.384278746743 - 5947.056796019352) / 5168.384278746743 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.852536439471739 > 6.454900303535788. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -26.762136919844387 (T) = (0 -6774.553089903387) / Math.Sqrt((12521.122249515602 / (32)) + (2892.920513893624 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10230908355770874 = (6145.783601853737 - 6774.553089903387) / 6145.783601853737 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.037820512820514 > 5.709721697610691. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -19.495175601399346 (T) = (0 -6145.06734977588) / Math.Sqrt((10161.808241224953 / (32)) + (17733.405394286572 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.12931382992374924 = (5441.416891344359 - 6145.06734977588) / 5441.416891344359 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 6.442855295821266 > 6.124646707945944. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -36.70962549126887 (T) = (0 -6462.222236064776) / Math.Sqrt((1564.1757270847745 / (32)) + (4532.478123436631 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10926725075296417 = (5825.667558181544 - 6462.222236064776) / 5825.667558181544 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToWriter(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.778089289822839 > 7.558350132323926. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -9.256225253412032 (T) = (0 -7853.141099762452) / Math.Sqrt((8068.909279552119 / (32)) + (71931.59632462019 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08321787894382716 = (7249.825960608701 - 7853.141099762452) / 7249.825960608701 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<LargeStructWithProperties>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LargeStructWithProperties).SerializeToString(Mode%3a%20SourceGen).html>) 546.40 ns 581.17 ns 1.06 0.05 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LargeStructWithProperties).SerializeToUtf8Bytes(Mode%3a%20Reflection).html>) 847.74 ns 922.71 ns 1.09 0.01 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LargeStructWithProperties).SerializeToWriter(Mode%3a%20SourceGen).html>) 413.46 ns 475.42 ns 1.15 0.03 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(LargeStructWithProperties).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 492.12 ns 548.86 ns 1.12 0.08 False

graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;LargeStructWithProperties&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<LargeStructWithProperties>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 581.1686354434694 > 573.9432268352358. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -11.68394243849353 (T) = (0 -583.4051906036649) / Math.Sqrt((51.77746249535389 / (32)) + (206.1359525693194 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07805457749658481 = (541.164800726903 - 583.4051906036649) / 541.164800726903 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<LargeStructWithProperties>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 922.7115045704547 > 891.704679967294. IsChangePoint: Marked as a change because one of 12/5/2022 3:14:07 PM, 12/20/2022 7:58:25 PM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -15.461544803064797 (T) = (0 -902.7411377807109) / Math.Sqrt((82.75647604258452 / (29)) + (141.9965999093202 / (21))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (29) + (21) - 2, .025) and -0.05608851928197712 = (854.796848274115 - 902.7411377807109) / 854.796848274115 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<LargeStructWithProperties>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 475.4226949813636 > 435.1592639334334. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.12591849084278 (T) = (0 -450.7155856639771) / Math.Sqrt((16.2516157504844 / (32)) + (42.34559587219969 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08169002855795987 = (416.67721229236287 - 450.7155856639771) / 416.67721229236287 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<LargeStructWithProperties>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 548.8588798244856 > 524.9534109221021. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -11.45162189110395 (T) = (0 -541.6657213129513) / Math.Sqrt((79.9227450114209 / (32)) + (209.1965497106427 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08629699505448306 = (498.63501765995784 - 541.6657213129513) / 498.63501765995784 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Memory.Span<Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IndexOfAnyFourValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFourValues(Size%3a%20512).html>) 504.70 ns 537.97 ns 1.07 0.04 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFiveValues(Size%3a%20512).html>) 600.58 ns 800.94 ns 1.33 0.04 False
[IndexOfAnyFiveValues - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Memory.Span(Int32).IndexOfAnyFiveValues(Size%3a%2033).html>) 42.58 ns 52.73 ns 1.24 0.13 False

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Memory.Span&lt;Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Memory.Span<Int32>.IndexOfAnyFourValues(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 537.9712992837692 > 530.0621251263251. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/2/2022 4:14:20 AM, 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -56.26788746129188 (T) = (0 -537.184852743984) / Math.Sqrt((3.7952243826465266 / (32)) + (4.038154454783888 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06534909211506915 = (504.2336420238506 - 537.184852743984) / 504.2336420238506 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 800.9397916774006 > 628.3633598471313. IsChangePoint: Marked as a change because one of 10/25/2022 12:27:43 PM, 11/7/2022 4:10:19 PM, 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -79.83496286772872 (T) = (0 -788.3565744297616) / Math.Sqrt((7.536503063193435 / (32)) + (95.99823438460473 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.314014297839428 = (599.96042335766 - 788.3565744297616) / 599.96042335766 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Memory.Span<Int32>.IndexOfAnyFiveValues(Size: 33) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 52.731851331258135 > 43.81403026727994. IsChangePoint: Marked as a change because one of 12/7/2022 8:33:47 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -48.85718936541295 (T) = (0 -53.53083974207928) / Math.Sqrt((0.8447239298338949 / (32)) + (0.6937958972299664 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.30308046943064076 = (41.080225663629726 - 53.53083974207928) / 41.080225663629726 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions 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](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Document.Tests.Perf_DocumentParse.Parse(IsDataIndented%3a%20True%2c%20TestRandomAccess%3a%20True%2c%20TestCase%3a%20BasicJson).html>) 2.05 μs 2.23 μs 1.09 0.02 False 20698.8032762196 21321.288304961552 1.0300734791492565 Trace Trace
[Parse - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Document.Tests.Perf_DocumentParse.Parse(IsDataIndented%3a%20False%2c%20TestRandomAccess%3a%20True%2c%20TestCase%3a%20BasicJson).html>) 1.80 μs 1.92 μs 1.07 0.01 False 18164.294074000412 18793.075276766605 1.0346163302688545 Trace Trace

graph graph Test Report

Repro

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: True, TestRandomAccess: True, TestCase: BasicJson) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 2.233196469056578 > 2.1927875509722186. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -20.68271426212377 (T) = (0 -2214.1328441613236) / Math.Sqrt((702.4199869854627 / (32)) + (361.90697058670673 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06448525468681837 = (2080.003301513784 - 2214.1328441613236) / 2080.003301513784 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse() push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 xor eax,eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M00_L05 mov ebx,edi mov edi,[ebx+4] M00_L00: xor ecx,ecx mov [ebp-28],ecx mov [ebp-24],ecx lea ecx,[ebp-28] lea edx,[ebp-30] call dword ptr ds:[0ADC5AF8]; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push edi push 0 push ebx push dword ptr [ebp-2C] push dword ptr [ebp-30] xor ecx,ecx xor edx,edx call dword ptr ds:[0ADC59A8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) mov edi,eax mov [ebp-34],edi cmp byte ptr [esi+0D],0 je near ptr M00_L04 mov esi,[esi+8] test esi,esi jne short M00_L01 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A3AF558] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L06 jmp near ptr M00_L09 M00_L01: cmp esi,2 jne short M00_L02 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A3AF570] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L07 jmp short M00_L09 M00_L02: cmp esi,1 jne short M00_L03 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A3AF588]; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L08 jmp short M00_L09 M00_L03: cmp esi,3 jne short M00_L04 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A3AF5A0] M00_L04: test edi,edi je short M00_L11 mov ecx,edi call dword ptr ds:[0ADA4680]; System.Text.Json.JsonDocument.Dispose() jmp short M00_L11 M00_L05: xor ebx,ebx xor edi,edi jmp near ptr M00_L00 M00_L06: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L07: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L08: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L09: mov ebx,[ebp-34] test ebx,ebx je short M00_L10 mov ecx,ebx call dword ptr ds:[0ADA4680]; System.Text.Json.JsonDocument.Dispose() M00_L10: pop eax jmp eax M00_L11: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 325 ``` ```assembly ; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push ebp mov ebp,esp push ebx movzx eax,byte ptr [ecx+5] movzx ebx,byte ptr [ecx+4] cmp ebx,2 jg short M01_L00 mov ecx,[ecx] test ecx,ecx jl short M01_L01 mov [edx],ecx mov [edx+4],bl mov [edx+5],al pop ebx pop ebp ret M01_L00: mov ecx,2C5E mov edx,0ADA2164 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0ADC7720] int 3 M01_L01: mov ecx,2C5E mov edx,0ADA2164 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0ADC76F0] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-50],edx mov ebx,ecx xor ecx,ecx xor edx,edx mov eax,[ebp+10] test eax,eax je short M02_L01 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M02_L06 lea ecx,[eax+8] mov edx,[eax+4] M02_L00: mov eax,[ebp+14] and eax,7FFFFFFF mov edi,[ebp+18] cmp eax,edx ja near ptr M02_L07 sub edx,eax cmp edx,edi jb near ptr M02_L07 add ecx,eax mov edx,edi M02_L01: mov edi,ecx mov eax,edx mov [ebp-4C],eax mov edx,[ebp+18] add edx,0C cmp edx,100000 jle short M02_L02 cmp edx,400000 jg short M02_L02 mov edx,100000 M02_L02: mov ecx,ds:[6A31FE0] call dword ptr ds:[0ADA5DD8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-2C],eax xor ecx,ecx mov [ebp-28],ecx mov byte ptr [ebp-24],0 mov byte ptr [ebp-23],0 mov ecx,ds:[6A31FE0] mov edx,200 call dword ptr ds:[0ADA5DD8]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-34],eax mov ecx,[ebp-34] mov ecx,[ecx+4] mov [ebp-30],ecx push dword ptr [ebp-4C] push edi push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp-2C] lea edx,[ebp-34] call dword ptr ds:[0ADC57C8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef) jmp short M02_L03 lea ecx,[ebp-2C] call dword ptr ds:[0ADC52E8]; System.Text.Json.JsonDocument+MetadataDb.Dispose() call CORINFO_HELP_RETHROW int 3 M02_L03: mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L05 push 0 mov ecx,ds:[6A31FE0] call dword ptr ds:[0ADA5DDC]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) jmp short M02_L05 mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L04 push 0 mov ecx,ds:[6A31FE0] call dword ptr ds:[0ADA5DDC]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) M02_L04: pop eax jmp eax M02_L05: mov ecx,offset MT_System.Text.Json.JsonDocument call CORINFO_HELP_NEWSFAST lea edi,[ebp-48] lea esi,[ebp-2C] movsd movsd movsd lea edi,[eax+10] lea esi,[ebp+10] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edi,[eax+1C] lea esi,[ebp-48] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[eax+8] mov esi,[ebp-50] call CORINFO_HELP_ASSIGN_REF_ESI mov byte ptr [eax+0C],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M02_L06: lea edx,[ebp-3C] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-3C] mov edx,[ebp-38] jmp near ptr M02_L00 M02_L07: call dword ptr ds:[82E9A08] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov ecx,7C37728 add ecx,8 mov esi,[ebp+8] test esi,esi je near ptr M03_L02 push 3 push ecx lea ecx,[ebp-20] push ecx mov ecx,esi mov edi,[ebp+0C] mov edx,edi cmp [ecx],ecx call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L03 mov ecx,[ebp-20] mov [ebp-14],ecx mov ecx,[ebp-1C] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L04 lea ecx,[ebp-24] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 mov ecx,7C3773C add ecx,8 push 5 push ecx lea ecx,[ebp-2C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L05 mov ecx,[ebp-2C] mov [ebp-14],ecx mov ecx,[ebp-28] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L06 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7C37754 add ecx,8 push 4 push ecx lea ecx,[ebp-34] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L07 mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L08 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7C3776C add ecx,8 push 0C push ecx lea ecx,[ebp-3C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L09 mov ebx,[ebp-3C] mov eax,[ebp-38] mov [ebp-64],eax xor edx,edx mov [ebp-18],edx jmp short M03_L01 M03_L00: push dword ptr [ebp-64] mov [ebp-18],ecx push ecx lea edx,[ebp-14] mov ecx,ebx call dword ptr ds:[0ADC54B0]; System.Text.Json.JsonDocument.GetArrayIndexElement(Int32, Int32) cmp dword ptr [ebp-14],0 je near ptr M03_L10 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,[ebp-18] inc ecx mov [ebp-18],ecx mov eax,[ebp-64] M03_L01: test ebx,ebx je near ptr M03_L11 mov ecx,ebx mov edx,eax call dword ptr ds:[0ADC5498]; System.Text.Json.JsonDocument.GetArrayLength(Int32) mov ecx,[ebp-18] cmp eax,ecx jg short M03_L00 mov ecx,7C37794 add ecx,8 push 7 push ecx lea ecx,[ebp-44] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L12 mov esi,[ebp-44] mov edi,[ebp-40] mov ecx,7C377B0 add ecx,8 test esi,esi je near ptr M03_L13 push 6 push ecx lea ecx,[ebp-4C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L14 mov ecx,[ebp-4C] mov [ebp-14],ecx mov ecx,[ebp-48] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L15 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7C377CC add ecx,8 push 4 push ecx lea ecx,[ebp-54] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L16 mov ecx,[ebp-54] mov [ebp-14],ecx mov ecx,[ebp-50] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L17 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7C377E4 add ecx,8 push 3 push ecx lea ecx,[ebp-5C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0ADC5A08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L18 mov ecx,[ebp-5C] mov [ebp-14],ecx mov ecx,[ebp-58] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L19 lea ecx,[ebp-60] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0ADC5600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M03_L02: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L03: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L05: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L06: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L07: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L08: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L09: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L10: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L11: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L12: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L13: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L14: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L15: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L16: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L17: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L18: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0AE75AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L19: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[82B11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L20: call dword ptr ds:[0ADC7BD0] int 3 ; Total bytes of code 1183 ``` ```assembly ; System.Text.Json.JsonDocument.Dispose() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[esi+18] test edi,edi je short M04_L00 cmp byte ptr [esi+0C],0 jne short M04_L01 M04_L00: pop ebx pop esi pop edi pop ebp ret M04_L01: lea ebx,[esi+1C] xor ecx,ecx mov edx,ecx xchg edx,[ebx] test edx,edx je short M04_L02 push 0 mov ecx,ds:[6A31FE0] call dword ptr ds:[0ADA5DDC]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) xor ecx,ecx mov [ebx+4],ecx M04_L02: xor ecx,ecx mov [esi+10],ecx mov [esi+14],ecx mov [esi+18],ecx cmp dword ptr [esi+4],0 je short M04_L03 add esi,4 xor ecx,ecx mov ebx,ecx xchg ebx,[esi] test ebx,ebx je short M04_L04 mov ecx,[ebx+4] cmp ecx,edi jb short M04_L05 lea ecx,[ebx+8] mov edx,edi call dword ptr ds:[7BEF3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push 0 mov ecx,ds:[6A31FE0] mov edx,ebx call dword ptr ds:[0ADA5DDC]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) pop ebx pop esi pop edi pop ebp ret M04_L03: cmp dword ptr [esi+8],0 je short M04_L04 lea ecx,[esi+8] xor eax,eax xchg eax,[ecx] test eax,eax je short M04_L04 mov ecx,eax call dword ptr ds:[0ADA5A84]; System.Text.Json.PooledByteBufferWriter.Dispose() M04_L04: pop ebx pop esi pop edi pop ebp ret M04_L05: call dword ptr ds:[82E9A08] int 3 ; Total bytes of code 164 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse() push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 xor eax,eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M00_L05 mov ebx,edi mov edi,[ebx+4] M00_L00: xor ecx,ecx mov [ebp-28],ecx mov [ebp-24],ecx lea ecx,[ebp-28] lea edx,[ebp-30] call dword ptr ds:[0B11DAF8]; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push edi push 0 push ebx push dword ptr [ebp-2C] push dword ptr [ebp-30] xor ecx,ecx xor edx,edx call dword ptr ds:[0B11D9A8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) mov edi,eax mov [ebp-34],edi cmp byte ptr [esi+0D],0 je near ptr M00_L04 mov esi,[esi+8] test esi,esi jne short M00_L01 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A717558] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L06 jmp near ptr M00_L09 M00_L01: cmp esi,2 jne short M00_L02 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A717570] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L07 jmp short M00_L09 M00_L02: cmp esi,1 jne short M00_L03 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A717588]; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L08 jmp short M00_L09 M00_L03: cmp esi,3 jne short M00_L04 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A7175A0] M00_L04: test edi,edi je short M00_L11 mov ecx,edi call dword ptr ds:[0B0F21D8]; System.Text.Json.JsonDocument.Dispose() jmp short M00_L11 M00_L05: xor ebx,ebx xor edi,edi jmp near ptr M00_L00 M00_L06: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L07: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L08: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L09: mov ebx,[ebp-34] test ebx,ebx je short M00_L10 mov ecx,ebx call dword ptr ds:[0B0F21D8]; System.Text.Json.JsonDocument.Dispose() M00_L10: pop eax jmp eax M00_L11: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 325 ``` ```assembly ; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push ebp mov ebp,esp push ebx movzx eax,byte ptr [ecx+5] movzx ebx,byte ptr [ecx+4] cmp ebx,2 jg short M01_L00 mov ecx,[ecx] test ecx,ecx jl short M01_L01 mov [edx],ecx mov [edx+4],bl mov [edx+5],al pop ebx pop ebp ret M01_L00: mov ecx,2C5E mov edx,0B0DFC8C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B11F720] int 3 M01_L01: mov ecx,2C5E mov edx,0B0DFC8C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B11F6F0] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-50],edx mov ebx,ecx xor ecx,ecx xor edx,edx mov eax,[ebp+10] test eax,eax je short M02_L01 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M02_L06 lea ecx,[eax+8] mov edx,[eax+4] M02_L00: mov eax,[ebp+14] and eax,7FFFFFFF mov edi,[ebp+18] cmp eax,edx ja near ptr M02_L07 sub edx,eax cmp edx,edi jb near ptr M02_L07 add ecx,eax mov edx,edi M02_L01: mov edi,ecx mov eax,edx mov [ebp-4C],eax mov edx,[ebp+18] add edx,0C cmp edx,100000 jle short M02_L02 cmp edx,400000 jg short M02_L02 mov edx,100000 M02_L02: mov ecx,ds:[6DB1FE0] call dword ptr ds:[0B0F3900]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-2C],eax xor ecx,ecx mov [ebp-28],ecx mov byte ptr [ebp-24],0 mov byte ptr [ebp-23],0 mov ecx,ds:[6DB1FE0] mov edx,200 call dword ptr ds:[0B0F3900]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-34],eax mov ecx,[ebp-34] mov ecx,[ecx+4] mov [ebp-30],ecx push dword ptr [ebp-4C] push edi push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp-2C] lea edx,[ebp-34] call dword ptr ds:[0B11D7C8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef) jmp short M02_L03 lea ecx,[ebp-2C] call dword ptr ds:[0B11D2E8]; System.Text.Json.JsonDocument+MetadataDb.Dispose() call CORINFO_HELP_RETHROW int 3 M02_L03: mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L05 push 0 mov ecx,ds:[6DB1FE0] call dword ptr ds:[0B0F3904]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) jmp short M02_L05 mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L04 push 0 mov ecx,ds:[6DB1FE0] call dword ptr ds:[0B0F3904]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) M02_L04: pop eax jmp eax M02_L05: mov ecx,offset MT_System.Text.Json.JsonDocument call CORINFO_HELP_NEWSFAST lea edi,[ebp-48] lea esi,[ebp-2C] movsd movsd movsd lea edi,[eax+10] lea esi,[ebp+10] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edi,[eax+1C] lea esi,[ebp-48] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[eax+8] mov esi,[ebp-50] call CORINFO_HELP_ASSIGN_REF_ESI mov byte ptr [eax+0C],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M02_L06: lea edx,[ebp-3C] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-3C] mov edx,[ebp-38] jmp near ptr M02_L00 M02_L07: call dword ptr ds:[8675060] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov ecx,8017728 add ecx,8 mov esi,[ebp+8] test esi,esi je near ptr M03_L02 push 3 push ecx lea ecx,[ebp-20] push ecx mov ecx,esi mov edi,[ebp+0C] mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L03 mov ecx,[ebp-20] mov [ebp-14],ecx mov ecx,[ebp-1C] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L04 lea ecx,[ebp-24] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 mov ecx,801773C add ecx,8 push 5 push ecx lea ecx,[ebp-2C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L05 mov ecx,[ebp-2C] mov [ebp-14],ecx mov ecx,[ebp-28] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L06 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,8017754 add ecx,8 push 4 push ecx lea ecx,[ebp-34] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L07 mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L08 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,801776C add ecx,8 push 0C push ecx lea ecx,[ebp-3C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L09 mov ebx,[ebp-3C] mov eax,[ebp-38] mov [ebp-64],eax xor edx,edx mov [ebp-18],edx jmp short M03_L01 M03_L00: push dword ptr [ebp-64] mov [ebp-18],ecx push ecx lea edx,[ebp-14] mov ecx,ebx call dword ptr ds:[0B11D4B0]; System.Text.Json.JsonDocument.GetArrayIndexElement(Int32, Int32) cmp dword ptr [ebp-14],0 je near ptr M03_L10 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,[ebp-18] inc ecx mov [ebp-18],ecx mov eax,[ebp-64] M03_L01: test ebx,ebx je near ptr M03_L11 mov ecx,ebx mov edx,eax call dword ptr ds:[0B11D498]; System.Text.Json.JsonDocument.GetArrayLength(Int32) mov ecx,[ebp-18] cmp eax,ecx jg short M03_L00 mov ecx,8017794 add ecx,8 push 7 push ecx lea ecx,[ebp-44] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L12 mov esi,[ebp-44] mov edi,[ebp-40] mov ecx,80177B0 add ecx,8 test esi,esi je near ptr M03_L13 push 6 push ecx lea ecx,[ebp-4C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L14 mov ecx,[ebp-4C] mov [ebp-14],ecx mov ecx,[ebp-48] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L15 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,80177CC add ecx,8 push 4 push ecx lea ecx,[ebp-54] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L16 mov ecx,[ebp-54] mov [ebp-14],ecx mov ecx,[ebp-50] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L17 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,80177E4 add ecx,8 push 3 push ecx lea ecx,[ebp-5C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B11DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L18 mov ecx,[ebp-5C] mov [ebp-14],ecx mov ecx,[ebp-58] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L19 lea ecx,[ebp-60] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B11D600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M03_L02: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L03: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L05: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L06: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L07: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L08: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L09: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L10: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L11: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L12: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L13: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L14: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L15: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L16: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L17: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L18: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B1DDAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L19: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[86611B0] mov ecx,esi call CORINFO_HELP_THROW M03_L20: call dword ptr ds:[0B11FBD0] int 3 ; Total bytes of code 1183 ``` ```assembly ; System.Text.Json.JsonDocument.Dispose() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[esi+18] test edi,edi je short M04_L00 cmp byte ptr [esi+0C],0 jne short M04_L01 M04_L00: pop ebx pop esi pop edi pop ebp ret M04_L01: lea ebx,[esi+1C] xor ecx,ecx mov edx,ecx xchg edx,[ebx] test edx,edx je short M04_L02 push 0 mov ecx,ds:[6DB1FE0] call dword ptr ds:[0B0F3904]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) xor ecx,ecx mov [ebx+4],ecx M04_L02: xor ecx,ecx mov [esi+10],ecx mov [esi+14],ecx mov [esi+18],ecx cmp dword ptr [esi+4],0 je short M04_L03 add esi,4 xor ecx,ecx mov ebx,ecx xchg ebx,[esi] test ebx,ebx je short M04_L04 mov ecx,[ebx+4] cmp ecx,edi jb short M04_L05 lea ecx,[ebx+8] mov edx,edi call dword ptr ds:[4BAF3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push 0 mov ecx,ds:[6DB1FE0] mov edx,ebx call dword ptr ds:[0B0F3904]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) pop ebx pop esi pop edi pop ebp ret M04_L03: cmp dword ptr [esi+8],0 je short M04_L04 lea ecx,[esi+8] xor eax,eax xchg eax,[ecx] test eax,eax je short M04_L04 mov ecx,eax call dword ptr ds:[0B0F35B0]; System.Text.Json.PooledByteBufferWriter.Dispose() M04_L04: pop ebx pop esi pop edi pop ebp ret M04_L05: call dword ptr ds:[8675060] int 3 ; Total bytes of code 164 ``` #### System.Text.Json.Document.Tests.Perf_DocumentParse.Parse(IsDataIndented: False, TestRandomAccess: True, TestCase: BasicJson) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.9244849614122082 > 1.8884587477485397. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -32.84587970520603 (T) = (0 -1912.0806606964854) / Math.Sqrt((86.53927378542728 / (32)) + (142.9290546546535 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.05937364847211543 = (1804.9162006759268 - 1912.0806606964854) / 1804.9162006759268 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse() push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 xor eax,eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M00_L05 mov ebx,edi mov edi,[ebx+4] M00_L00: xor ecx,ecx mov [ebp-28],ecx mov [ebp-24],ecx lea ecx,[ebp-28] lea edx,[ebp-30] call dword ptr ds:[0B87DAF8]; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push edi push 0 push ebx push dword ptr [ebp-2C] push dword ptr [ebp-30] xor ecx,ecx xor edx,edx call dword ptr ds:[0B87D9A8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) mov edi,eax mov [ebp-34],edi cmp byte ptr [esi+0D],0 je near ptr M00_L04 mov esi,[esi+8] test esi,esi jne short M00_L01 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0ABCF558] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L06 jmp near ptr M00_L09 M00_L01: cmp esi,2 jne short M00_L02 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0ABCF570] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L07 jmp short M00_L09 M00_L02: cmp esi,1 jne short M00_L03 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0ABCF588]; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L08 jmp short M00_L09 M00_L03: cmp esi,3 jne short M00_L04 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0ABCF5A0] M00_L04: test edi,edi je short M00_L11 mov ecx,edi call dword ptr ds:[0B84EF78]; System.Text.Json.JsonDocument.Dispose() jmp short M00_L11 M00_L05: xor ebx,ebx xor edi,edi jmp near ptr M00_L00 M00_L06: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L07: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L08: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L09: mov ebx,[ebp-34] test ebx,ebx je short M00_L10 mov ecx,ebx call dword ptr ds:[0B84EF78]; System.Text.Json.JsonDocument.Dispose() M00_L10: pop eax jmp eax M00_L11: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 325 ``` ```assembly ; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push ebp mov ebp,esp push ebx movzx eax,byte ptr [ecx+5] movzx ebx,byte ptr [ecx+4] cmp ebx,2 jg short M01_L00 mov ecx,[ecx] test ecx,ecx jl short M01_L01 mov [edx],ecx mov [edx+4],bl mov [edx+5],al pop ebx pop ebp ret M01_L00: mov ecx,2C5E mov edx,0B84CA5C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B87F720] int 3 M01_L01: mov ecx,2C5E mov edx,0B84CA5C call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B87F6F0] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-50],edx mov ebx,ecx xor ecx,ecx xor edx,edx mov eax,[ebp+10] test eax,eax je short M02_L01 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M02_L06 lea ecx,[eax+8] mov edx,[eax+4] M02_L00: mov eax,[ebp+14] and eax,7FFFFFFF mov edi,[ebp+18] cmp eax,edx ja near ptr M02_L07 sub edx,eax cmp edx,edi jb near ptr M02_L07 add ecx,eax mov edx,edi M02_L01: mov edi,ecx mov eax,edx mov [ebp-4C],eax mov edx,[ebp+18] add edx,0C cmp edx,100000 jle short M02_L02 cmp edx,400000 jg short M02_L02 mov edx,100000 M02_L02: mov ecx,ds:[7142004] call dword ptr ds:[0B9506D0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-2C],eax xor ecx,ecx mov [ebp-28],ecx mov byte ptr [ebp-24],0 mov byte ptr [ebp-23],0 mov ecx,ds:[7142004] mov edx,200 call dword ptr ds:[0B9506D0]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-34],eax mov ecx,[ebp-34] mov ecx,[ecx+4] mov [ebp-30],ecx push dword ptr [ebp-4C] push edi push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp-2C] lea edx,[ebp-34] call dword ptr ds:[0B87D7C8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef) jmp short M02_L03 lea ecx,[ebp-2C] call dword ptr ds:[0B87D2E8]; System.Text.Json.JsonDocument+MetadataDb.Dispose() call CORINFO_HELP_RETHROW int 3 M02_L03: mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L05 push 0 mov ecx,ds:[7142004] call dword ptr ds:[0B9506D4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) jmp short M02_L05 mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L04 push 0 mov ecx,ds:[7142004] call dword ptr ds:[0B9506D4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) M02_L04: pop eax jmp eax M02_L05: mov ecx,offset MT_System.Text.Json.JsonDocument call CORINFO_HELP_NEWSFAST lea edi,[ebp-48] lea esi,[ebp-2C] movsd movsd movsd lea edi,[eax+10] lea esi,[ebp+10] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edi,[eax+1C] lea esi,[ebp-48] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[eax+8] mov esi,[ebp-50] call CORINFO_HELP_ASSIGN_REF_ESI mov byte ptr [eax+0C],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M02_L06: lea edx,[ebp-3C] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-3C] mov edx,[ebp-38] jmp near ptr M02_L00 M02_L07: call dword ptr ds:[8B09A08] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov ecx,8457B98 add ecx,8 mov esi,[ebp+8] test esi,esi je near ptr M03_L02 push 3 push ecx lea ecx,[ebp-20] push ecx mov ecx,esi mov edi,[ebp+0C] mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L03 mov ecx,[ebp-20] mov [ebp-14],ecx mov ecx,[ebp-1C] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L04 lea ecx,[ebp-24] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 mov ecx,8457BAC add ecx,8 push 5 push ecx lea ecx,[ebp-2C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L05 mov ecx,[ebp-2C] mov [ebp-14],ecx mov ecx,[ebp-28] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L06 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,8457BC4 add ecx,8 push 4 push ecx lea ecx,[ebp-34] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L07 mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L08 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,8457BDC add ecx,8 push 0C push ecx lea ecx,[ebp-3C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L09 mov ebx,[ebp-3C] mov eax,[ebp-38] mov [ebp-64],eax xor edx,edx mov [ebp-18],edx jmp short M03_L01 M03_L00: push dword ptr [ebp-64] mov [ebp-18],ecx push ecx lea edx,[ebp-14] mov ecx,ebx call dword ptr ds:[0B87D4B0]; System.Text.Json.JsonDocument.GetArrayIndexElement(Int32, Int32) cmp dword ptr [ebp-14],0 je near ptr M03_L10 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,[ebp-18] inc ecx mov [ebp-18],ecx mov eax,[ebp-64] M03_L01: test ebx,ebx je near ptr M03_L11 mov ecx,ebx mov edx,eax call dword ptr ds:[0B87D498]; System.Text.Json.JsonDocument.GetArrayLength(Int32) mov ecx,[ebp-18] cmp eax,ecx jg short M03_L00 mov ecx,8457C04 add ecx,8 push 7 push ecx lea ecx,[ebp-44] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L12 mov esi,[ebp-44] mov edi,[ebp-40] mov ecx,8457C20 add ecx,8 test esi,esi je near ptr M03_L13 push 6 push ecx lea ecx,[ebp-4C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L14 mov ecx,[ebp-4C] mov [ebp-14],ecx mov ecx,[ebp-48] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L15 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,8457C3C add ecx,8 push 4 push ecx lea ecx,[ebp-54] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L16 mov ecx,[ebp-54] mov [ebp-14],ecx mov ecx,[ebp-50] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L17 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D528]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,8457C54 add ecx,8 push 3 push ecx lea ecx,[ebp-5C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B87DA08]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L18 mov ecx,[ebp-5C] mov [ebp-14],ecx mov ecx,[ebp-58] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L19 lea ecx,[ebp-60] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B87D600]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M03_L02: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L03: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L05: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L06: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L07: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L08: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L09: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L10: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L11: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L12: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L13: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L14: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L15: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L16: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L17: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L18: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B96DAF8] mov ecx,esi call CORINFO_HELP_THROW M03_L19: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[8AD11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L20: call dword ptr ds:[0B87FBD0] int 3 ; Total bytes of code 1183 ``` ```assembly ; System.Text.Json.JsonDocument.Dispose() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[esi+18] test edi,edi je short M04_L00 cmp byte ptr [esi+0C],0 jne short M04_L01 M04_L00: pop ebx pop esi pop edi pop ebp ret M04_L01: lea ebx,[esi+1C] xor ecx,ecx mov edx,ecx xchg edx,[ebx] test edx,edx je short M04_L02 push 0 mov ecx,ds:[7142004] call dword ptr ds:[0B9506D4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) xor ecx,ecx mov [ebx+4],ecx M04_L02: xor ecx,ecx mov [esi+10],ecx mov [esi+14],ecx mov [esi+18],ecx cmp dword ptr [esi+4],0 je short M04_L03 add esi,4 xor ecx,ecx mov ebx,ecx xchg ebx,[esi] test ebx,ebx je short M04_L04 mov ecx,[ebx+4] cmp ecx,edi jb short M04_L05 lea ecx,[ebx+8] mov edx,edi call dword ptr ds:[840F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push 0 mov ecx,ds:[7142004] mov edx,ebx call dword ptr ds:[0B9506D4]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) pop ebx pop esi pop edi pop ebp ret M04_L03: cmp dword ptr [esi+8],0 je short M04_L04 lea ecx,[esi+8] xor eax,eax xchg eax,[ecx] test eax,eax je short M04_L04 mov ecx,eax call dword ptr ds:[0B950384]; System.Text.Json.PooledByteBufferWriter.Dispose() M04_L04: pop ebx pop esi pop edi pop ebp ret M04_L05: call dword ptr ds:[8B09A08] int 3 ; Total bytes of code 164 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.Parse() push ebp mov ebp,esp push edi push esi push ebx sub esp,28 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-34],xmm4 vmovdqu xmmword ptr [ebp-24],xmm4 xor eax,eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] test edi,edi je near ptr M00_L05 mov ebx,edi mov edi,[ebx+4] M00_L00: xor ecx,ecx mov [ebp-28],ecx mov [ebp-24],ecx lea ecx,[ebp-28] lea edx,[ebp-30] call dword ptr ds:[0B193D38]; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push edi push 0 push ebx push dword ptr [ebp-2C] push dword ptr [ebp-30] xor ecx,ecx xor edx,edx call dword ptr ds:[0B193BE8]; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) mov edi,eax mov [ebp-34],edi cmp byte ptr [esi+0D],0 je near ptr M00_L04 mov esi,[esi+8] test esi,esi jne short M00_L01 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A497558] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L06 jmp near ptr M00_L09 M00_L01: cmp esi,2 jne short M00_L02 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A497570] mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L07 jmp short M00_L09 M00_L02: cmp esi,1 jne short M00_L03 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A497588]; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) mov dword ptr [ebp-1C],0 mov dword ptr [ebp-18],0FC push offset M00_L08 jmp short M00_L09 M00_L03: cmp esi,3 jne short M00_L04 mov ebx,edi cmp [ebx],bl mov eax,edi push 0 push eax call dword ptr ds:[0A4975A0] M00_L04: test edi,edi je short M00_L11 mov ecx,edi call dword ptr ds:[0B15BA10]; System.Text.Json.JsonDocument.Dispose() jmp short M00_L11 M00_L05: xor ebx,ebx xor edi,edi jmp near ptr M00_L00 M00_L06: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L07: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L08: mov dword ptr [ebp-18],0 jmp short M00_L11 M00_L09: mov ebx,[ebp-34] test ebx,ebx je short M00_L10 mov ecx,ebx call dword ptr ds:[0B15BA10]; System.Text.Json.JsonDocument.Dispose() M00_L10: pop eax jmp eax M00_L11: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret ; Total bytes of code 325 ``` ```assembly ; System.Text.Json.JsonDocumentOptions.GetReaderOptions() push ebp mov ebp,esp push ebx movzx eax,byte ptr [ecx+5] movzx ebx,byte ptr [ecx+4] cmp ebx,2 jg short M01_L00 mov ecx,[ecx] test ecx,ecx jl short M01_L01 mov [edx],ecx mov [edx+4],bl mov [edx+5],al pop ebx pop ebp ret M01_L00: mov ecx,2C5E mov edx,0B1594F4 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B195720] int 3 M01_L01: mov ecx,2C5E mov edx,0B1594F4 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B1956F0] int 3 ; Total bytes of code 82 ``` ```assembly ; System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory`1, System.Text.Json.JsonReaderOptions, Byte[], System.Text.Json.PooledByteBufferWriter) push ebp mov ebp,esp push edi push esi push ebx sub esp,44 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-48],xmm4 vmovdqu xmmword ptr [ebp-38],xmm4 xor eax,eax mov [ebp-28],eax mov [ebp-24],eax mov [ebp-18],eax mov [ebp-50],edx mov ebx,ecx xor ecx,ecx xor edx,edx mov eax,[ebp+10] test eax,eax je short M02_L01 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M02_L06 lea ecx,[eax+8] mov edx,[eax+4] M02_L00: mov eax,[ebp+14] and eax,7FFFFFFF mov edi,[ebp+18] cmp eax,edx ja near ptr M02_L07 sub edx,eax cmp edx,edi jb near ptr M02_L07 add ecx,eax mov edx,edi M02_L01: mov edi,ecx mov eax,edx mov [ebp-4C],eax mov edx,[ebp+18] add edx,0C cmp edx,100000 jle short M02_L02 cmp edx,400000 jg short M02_L02 mov edx,100000 M02_L02: mov ecx,ds:[6B02004] call dword ptr ds:[0B15D168]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-2C],eax xor ecx,ecx mov [ebp-28],ecx mov byte ptr [ebp-24],0 mov byte ptr [ebp-23],0 mov ecx,ds:[6B02004] mov edx,200 call dword ptr ds:[0B15D168]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Rent(Int32) mov [ebp-34],eax mov ecx,[ebp-34] mov ecx,[ecx+4] mov [ebp-30],ecx push dword ptr [ebp-4C] push edi push dword ptr [ebp+0C] push dword ptr [ebp+8] lea ecx,[ebp-2C] lea edx,[ebp-34] call dword ptr ds:[0B193A08]; System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan`1, System.Text.Json.JsonReaderOptions, MetadataDb ByRef, StackRowStack ByRef) jmp short M02_L03 lea ecx,[ebp-2C] call dword ptr ds:[0B193528]; System.Text.Json.JsonDocument+MetadataDb.Dispose() call CORINFO_HELP_RETHROW int 3 M02_L03: mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L05 push 0 mov ecx,ds:[6B02004] call dword ptr ds:[0B15D16C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) jmp short M02_L05 mov edx,[ebp-34] xor ecx,ecx mov [ebp-34],ecx mov [ebp-30],ecx test edx,edx je short M02_L04 push 0 mov ecx,ds:[6B02004] call dword ptr ds:[0B15D16C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) M02_L04: pop eax jmp eax M02_L05: mov ecx,offset MT_System.Text.Json.JsonDocument call CORINFO_HELP_NEWSFAST lea edi,[ebp-48] lea esi,[ebp-2C] movsd movsd movsd lea edi,[eax+10] lea esi,[ebp+10] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edi,[eax+1C] lea esi,[ebp-48] call CORINFO_HELP_ASSIGN_BYREF movsd movsd lea edx,[eax+4] call CORINFO_HELP_ASSIGN_REF_EBX lea edx,[eax+8] mov esi,[ebp-50] call CORINFO_HELP_ASSIGN_REF_ESI mov byte ptr [eax+0C],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 14 M02_L06: lea edx,[ebp-3C] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-3C] mov edx,[ebp-38] jmp near ptr M02_L00 M02_L07: call dword ptr ds:[83F5060] int 3 ; Total bytes of code 405 ``` ```assembly ; System.Text.Json.Document.Tests.Perf_DocumentParse.ReadJsonBasic(System.Text.Json.JsonElement) push ebp mov ebp,esp push edi push esi push ebx sub esp,58 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-60],xmm4 vmovdqu xmmword ptr [ebp-50],xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 vmovdqu xmmword ptr [ebp-30],xmm4 vmovdqu xmmword ptr [ebp-20],xmm4 xor eax,eax mov [ebp-10],eax mov ecx,7D67B98 add ecx,8 mov esi,[ebp+8] test esi,esi je near ptr M03_L02 push 3 push ecx lea ecx,[ebp-20] push ecx mov ecx,esi mov edi,[ebp+0C] mov edx,edi cmp [ecx],ecx call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L03 mov ecx,[ebp-20] mov [ebp-14],ecx mov ecx,[ebp-1C] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L04 lea ecx,[ebp-24] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193840]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 mov ecx,7D67BAC add ecx,8 push 5 push ecx lea ecx,[ebp-2C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L05 mov ecx,[ebp-2C] mov [ebp-14],ecx mov ecx,[ebp-28] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L06 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193768]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7D67BC4 add ecx,8 push 4 push ecx lea ecx,[ebp-34] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L07 mov ecx,[ebp-34] mov [ebp-14],ecx mov ecx,[ebp-30] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L08 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193768]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7D67BDC add ecx,8 push 0C push ecx lea ecx,[ebp-3C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L09 mov ebx,[ebp-3C] mov eax,[ebp-38] mov [ebp-64],eax xor edx,edx mov [ebp-18],edx jmp short M03_L01 M03_L00: push dword ptr [ebp-64] mov [ebp-18],ecx push ecx lea edx,[ebp-14] mov ecx,ebx call dword ptr ds:[0B1936F0]; System.Text.Json.JsonDocument.GetArrayIndexElement(Int32, Int32) cmp dword ptr [ebp-14],0 je near ptr M03_L10 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193768]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,[ebp-18] inc ecx mov [ebp-18],ecx mov eax,[ebp-64] M03_L01: test ebx,ebx je near ptr M03_L11 mov ecx,ebx mov edx,eax call dword ptr ds:[0B1936D8]; System.Text.Json.JsonDocument.GetArrayLength(Int32) mov ecx,[ebp-18] cmp eax,ecx jg short M03_L00 mov ecx,7D67C04 add ecx,8 push 7 push ecx lea ecx,[ebp-44] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L12 mov esi,[ebp-44] mov edi,[ebp-40] mov ecx,7D67C20 add ecx,8 test esi,esi je near ptr M03_L13 push 6 push ecx lea ecx,[ebp-4C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L14 mov ecx,[ebp-4C] mov [ebp-14],ecx mov ecx,[ebp-48] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L15 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193768]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7D67C3C add ecx,8 push 4 push ecx lea ecx,[ebp-54] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L16 mov ecx,[ebp-54] mov [ebp-14],ecx mov ecx,[ebp-50] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L17 push 7 mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193768]; System.Text.Json.JsonDocument.GetString(Int32, System.Text.Json.JsonTokenType) mov ecx,7D67C54 add ecx,8 push 3 push ecx lea ecx,[ebp-5C] push ecx mov ecx,esi mov edx,edi call dword ptr ds:[0B193C48]; System.Text.Json.JsonDocument.TryGetNamedPropertyValue(Int32, System.ReadOnlySpan`1, System.Text.Json.JsonElement ByRef) test eax,eax je near ptr M03_L18 mov ecx,[ebp-5C] mov [ebp-14],ecx mov ecx,[ebp-58] mov [ebp-10],ecx cmp dword ptr [ebp-14],0 je near ptr M03_L19 lea ecx,[ebp-60] push ecx mov ecx,[ebp-14] mov edx,[ebp-10] cmp [ecx],ecx call dword ptr ds:[0B193840]; System.Text.Json.JsonDocument.TryGetValue(Int32, Int32 ByRef) test eax,eax je near ptr M03_L20 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M03_L02: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L03: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L04: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L05: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L06: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L07: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L08: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L09: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L10: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L11: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L12: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L13: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L14: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L15: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L16: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L17: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L18: mov ecx,offset MT_System.Collections.Generic.KeyNotFoundException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[0B433AF8] mov ecx,esi call CORINFO_HELP_THROW M03_L19: mov ecx,offset MT_System.InvalidOperationException call CORINFO_HELP_NEWSFAST mov esi,eax mov ecx,esi call dword ptr ds:[83E11B0] mov ecx,esi call CORINFO_HELP_THROW M03_L20: call dword ptr ds:[0B195BD0] int 3 ; Total bytes of code 1183 ``` ```assembly ; System.Text.Json.JsonDocument.Dispose() push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[esi+18] test edi,edi je short M04_L00 cmp byte ptr [esi+0C],0 jne short M04_L01 M04_L00: pop ebx pop esi pop edi pop ebp ret M04_L01: lea ebx,[esi+1C] xor ecx,ecx mov edx,ecx xchg edx,[ebx] test edx,edx je short M04_L02 push 0 mov ecx,ds:[6B02004] call dword ptr ds:[0B15D16C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) xor ecx,ecx mov [ebx+4],ecx M04_L02: xor ecx,ecx mov [esi+10],ecx mov [esi+14],ecx mov [esi+18],ecx cmp dword ptr [esi+4],0 je short M04_L03 add esi,4 xor ecx,ecx mov ebx,ecx xchg ebx,[esi] test ebx,ebx je short M04_L04 mov ecx,[ebx+4] cmp ecx,edi jb short M04_L05 lea ecx,[ebx+8] mov edx,edi call dword ptr ds:[4AAF3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push 0 mov ecx,ds:[6B02004] mov edx,ebx call dword ptr ds:[0B15D16C]; System.Buffers.TlsOverPerCoreLockedStacksArrayPool`1[[System.Byte, System.Private.CoreLib]].Return(Byte[], Boolean) pop ebx pop esi pop edi pop ebp ret M04_L03: cmp dword ptr [esi+8],0 je short M04_L04 lea ecx,[esi+8] xor eax,eax xchg eax,[ecx] test eax,eax je short M04_L04 mov ecx,eax call dword ptr ds:[0B15CE14]; System.Text.Json.PooledByteBufferWriter.Dispose() M04_L04: pop ebx pop esi pop edi pop ebp ret M04_L05: call dword ptr ds:[83F5060] int 3 ; Total bytes of code 164 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Tests.Perf_String

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[ToUpperInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToUpperInvariant(s%3a%20%22TEST%22).html>) 4.64 ns 7.59 ns 1.64 0.05 False 82.85181495531978 107.28402350440014 1.2948904446119391
[ToLower - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToLower(s%3a%20%22TeSt%22).html>) 33.91 ns 39.40 ns 1.16 0.49 False 311.52647975077883 414.66683362513953 1.3310805359366977
[ToUpper - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToUpper(s%3a%20%22TeSt%22).html>) 31.51 ns 37.49 ns 1.19 0.52 False 312.38027139967744 377.2965879265092 1.2078118321492013
[ToLowerInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToLowerInvariant(s%3a%20%22TEST%22).html>) 22.65 ns 29.58 ns 1.31 0.11 False 251.38272349839815 311.36535559111064 1.2386107973450082
[ToLowerInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToLowerInvariant(s%3a%20%22TeSt%22).html>) 23.84 ns 29.27 ns 1.23 0.12 False 250.08117122701375 315.28137174055223 1.2607161514544905
[ToUpperInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToUpperInvariant(s%3a%20%22TeSt%22).html>) 22.16 ns 29.91 ns 1.35 0.09 False 250.00871793977646 311.71547546280124 1.2468184230995059
[ToUpperInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToUpperInvariant(s%3a%20%22test%22).html>) 22.19 ns 30.34 ns 1.37 0.11 False 250.4436206396132 310.64618895308314 1.2403837165415408 Trace Trace
[Join_Enumerable - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.Join_Enumerable.html>) 315.83 ns 353.68 ns 1.12 0.02 False 3007.3375262054506 3370.5663335292966 1.120780858203886 Trace Trace
[ToLowerInvariant - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToLowerInvariant(s%3a%20%22test%22).html>) 4.67 ns 7.60 ns 1.63 0.05 False 82.43492515079154 108.37906149331248 1.3147226287288236 Trace Trace
[ToUpper - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Tests.Perf_String.ToUpper(s%3a%20%22test%22).html>) 29.20 ns 37.64 ns 1.29 0.50 False 312.5434136700964 377.34997565536713 1.207352192209934 Trace Trace

graph graph graph graph graph graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Tests.Perf_String*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Tests.Perf_String.ToUpperInvariant(s: "TEST") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.58724421503411 > 4.870023611532993. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -100.44612628413188 (T) = (0 -7.682439497090718) / Math.Sqrt((4.6698916949718675E-05 / (32)) + (0.01647173003140187 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.6551750445565367 = (4.641466485587957 - 7.682439497090718) / 4.641466485587957 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[71F138C] cmp [ecx],ecx call dword ptr ds:[8D1BA80]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0B5DD3F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,2BF4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8BB5BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[78E138C] cmp [ecx],ecx call dword ptr ds:[90AF2A0]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0BAD53F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,2FF4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[9035BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToLower(s: "TeSt") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 39.40055540639538 > 35.02294150273232. IsChangePoint: Marked as a change because one of 11/22/2022 2:20:42 AM, 12/21/2022 3:18:57 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -11.7881881136155 (T) = (0 -37.13678313257224) / Math.Sqrt((3.2019668769984273 / (31)) + (2.7190110696043934 / (19))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (31) + (19) - 2, .025) and -0.18703471875110433 = (31.285338622314573 - 37.13678313257224) / 31.285338622314573 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToLower(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[86E7180]; System.Globalization.CultureInfo.get_CurrentCulture() cmp dword ptr [eax],86D9EDC jne short M00_L01 mov ecx,eax call dword ptr ds:[86D9F60]; System.Globalization.CultureInfo.get_TextInfo() M00_L00: mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[875B948]; System.Globalization.TextInfo.ToLower(System.String) pop ebx pop esi pop ebp ret M00_L01: mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,2CB4D58 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[6E612A4] test eax,eax jne short M01_L00 mov eax,ds:[6E61294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[86E7030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.CultureInfo.get_TextInfo() push edi push esi mov esi,ecx cmp dword ptr [esi+8],0 je short M02_L01 M02_L00: mov eax,[esi+8] pop esi pop edi ret M02_L01: mov ecx,offset MT_System.Globalization.TextInfo call CORINFO_HELP_NEWSFAST mov edi,eax mov edx,[esi+18] mov ecx,edi call dword ptr ds:[875B798] movzx edx,byte ptr [esi+30] mov [edi+18],dl lea edx,[esi+8] call CORINFO_HELP_ASSIGN_REF_EDI jmp short M02_L00 ; Total bytes of code 56 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M03_L00 call dword ptr ds:[0B1B13C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M03_L00: mov ecx,15ED mov edx,27C4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[86F5BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToLower(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[8567180]; System.Globalization.CultureInfo.get_CurrentCulture() cmp dword ptr [eax],8559EEC jne short M00_L01 mov ecx,eax call dword ptr ds:[8559F70]; System.Globalization.CultureInfo.get_TextInfo() M00_L00: mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[85EF1B0]; System.Globalization.TextInfo.ToLower(System.String) pop ebx pop esi pop ebp ret M00_L01: mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] jmp short M00_L00 ; Total bytes of code 61 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,2B74D68 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[6D912A4] test eax,eax jne short M01_L00 mov eax,ds:[6D91294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[8567030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.CultureInfo.get_TextInfo() push edi push esi mov esi,ecx cmp dword ptr [esi+8],0 je short M02_L01 M02_L00: mov eax,[esi+8] pop esi pop edi ret M02_L01: mov ecx,offset MT_System.Globalization.TextInfo call CORINFO_HELP_NEWSFAST mov edi,eax mov edx,[esi+18] mov ecx,edi call dword ptr ds:[85EF000] movzx edx,byte ptr [esi+30] mov [edi+18],dl lea edx,[esi+8] call CORINFO_HELP_ASSIGN_REF_EDI jmp short M02_L00 ; Total bytes of code 56 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M03_L00 call dword ptr ds:[0B047BE8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M03_L00: mov ecx,15ED mov edx,0A64000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8575BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToUpper(s: "TeSt") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 37.49477120450273 > 32.299574445068046. IsChangePoint: Marked as a change because one of 11/16/2022 9:45:14 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -17.060304639417616 (T) = (0 -38.285041098615956) / Math.Sqrt((2.4357993223026906 / (32)) + (2.045274652673447 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.24086072271549572 = (30.85361668538681 - 38.285041098615956) / 30.85361668538681 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpper(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[8D87180]; System.Globalization.CultureInfo.get_CurrentCulture() mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[8DFBA80]; System.Globalization.TextInfo.ToUpper(System.String) pop ebx pop esi pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,3314D58 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[75212A4] test eax,eax jne short M01_L00 mov eax,ds:[7521294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[8D87030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M02_L00 call dword ptr ds:[0B7BD3F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M02_L00: mov ecx,15ED mov edx,2DE4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8D95BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpper(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[8D27180]; System.Globalization.CultureInfo.get_CurrentCulture() mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[8DAF2A0]; System.Globalization.TextInfo.ToUpper(System.String) pop ebx pop esi pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,5234D68 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[74812A4] test eax,eax jne short M01_L00 mov eax,ds:[7481294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[8D27030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M02_L00 call dword ptr ds:[0B8453F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M02_L00: mov ecx,15ED mov edx,5104000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8D35BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToLowerInvariant(s: "TEST") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 29.576725156132174 > 23.451879612878397. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -18.81477395248515 (T) = (0 -29.81358102966744) / Math.Sqrt((2.16667480690163 / (32)) + (1.3953774967747203 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.3166530935089412 = (22.643459523732915 - 29.81358102966744) / 22.643459523732915 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[779138C] cmp [ecx],ecx call dword ptr ds:[922B948]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0BB81228]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,5494000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[90C5BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[6AD138C] cmp [ecx],ecx call dword ptr ds:[824F1B0]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0ACA7A50]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,26E4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[81D5BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToLowerInvariant(s: "TeSt") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 29.27448483001707 > 23.694245993264854. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -24.301717130931813 (T) = (0 -29.78120453980873) / Math.Sqrt((0.4219033012534076 / (32)) + (1.322241535397483 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.3161231682908538 = (22.627976816549207 - 29.78120453980873) / 22.627976816549207 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[6A4138C] cmp [ecx],ecx call dword ptr ds:[82CB948]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0AD213C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,584000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8265BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[6D9138C] cmp [ecx],ecx call dword ptr ds:[869F1B0]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0B0F7BE8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,2A74000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8625BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToUpperInvariant(s: "TeSt") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 29.913170647376788 > 23.49121630112709. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -31.306241542762457 (T) = (0 -30.172101949221616) / Math.Sqrt((0.14217497249304373 / (32)) + (1.04538557711098 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.3503269980875755 = (22.344292894945735 - 30.172101949221616) / 22.344292894945735 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[730138C] cmp [ecx],ecx call dword ptr ds:[8BBBA80]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0B57D3F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,0B34000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8B55BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[698138C] cmp [ecx],ecx call dword ptr ds:[821F2A0]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0AC453F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,604000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[81A5BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToUpperInvariant(s: "test") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 30.33704160864244 > 23.55651851954346. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -34.20732771402786 (T) = (0 -29.82845588208816) / Math.Sqrt((0.25863585868262934 / (32)) + (0.6950360924717578 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.329458397511459 = (22.436547046468267 - 29.82845588208816) / 22.436547046468267 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[6C8138C] cmp [ecx],ecx call dword ptr ds:[85CBA80]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0AF8D3F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,984000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8565BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpperInvariant(System.String) cmp [edx],dl mov ecx,ds:[6C3138C] cmp [ecx],ecx call dword ptr ds:[865F2A0]; System.Globalization.TextInfo.ToUpper(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0B0853F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,31D4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[85E5BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.Join_Enumerable ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 353.68415047075183 > 331.91222682028433. IsChangePoint: Marked as a change because one of 11/24/2022 8:21:24 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -34.25498811745787 (T) = (0 -355.8145879448896) / Math.Sqrt((27.884559695525898 / (32)) + (8.03890478861572 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.12425771889071742 = (316.4884545297716 - 355.8145879448896) / 316.4884545297716 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.Join_Enumerable() mov edx,ds:[70344EC] mov ecx,828594C call dword ptr ds:[82332D0]; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 18 ``` ```assembly ; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,38 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 xor eax,eax mov [ebp-30],eax mov [ebp-2C],eax mov [ebp-28],eax mov [ebp-1C],eax mov [ebp-10],esp mov dword ptr [ebp-44],0F2C761BC mov esi,ecx mov edi,edx mov edx,edi mov ecx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]] call dword ptr ds:[824B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne near ptr M01_L31 mov eax,edi test eax,eax je short M01_L00 cmp dword ptr [eax],884E798 je near ptr M01_L38 mov ecx,edi call dword ptr ds:[33902C8] mov ecx,eax mov [ebp-3C],ecx jmp short M01_L03 M01_L00: mov ecx,6 call dword ptr ds:[8929D20] int 3 M01_L01: mov eax,[ebp-40] cmp dword ptr [ebp-44],0F2C761BC je short M01_L02 call CORINFO_HELP_FAIL_FAST M01_L02: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L03: call dword ptr ds:[33902CC] test eax,eax je near ptr M01_L28 mov ecx,[ebp-3C] call dword ptr ds:[33902D0] mov ebx,eax mov ecx,[ebp-3C] call dword ptr ds:[33902D4] test eax,eax je near ptr M01_L24 test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-10],esp xor ecx,ecx mov [ebp-34],ecx mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov [ebp-30],ecx test ebx,ebx je short M01_L06 mov edx,[ebp-30] cmp dword ptr [ebx+4],1 je near ptr M01_L21 M01_L04: mov edi,[ebp-30] mov edx,[ebp-28] sub edx,[ebx+4] cmp edi,edx jg near ptr M01_L19 M01_L05: cmp edi,[ebp-28] ja near ptr M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+edi*2] mov edx,[ebp-28] sub edx,edi cmp [ebx+4],edx ja near ptr M01_L18 lea edx,[ebx+8] mov eax,[ebx+4] add eax,eax push eax call dword ptr ds:[88616A8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov edx,[ebp-30] add edx,[ebx+4] mov [ebp-30],edx M01_L06: test esi,esi je short M01_L09 mov edx,[ebp-30] mov ebx,[esi+4] cmp ebx,1 je short M01_L13 M01_L07: mov edi,[ebp-30] mov edx,[ebp-28] sub edx,ebx cmp edx,edi jl short M01_L10 M01_L08: cmp edi,[ebp-28] ja near ptr M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+edi*2] mov edx,[ebp-28] sub edx,edi cmp ebx,edx ja near ptr M01_L18 lea edx,[esi+8] mov eax,ebx add eax,eax push eax call dword ptr ds:[88616A8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov ecx,ebx add ecx,[ebp-30] mov [ebp-30],ecx M01_L09: mov ecx,[ebp-3C] cmp dword ptr [ecx],0AF02700 jne short M01_L11 mov edi,[ecx+8] jmp short M01_L12 M01_L10: mov edx,ebx lea ecx,[ebp-34] call dword ptr ds:[0B293E40] jmp short M01_L08 M01_L11: call dword ptr ds:[33902D8] mov edi,eax M01_L12: test edi,edi je short M01_L16 mov ebx,[ebp-30] mov eax,[edi+4] mov [ebp-38],eax cmp eax,1 jne short M01_L20 jmp near ptr M01_L29 M01_L13: cmp edx,[ebp-28] jae short M01_L07 lea ecx,[ebp-2C] cmp edx,[ecx+4] jae short M01_L14 mov ecx,[ecx] movzx eax,word ptr [esi+8] mov [ecx+edx*2],ax inc edx mov [ebp-30],edx jmp short M01_L09 M01_L14: call CORINFO_HELP_RNGCHKFAIL M01_L15: mov ebx,[ebp-38] add ebx,[ebp-30] mov [ebp-30],ebx M01_L16: mov ecx,[ebp-3C] call dword ptr ds:[33902DC] test eax,eax jne near ptr M01_L06 jmp near ptr M01_L27 M01_L17: call dword ptr ds:[8929A08] int 3 M01_L18: call dword ptr ds:[8929A20] int 3 M01_L19: mov edx,[ebx+4] lea ecx,[ebp-34] call dword ptr ds:[0B293E40] jmp near ptr M01_L05 M01_L20: mov ebx,[ebp-30] mov ecx,[ebp-28] sub ecx,eax cmp ecx,ebx jge short M01_L23 jmp short M01_L22 M01_L21: cmp edx,[ebp-28] jae near ptr M01_L04 lea ecx,[ebp-2C] cmp edx,[ecx+4] jae short M01_L14 mov ecx,[ecx] movzx eax,word ptr [ebx+8] mov [ecx+edx*2],ax inc edx mov [ebp-30],edx jmp near ptr M01_L06 M01_L22: mov edx,eax lea ecx,[ebp-34] call dword ptr ds:[0B293E40] mov eax,[ebp-38] M01_L23: cmp ebx,[ebp-28] ja short M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+ebx*2] mov edx,[ebp-28] sub edx,ebx cmp eax,edx ja short M01_L18 lea edx,[edi+8] mov edi,eax add edi,edi push edi call dword ptr ds:[88616A8]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) jmp near ptr M01_L15 M01_L24: test ebx,ebx je short M01_L26 M01_L25: mov [ebp-40],ebx mov dword ptr [ebp-20],0 mov dword ptr [ebp-1C],0FC push offset M01_L36 jmp near ptr M01_L43 M01_L26: mov ebx,8280004 jmp short M01_L25 M01_L27: lea ecx,[ebp-34] call dword ptr ds:[0B293CC0]; System.Text.ValueStringBuilder.ToString() mov [ebp-40],eax jmp short M01_L30 M01_L28: mov dword ptr [ebp-40],8280004 mov dword ptr [ebp-20],0 mov dword ptr [ebp-1C],0FC push offset M01_L37 jmp near ptr M01_L43 M01_L29: cmp ebx,[ebp-28] jae near ptr M01_L20 lea ecx,[ebp-2C] cmp ebx,[ecx+4] jae near ptr M01_L14 mov ecx,[ecx] movzx eax,word ptr [edi+8] mov [ecx+ebx*2],ax inc ebx mov [ebp-30],ebx jmp near ptr M01_L16 M01_L30: mov ecx,[ebp-3C] call dword ptr ds:[33902E0] jmp near ptr M01_L01 M01_L31: test esi,esi je short M01_L35 lea edx,[esi+8] mov ebx,[esi+4] mov ecx,ebx M01_L32: mov edi,[eax+4] mov ebx,[eax+8] test edi,edi je near ptr M01_L45 cmp dword ptr [edi],884E798 jne near ptr M01_L46 mov eax,[edi+4] cmp [edi+4],ebx jb near ptr M01_L47 add edi,8 M01_L33: push ecx push edx push ebx push edi call dword ptr ds:[8233378] cmp dword ptr [ebp-44],0F2C761BC je short M01_L34 call CORINFO_HELP_FAIL_FAST M01_L34: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L35: xor edx,edx xor ecx,ecx jmp short M01_L32 M01_L36: mov dword ptr [ebp-1C],0 jmp near ptr M01_L01 M01_L37: mov dword ptr [ebp-1C],0 jmp near ptr M01_L01 M01_L38: test esi,esi je short M01_L42 lea edx,[esi+8] mov ebx,[esi+4] mov ecx,ebx M01_L39: test eax,eax je short M01_L48 lea edi,[eax+8] mov eax,[eax+4] M01_L40: push ecx push edx push eax push edi call dword ptr ds:[8233378] cmp dword ptr [ebp-44],0F2C761BC je short M01_L41 call CORINFO_HELP_FAIL_FAST M01_L41: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L42: xor edx,edx xor ecx,ecx jmp short M01_L39 M01_L43: mov ecx,[ebp-3C] test ecx,ecx je short M01_L44 call dword ptr ds:[33902E0] mov ecx,[ebp-3C] M01_L44: pop eax jmp eax M01_L45: test ebx,ebx jne short M01_L47 xor edi,edi xor ebx,ebx jmp near ptr M01_L33 M01_L46: call dword ptr ds:[89299C0] int 3 M01_L47: call dword ptr ds:[8929A08] int 3 M01_L48: xor edi,edi xor eax,eax jmp short M01_L40 ; Total bytes of code 999 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.Join_Enumerable() mov edx,ds:[68544EC] mov ecx,7BA594C call dword ptr ds:[7B532B8]; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) ret ; Total bytes of code 18 ``` ```assembly ; System.String.Join(System.String, System.Collections.Generic.IEnumerable`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,38 vxorps xmm4,xmm4,xmm4 vmovdqu xmmword ptr [ebp-40],xmm4 xor eax,eax mov [ebp-30],eax mov [ebp-2C],eax mov [ebp-28],eax mov [ebp-1C],eax mov [ebp-10],esp mov dword ptr [ebp-44],210318A2 mov esi,ecx mov edi,edx mov edx,edi mov ecx,offset MT_System.Collections.Generic.List`1[[System.String, System.Private.CoreLib]] call dword ptr ds:[7B6B828]; System.Runtime.CompilerServices.CastHelpers.IsInstanceOfClass(Void*, System.Object) test eax,eax jne near ptr M01_L31 mov eax,edi test eax,eax je short M01_L00 cmp dword ptr [eax],816E7A8 je near ptr M01_L38 mov ecx,edi call dword ptr ds:[29D02C8] mov ecx,eax mov [ebp-3C],ecx jmp short M01_L03 M01_L00: mov ecx,6 call dword ptr ds:[8225378] int 3 M01_L01: mov eax,[ebp-40] cmp dword ptr [ebp-44],210318A2 je short M01_L02 call CORINFO_HELP_FAIL_FAST M01_L02: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L03: call dword ptr ds:[29D02CC] test eax,eax je near ptr M01_L28 mov ecx,[ebp-3C] call dword ptr ds:[29D02D0] mov ebx,eax mov ecx,[ebp-3C] call dword ptr ds:[29D02D4] test eax,eax je near ptr M01_L24 test [esp],esp sub esp,200 lea edx,[esp] mov [ebp-10],esp xor ecx,ecx mov [ebp-34],ecx mov [ebp-2C],edx mov dword ptr [ebp-28],100 mov [ebp-30],ecx test ebx,ebx je short M01_L06 mov edx,[ebp-30] cmp dword ptr [ebx+4],1 je near ptr M01_L21 M01_L04: mov edi,[ebp-30] mov edx,[ebp-28] sub edx,[ebx+4] cmp edi,edx jg near ptr M01_L19 M01_L05: cmp edi,[ebp-28] ja near ptr M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+edi*2] mov edx,[ebp-28] sub edx,edi cmp [ebx+4],edx ja near ptr M01_L18 lea edx,[ebx+8] mov eax,[ebx+4] add eax,eax push eax call dword ptr ds:[8181690]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov edx,[ebp-30] add edx,[ebx+4] mov [ebp-30],edx M01_L06: test esi,esi je short M01_L09 mov edx,[ebp-30] mov ebx,[esi+4] cmp ebx,1 je short M01_L13 M01_L07: mov edi,[ebp-30] mov edx,[ebp-28] sub edx,ebx cmp edx,edi jl short M01_L10 M01_L08: cmp edi,[ebp-28] ja near ptr M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+edi*2] mov edx,[ebp-28] sub edx,edi cmp ebx,edx ja near ptr M01_L18 lea edx,[esi+8] mov eax,ebx add eax,eax push eax call dword ptr ds:[8181690]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) mov ecx,ebx add ecx,[ebp-30] mov [ebp-30],ecx M01_L09: mov ecx,[ebp-3C] cmp dword ptr [ecx],0ABB5C40 jne short M01_L11 mov edi,[ecx+8] jmp short M01_L12 M01_L10: mov edx,ebx lea ecx,[ebp-34] call dword ptr ds:[0ABCBE40] jmp short M01_L08 M01_L11: call dword ptr ds:[29D02D8] mov edi,eax M01_L12: test edi,edi je short M01_L16 mov ebx,[ebp-30] mov eax,[edi+4] mov [ebp-38],eax cmp eax,1 jne short M01_L20 jmp near ptr M01_L29 M01_L13: cmp edx,[ebp-28] jae short M01_L07 lea ecx,[ebp-2C] cmp edx,[ecx+4] jae short M01_L14 mov ecx,[ecx] movzx eax,word ptr [esi+8] mov [ecx+edx*2],ax inc edx mov [ebp-30],edx jmp short M01_L09 M01_L14: call CORINFO_HELP_RNGCHKFAIL M01_L15: mov ebx,[ebp-38] add ebx,[ebp-30] mov [ebp-30],ebx M01_L16: mov ecx,[ebp-3C] call dword ptr ds:[29D02DC] test eax,eax jne near ptr M01_L06 jmp near ptr M01_L27 M01_L17: call dword ptr ds:[8225060] int 3 M01_L18: call dword ptr ds:[8225078] int 3 M01_L19: mov edx,[ebx+4] lea ecx,[ebp-34] call dword ptr ds:[0ABCBE40] jmp near ptr M01_L05 M01_L20: mov ebx,[ebp-30] mov ecx,[ebp-28] sub ecx,eax cmp ecx,ebx jge short M01_L23 jmp short M01_L22 M01_L21: cmp edx,[ebp-28] jae near ptr M01_L04 lea ecx,[ebp-2C] cmp edx,[ecx+4] jae short M01_L14 mov ecx,[ecx] movzx eax,word ptr [ebx+8] mov [ecx+edx*2],ax inc edx mov [ebp-30],edx jmp near ptr M01_L06 M01_L22: mov edx,eax lea ecx,[ebp-34] call dword ptr ds:[0ABCBE40] mov eax,[ebp-38] M01_L23: cmp ebx,[ebp-28] ja short M01_L17 mov ecx,[ebp-2C] lea ecx,[ecx+ebx*2] mov edx,[ebp-28] sub edx,ebx cmp eax,edx ja short M01_L18 lea edx,[edi+8] mov edi,eax add edi,edi push edi call dword ptr ds:[8181690]; System.Buffer.Memmove(Byte ByRef, Byte ByRef, UIntPtr) jmp near ptr M01_L15 M01_L24: test ebx,ebx je short M01_L26 M01_L25: mov [ebp-40],ebx mov dword ptr [ebp-20],0 mov dword ptr [ebp-1C],0FC push offset M01_L36 jmp near ptr M01_L43 M01_L26: mov ebx,7BA0004 jmp short M01_L25 M01_L27: lea ecx,[ebp-34] call dword ptr ds:[0ABCBCC0]; System.Text.ValueStringBuilder.ToString() mov [ebp-40],eax jmp short M01_L30 M01_L28: mov dword ptr [ebp-40],7BA0004 mov dword ptr [ebp-20],0 mov dword ptr [ebp-1C],0FC push offset M01_L37 jmp near ptr M01_L43 M01_L29: cmp ebx,[ebp-28] jae near ptr M01_L20 lea ecx,[ebp-2C] cmp ebx,[ecx+4] jae near ptr M01_L14 mov ecx,[ecx] movzx eax,word ptr [edi+8] mov [ecx+ebx*2],ax inc ebx mov [ebp-30],ebx jmp near ptr M01_L16 M01_L30: mov ecx,[ebp-3C] call dword ptr ds:[29D02E0] jmp near ptr M01_L01 M01_L31: test esi,esi je short M01_L35 lea edx,[esi+8] mov ebx,[esi+4] mov ecx,ebx M01_L32: mov edi,[eax+4] mov ebx,[eax+8] test edi,edi je near ptr M01_L45 cmp dword ptr [edi],816E7A8 jne near ptr M01_L46 mov eax,[edi+4] cmp [edi+4],ebx jb near ptr M01_L47 add edi,8 M01_L33: push ecx push edx push ebx push edi call dword ptr ds:[7B53360] cmp dword ptr [ebp-44],210318A2 je short M01_L34 call CORINFO_HELP_FAIL_FAST M01_L34: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L35: xor edx,edx xor ecx,ecx jmp short M01_L32 M01_L36: mov dword ptr [ebp-1C],0 jmp near ptr M01_L01 M01_L37: mov dword ptr [ebp-1C],0 jmp near ptr M01_L01 M01_L38: test esi,esi je short M01_L42 lea edx,[esi+8] mov ebx,[esi+4] mov ecx,ebx M01_L39: test eax,eax je short M01_L48 lea edi,[eax+8] mov eax,[eax+4] M01_L40: push ecx push edx push eax push edi call dword ptr ds:[7B53360] cmp dword ptr [ebp-44],210318A2 je short M01_L41 call CORINFO_HELP_FAIL_FAST M01_L41: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M01_L42: xor edx,edx xor ecx,ecx jmp short M01_L39 M01_L43: mov ecx,[ebp-3C] test ecx,ecx je short M01_L44 call dword ptr ds:[29D02E0] mov ecx,[ebp-3C] M01_L44: pop eax jmp eax M01_L45: test ebx,ebx jne short M01_L47 xor edi,edi xor ebx,ebx jmp near ptr M01_L33 M01_L46: call dword ptr ds:[8225018] int 3 M01_L47: call dword ptr ds:[8225060] int 3 M01_L48: xor edi,edi xor eax,eax jmp short M01_L40 ; Total bytes of code 999 ``` #### System.Tests.Perf_String.ToLowerInvariant(s: "test") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 7.604433985144665 > 4.901586387744037. IsChangePoint: Marked as a change because one of 11/7/2022 4:10:19 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -220.97456414007115 (T) = (0 -7.550513990645803) / Math.Sqrt((6.649147585349328E-05 / (32)) + (0.003018292188272774 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.6163326339676405 = (4.671386218387129 - 7.550513990645803) / 4.671386218387129 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[704138C] cmp [ecx],ecx call dword ptr ds:[89BB948]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0B4113C0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,4D24000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8955BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToLowerInvariant(System.String) cmp [edx],dl mov ecx,ds:[77B138C] cmp [ecx],ecx call dword ptr ds:[915F1B0]; System.Globalization.TextInfo.ToLower(System.String) ret ; Total bytes of code 17 ``` ```assembly ; System.Globalization.TextInfo.ToLower(System.String) push ebp mov ebp,esp test edx,edx je short M01_L00 call dword ptr ds:[0BBB7BE8]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToLowerConversion, System.Private.CoreLib]](System.String) pop ebp ret M01_L00: mov ecx,15ED mov edx,3564000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[90E5BA0] int 3 ; Total bytes of code 39 ``` #### System.Tests.Perf_String.ToUpper(s: "test") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 37.6420357671402 > 32.87994846820253. IsChangePoint: Marked as a change because one of 11/14/2022 7:25:10 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -14.590179622144607 (T) = (0 -38.28652209110384) / Math.Sqrt((5.130245605181873 / (32)) + (1.490332367839386 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.23137222217839523 = (31.092566001994054 - 38.28652209110384) / 31.092566001994054 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpper(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[89B7180]; System.Globalization.CultureInfo.get_CurrentCulture() mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[8A2BA80]; System.Globalization.TextInfo.ToUpper(System.String) pop ebx pop esi pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,2F64D58 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[70D12A4] test eax,eax jne short M01_L00 mov eax,ds:[70D1294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[89B7030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M02_L00 call dword ptr ds:[0B3ED3F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M02_L00: mov ecx,15ED mov edx,2EE4000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[89C5BA0] int 3 ; Total bytes of code 39 ``` ### Compare Jit Disasm ```assembly ; System.Tests.Perf_String.ToUpper(System.String) push ebp mov ebp,esp push esi push ebx mov esi,edx mov ebx,esi cmp [ebx],bl call dword ptr ds:[8E07180]; System.Globalization.CultureInfo.get_CurrentCulture() mov ecx,eax mov eax,[eax] mov eax,[eax+2C] call dword ptr [eax+1C] mov ecx,eax mov edx,esi cmp [ecx],ecx call dword ptr ds:[8E8F2A0]; System.Globalization.TextInfo.ToUpper(System.String) pop ebx pop esi pop ebp ret ; Total bytes of code 43 ``` ```assembly ; System.Globalization.CultureInfo.get_CurrentCulture() push ebp mov ebp,esp mov ecx,5284D68 mov edx,24E call CORINFO_HELP_GETSHARED_GCTHREADSTATIC_BASE mov eax,[eax+4] test eax,eax jne short M01_L00 mov eax,ds:[75A12A4] test eax,eax jne short M01_L00 mov eax,ds:[75A1294] test eax,eax je short M01_L01 M01_L00: pop ebp ret M01_L01: call dword ptr ds:[8E07030] jmp short M01_L00 ; Total bytes of code 53 ``` ```assembly ; System.Globalization.TextInfo.ToUpper(System.String) push ebp mov ebp,esp test edx,edx je short M02_L00 call dword ptr ds:[0B9253F0]; System.Globalization.TextInfo.ChangeCaseCommon[[System.Globalization.TextInfo+ToUpperConversion, System.Private.CoreLib]](System.String) pop ebp ret M02_L00: mov ecx,15ED mov edx,3324000 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8E15BA0] int 3 ; Total bytes of code 39 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Tests.Perf_Basic

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[WriteBasicUtf16 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16(Formatted%3a%20False%2c%20SkipValidation%3a%20True%2c%20DataSize%3a%2010).html>) 956.43 ns 1.05 μs 1.10 0.02 False 8813.414062009375 9384.509506397022 1.0647984356992122 Trace Trace
[WriteBasicUtf16 - Duration of single invocation](<https://pvscmdupload.blob.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16(Formatted%3a%20False%2c%20SkipValidation%3a%20False%2c%20DataSize%3a%2010).html>) 972.75 ns 1.04 μs 1.07 0.02 False 9285.472427307648 9841.976250520976 1.0599327419870104 Trace Trace

graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Tests.Perf_Basic*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16(Formatted: False, SkipValidation: True, DataSize: 10) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.049862521706213 > 963.3128340254972. IsChangePoint: Marked as a change because one of 10/25/2022 8:17:52 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -28.743212967582878 (T) = (0 -1018.171451771557) / Math.Sqrt((132.93318888478586 / (32)) + (112.91150209109043 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.10030120717949455 = (925.3570250836419 - 1018.171451771557) / 925.3570250836419 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16() push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] mov ecx,[edi+4] mov edx,[edi+8] test ecx,ecx je near ptr M00_L39 mov eax,[ecx+4] cmp [ecx+4],edx jb near ptr M00_L40 add ecx,8 M00_L00: call dword ptr ds:[7E2F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) xor ecx,ecx mov [edi+8],ecx mov edi,[esi+4] movzx ecx,byte ptr [esi+34] test ecx,ecx je short M00_L01 mov ebx,1 jmp short M00_L02 M00_L01: xor ebx,ebx M00_L02: movzx ecx,byte ptr [esi+35] test ecx,ecx je short M00_L03 or ebx,2 jmp short M00_L04 M00_L03: and ebx,0FFFFFFFD M00_L04: mov ecx,offset MT_System.Text.Json.Utf8JsonWriter call CORINFO_HELP_NEWSFAST mov ecx,eax mov eax,ebx test edi,edi je near ptr M00_L41 lea edx,[ecx+0C] call CORINFO_HELP_ASSIGN_REF_EDI lea edx,[ecx+40] xor edi,edi mov [edx],edi mov [edx+4],edi mov [edx+8],eax cmp dword ptr [ecx+44],0 jne short M00_L05 mov dword ptr [ecx+44],3E8 M00_L05: mov [ebp-28],ecx mov edx,7B call dword ptr ds:[0B0316A8]; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],1 mov edi,7E76FD0 add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L06 push 3 push edi push 0 push 2A mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B035120] jmp short M00_L08 M00_L06: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L07 cmp byte ptr [ecx+20],0 je near ptr M00_L15 cmp byte ptr [ecx+21],5 je near ptr M00_L15 M00_L07: test al,1 je short M00_L09 push 3 push edi push 0 push 2A call dword ptr ds:[0B0351B0] M00_L08: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],8 jmp short M00_L10 M00_L09: push 3 push edi push 0 push 2A call dword ptr ds:[0B035180]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) jmp short M00_L08 M00_L10: mov edi,7E76FA0 add edi,8 mov ebx,7E775A4 add ebx,8 push 4 push ebx mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov [ebp-24],eax push 5 push edi mov ecx,[ebp-28] mov edx,[ecx+40] mov ecx,edx call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov ecx,[ebp-24] lea edx,[ecx+eax] cmp edx,0FFFFFFFE je near ptr M00_L17 push 5 push edi push 4 push ebx push ecx mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B035648] M00_L11: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 jmp near ptr M00_L20 M00_L12: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 M00_L13: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 M00_L14: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 M00_L15: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 M00_L16: call CORINFO_HELP_RNGCHKFAIL M00_L17: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L18 cmp byte ptr [ecx+20],0 je short M00_L12 cmp byte ptr [ecx+21],5 je short M00_L12 M00_L18: test al,1 je short M00_L19 push 5 push edi push 4 push ebx call dword ptr ds:[0B035768] jmp near ptr M00_L11 M00_L19: push 5 push edi push 4 push ebx call dword ptr ds:[0B035708]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) jmp near ptr M00_L11 M00_L20: mov eax,7E76FB8 add eax,8 mov edx,7E775BC add edx,8 push 4 push eax push 5 push edx call dword ptr ds:[0B0355E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] mov edx,[ecx+18] or edx,80000000 mov [ecx+18],edx mov byte ptr [ecx+21],7 mov edi,7E76FE4 add edi,8 mov eax,edx and eax,7FFFFFFF cmp eax,[ecx+44] jl short M00_L21 push 0C push edi mov eax,[ecx+44] mov ecx,edx mov edx,eax call dword ptr ds:[0B039210] mov ecx,[ebp-28] M00_L21: push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L22 push 0C push edi push eax mov ecx,[ebp-28] mov edx,5B call dword ptr ds:[0B031870] jmp short M00_L27 M00_L22: mov [ebp-2C],edi mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L25 cmp byte ptr [ecx+20],0 je near ptr M00_L14 cmp byte ptr [ecx+21],5 je near ptr M00_L14 lea ebx,[ecx+30] cmp dword ptr [ebx+0C],40 jge short M00_L23 mov edx,ebx mov eax,[edx] mov edx,[edx+4] lea edi,[eax+eax] shld edx,eax,1 mov eax,ebx mov [eax],edi mov [eax+4],edx jmp short M00_L24 M00_L23: mov ecx,ebx xor edx,edx call dword ptr ds:[0B0312D0] M00_L24: inc dword ptr [ebx+0C] mov ecx,[ebp-28] mov byte ptr [ecx+20],0 M00_L25: test byte ptr [ecx+48],1 je short M00_L26 push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[0B0339F0] jmp short M00_L27 M00_L26: push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[0B0339D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M00_L27: mov ecx,[ebp-28] mov eax,[ecx+18] and eax,7FFFFFFF mov [ecx+18],eax inc eax mov [ecx+18],eax mov byte ptr [ecx+21],3 mov edi,7E775D4 add edi,8 push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L28 push 0C push edi mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B0373D8] jmp short M00_L31 M00_L28: mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L29 call dword ptr ds:[0B037198] mov ecx,[ebp-28] M00_L29: test byte ptr [ecx+48],1 je short M00_L30 push 0C push edi call dword ptr ds:[0B0373C0] jmp short M00_L31 M00_L30: push 0C push edi call dword ptr ds:[0B0373A8]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) M00_L31: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,7E775FC add eax,8 push 0C push eax call dword ptr ds:[0B037360]; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[0B0318B8]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov eax,7E7700C add eax,8 push 7 push eax call dword ptr ds:[0B031828]; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) mov ecx,7E77028 add ecx,8 mov eax,7E77624 add eax,8 push 6 push ecx push 0F push eax mov ecx,[ebp-28] call dword ptr ds:[0B0355E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,7E77044 add eax,8 mov edx,7E77650 add edx,8 push 4 push eax push 7 push edx call dword ptr ds:[0B0355E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov edi,7E7705C add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L32 push 3 push edi push 0 push 17F04 mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B035120] jmp short M00_L35 M00_L32: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L33 cmp byte ptr [ecx+20],0 je near ptr M00_L13 cmp byte ptr [ecx+21],5 je near ptr M00_L13 M00_L33: test al,1 je short M00_L34 push 3 push edi push 0 push 17F04 call dword ptr ds:[0B0351B0] jmp short M00_L35 M00_L34: push 3 push edi push 0 push 17F04 call dword ptr ds:[0B035180]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) M00_L35: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],8 mov edx,7D call dword ptr ds:[0B0318B8]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 mov eax,7E76F7C add eax,8 push 0A push eax call dword ptr ds:[0B031810]; System.Text.Json.Utf8JsonWriter.WriteStartArray(System.ReadOnlySpan`1) xor edi,edi cmp dword ptr [esi+30],0 jle short M00_L37 M00_L36: mov ecx,[esi+8] cmp edi,[ecx+4] jae near ptr M00_L16 mov ecx,[ecx+edi*4+8] mov eax,ecx sar eax,1F push eax push ecx mov ecx,[ebp-28] call dword ptr ds:[0B0372D0]; System.Text.Json.Utf8JsonWriter.WriteNumberValue(Int64) inc edi cmp edi,[esi+30] jl short M00_L36 M00_L37: mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[0B0318B8]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov edx,7D call dword ptr ds:[0B0318B8]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 call dword ptr ds:[0B031618]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,[ebp-28] call dword ptr ds:[0B0229D0]; System.Text.Json.Utf8JsonWriter.Dispose() jmp short M00_L38 mov ecx,[ebp-28] call dword ptr ds:[0B0229D0]; System.Text.Json.Utf8JsonWriter.Dispose() pop eax jmp eax M00_L38: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L39: test edx,edx jne short M00_L40 xor ecx,ecx xor edx,edx jmp near ptr M00_L00 M00_L40: call dword ptr ds:[8529A08] int 3 M00_L41: mov ecx,3098 mov edx,0AF5EF60 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B039018] int 3 ; Total bytes of code 1416 ``` ```assembly ; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx M01_L00: test edx,edx je short M01_L08 xor eax,eax mov esi,edx sub esi,1 sbb eax,0 cmp esi,16 sbb eax,0 jb short M01_L09 M01_L01: cmp edx,200 jae near ptr M01_L14 xor edi,edi mov eax,ecx test al,3 jne near ptr M01_L15 M01_L02: mov eax,ecx dec eax test al,4 jne short M01_L03 xor eax,eax mov [ecx+edi],eax add edi,4 M01_L03: lea eax,[edx-10] sub edx,edi M01_L04: lea esi,[edi+10] xor ebx,ebx mov [ecx+edi],ebx mov [ecx+edi+4],ebx mov [ecx+edi+8],ebx mov [ecx+edi+0C],ebx mov edi,esi cmp edi,eax jbe short M01_L04 test dl,8 je short M01_L05 xor eax,eax mov [ecx+edi],eax mov [ecx+edi+4],eax add edi,8 M01_L05: test dl,4 jne short M01_L12 M01_L06: test dl,2 jne short M01_L10 M01_L07: test dl,1 jne short M01_L11 M01_L08: pop ebx pop esi pop edi pop ebp ret M01_L09: cmp esi,0B jne short M01_L13 xor edx,edx mov [ecx],edx mov [ecx+4],edx mov [ecx+8],edx jmp short M01_L08 M01_L10: mov word ptr [ecx+edi],0 add edi,2 jmp short M01_L07 M01_L11: mov byte ptr [ecx+edi],0 jmp short M01_L08 M01_L12: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L06 M01_L13: cmp esi,15 ja near ptr M01_L01 lea eax,ds:[0AF869B8] mov eax,[eax+esi*4] lea edx,[M01_L00] add eax,edx jmp eax xor eax,eax mov [ecx],eax jmp short M01_L08 xor eax,eax mov [ecx],eax mov word ptr [ecx+4],0 mov byte ptr [ecx+6],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov word ptr [ecx+4],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov byte ptr [ecx+4],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov word ptr [ecx+8],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov byte ptr [ecx+8],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov word ptr [ecx+0C],0 mov byte ptr [ecx+0E],0 jmp near ptr M01_L08 M01_L14: call dword ptr ds:[84516D8] jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov byte ptr [ecx+10],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax mov word ptr [ecx+14],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov word ptr [ecx+8],0 mov byte ptr [ecx+0A],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov word ptr [ecx+0C],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov byte ptr [ecx+0C],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 mov byte ptr [ecx+12],0 jmp near ptr M01_L08 mov word ptr [ecx],0 jmp near ptr M01_L08 mov word ptr [ecx],0 mov byte ptr [ecx+2],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax mov byte ptr [ecx+14],0 jmp near ptr M01_L08 M01_L15: mov eax,ecx test al,1 je short M01_L16 mov byte ptr [ecx],0 mov edi,1 mov eax,ecx test al,2 jne near ptr M01_L02 M01_L16: mov word ptr [ecx+edi],0 add edi,2 jmp near ptr M01_L02 mov byte ptr [ecx],0 jmp near ptr M01_L08 ; Total bytes of code 630 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[esi+18] and ecx,7FFFFFFF cmp ecx,[esi+44] jge short M02_L02 cmp dword ptr [esi+48],2 je short M02_L00 movzx edx,dl mov ecx,esi call dword ptr ds:[0B0316D8] jmp short M02_L01 M02_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[0B0316C0]; System.Text.Json.Utf8JsonWriter.WriteStartMinimized(Byte) M02_L01: mov edx,[esi+18] and edx,7FFFFFFF mov [esi+18],edx inc edx mov [esi+18],edx pop esi pop ebp ret M02_L02: mov edx,[esi+18] push dword ptr [esi+44] push 0 push 0 mov ecx,1A call dword ptr ds:[0B0393F0] int 3 ; Total bytes of code 91 ``` ```assembly ; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax mov edx,[ebp+0C] test edx,edx jne short M03_L00 mov eax,0FFFFFFFF mov esp,ebp pop ebp ret 8 M03_L00: mov eax,[ebp+8] mov [ebp-4],eax test ecx,ecx jne short M03_L01 mov ecx,ds:[6C456D0] M03_L01: push edx mov edx,eax mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov esp,ebp pop ebp ret 8 ; Total bytes of code 60 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ecx,[ebp+14] lea edx,[ecx+ecx*2] add edx,18 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M04_L00 mov ecx,esi call dword ptr ds:[0B031960]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M04_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M04_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M04_L22 lea ebx,[eax+8] mov ecx,[eax+4] M04_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M04_L23 sub ecx,edx cmp ecx,eax jb near ptr M04_L23 add ebx,edx mov ecx,eax M04_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M04_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],2C M04_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],22 mov ecx,[ebp+10] mov [ebp-34],ecx mov edx,[ebp+14] mov [ebp-2C],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja near ptr M04_L23 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-2C] push dword ptr [ebp-34] push edx push eax push 0 push 1 lea ecx,[ebp-20] lea edx,[ebp-1C] call dword ptr ds:[0AF773D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-1C] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],22 mov eax,[esi+1C] lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] cmp eax,edi ja near ptr M04_L23 add ebx,eax sub edi,eax cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M04_L05 test edi,edi jne short M04_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L04: mov eax,[ebp+8] add eax,30 mov [ebx],al mov dword ptr [ebp-10],1 jmp near ptr M04_L21 M04_L05: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M04_L17 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M04_L17 mov ecx,[ebp+8] mov eax,edi test ecx,ecx jge near ptr M04_L11 neg ecx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B1C247C] mov edi,[edx] mov edx,[edx+4] add edi,ecx adc edx,0 mov edi,edx cmp edi,eax jl short M04_L06 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L06: test eax,eax je near ptr M04_L24 mov byte ptr [ebx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M04_L23 dec eax cmp edi,eax ja near ptr M04_L23 inc ebx mov edx,ecx mov [ebp-38],ebx lea ecx,[edi-1] test ecx,ecx jle short M04_L10 M04_L07: lea eax,[edx+30] mov [ebp-24],eax mov ebx,0CCCCCCCD mov eax,edx mul ebx shr edx,3 cmp ecx,edi jae near ptr M04_L24 lea eax,[edx+edx*4] add eax,eax mov ebx,[ebp-24] sub ebx,eax mov eax,[ebp-38] mov [eax+ecx],bl dec ecx test ecx,ecx jg short M04_L09 M04_L08: test edi,edi je near ptr M04_L24 add edx,30 mov [eax],dl jmp near ptr M04_L21 M04_L09: mov [ebp-38],eax jmp short M04_L07 M04_L10: mov eax,[ebp-38] jmp short M04_L08 M04_L11: mov edi,ebx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B1C247C] mov ebx,[edx] mov edx,[edx+4] add ebx,ecx adc edx,0 mov ebx,edx cmp ebx,eax jle short M04_L12 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L12: mov [ebp-10],ebx cmp ebx,eax ja near ptr M04_L23 mov edx,ecx mov [ebp-3C],edi mov [ebp-30],ebx lea ecx,[ebx-1] test ecx,ecx jle short M04_L16 M04_L13: lea eax,[edx+30] mov [ebp-28],eax mov edi,0CCCCCCCD mov eax,edx mul edi shr edx,3 cmp ecx,ebx jae near ptr M04_L24 lea eax,[edx+edx*4] add eax,eax mov edi,[ebp-28] mov ebx,edi sub ebx,eax mov edi,[ebp-3C] mov [edi+ecx],bl dec ecx test ecx,ecx jg short M04_L15 M04_L14: cmp dword ptr [ebp-30],0 jbe near ptr M04_L24 lea ecx,[edx+30] mov [edi],cl jmp near ptr M04_L21 M04_L15: mov [ebp-3C],edi mov ebx,[ebp-30] jmp short M04_L13 M04_L16: mov edi,[ebp-3C] jmp short M04_L14 M04_L17: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M04_L19 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M04_L19 cmp dword ptr [ebp+0C],0 jl short M04_L18 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0AF77360] jmp short M04_L21 M04_L18: mov ecx,[ebp+8] mov eax,[ebp+0C] mov edx,ecx neg edx adc eax,0 neg eax push eax push edx push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0AF772A0] jmp short M04_L21 M04_L19: cmp dword ptr [ebp+0C],0 jl short M04_L20 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0AF77378] jmp short M04_L21 M04_L20: mov ecx,[ebp+8] mov eax,[ebp+0C] mov edx,ecx neg edx adc eax,0 neg eax push eax push edx push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0AF772B8] M04_L21: mov edx,[esi+1C] add edx,[ebp-10] mov [esi+1C],edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M04_L22: lea edx,[ebp-18] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-18] mov ecx,[ebp-14] jmp near ptr M04_L01 M04_L23: call dword ptr ds:[8529A08] int 3 M04_L24: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 903 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,28 xor eax,eax mov [ebp-14],eax mov esi,ecx mov ecx,[ebp+14] add ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,6 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M05_L00 mov ecx,esi call dword ptr ds:[0B031960]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M05_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M05_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M05_L04 lea ebx,[eax+8] mov ecx,[eax+4] M05_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M05_L05 sub ecx,edx cmp ecx,eax jb near ptr M05_L05 add ebx,edx mov ecx,eax M05_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M05_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],2C M05_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+10] mov [ebp-30],ecx mov edx,[ebp+14] mov [ebp-28],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja near ptr M05_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-28] push dword ptr [ebp-30] push edx push eax push 0 push 1 lea ecx,[ebp-1C] lea edx,[ebp-18] call dword ptr ds:[0AF773D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-18] mov ecx,eax mov [esi+1C],ecx lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],22 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae short M05_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+8] mov [ebp-34],ecx mov edx,[ebp+0C] mov [ebp-2C],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja short M05_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-2C] push dword ptr [ebp-34] push edx push eax push 0 push 1 lea ecx,[ebp-24] lea edx,[ebp-20] call dword ptr ds:[0AF773D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-20] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae short M05_L06 mov byte ptr [ebx+eax],22 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M05_L04: lea edx,[ebp-14] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-14] mov ecx,[ebp-10] jmp near ptr M05_L01 M05_L05: call dword ptr ds:[8529A08] int 3 M05_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 410 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov edi,eax push dword ptr [ebp+14] push dword ptr [ebp+10] mov ecx,[esi+40] call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) lea ecx,[edi+eax] cmp ecx,0FFFFFFFE je short M06_L00 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi mov ecx,esi mov edx,eax call dword ptr ds:[0B035648] pop ebx pop esi pop edi pop ebp ret 10 M06_L00: mov edi,[ebp+10] mov ebx,[ebp+14] mov eax,[ebp+8] mov edx,[ebp+0C] mov ecx,[esi+48] test cl,2 jne short M06_L01 cmp byte ptr [esi+20],0 je short M06_L04 cmp byte ptr [esi+21],5 je short M06_L04 M06_L01: test cl,1 je short M06_L02 push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[0B035768] jmp short M06_L03 M06_L02: push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[0B035708]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) M06_L03: pop ebx pop esi pop edi pop ebp ret 10 M06_L04: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 ; Total bytes of code 172 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov [ebp-10],edx mov esi,ecx mov ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,5 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M07_L00 mov ecx,esi call dword ptr ds:[0B031960]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M07_L00: lea edi,[esi+24] xor ecx,ecx xor edx,edx mov eax,[edi] test eax,eax je short M07_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M07_L04 lea ecx,[eax+8] mov edx,[eax+4] M07_L01: mov eax,[edi+4] and eax,7FFFFFFF mov edi,[edi+8] cmp eax,edx ja near ptr M07_L05 sub edx,eax cmp edx,edi jb near ptr M07_L05 add ecx,eax mov edx,edi M07_L02: mov edi,ecx mov eax,edx mov [ebp-24],eax cmp dword ptr [esi+18],0 jge short M07_L03 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M07_L06 mov byte ptr [edi+edx],2C M07_L03: mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M07_L06 mov byte ptr [edi+edx],22 mov ecx,[ebp+8] mov [ebp-2C],ecx mov edx,[ebp+0C] mov [ebp-28],edx mov ecx,eax mov edx,[esi+1C] cmp edx,ecx ja near ptr M07_L05 lea ecx,[edi+edx] mov ebx,eax sub ebx,edx push dword ptr [ebp-28] push dword ptr [ebp-2C] push ebx push ecx push 0 push 1 lea ecx,[ebp-20] lea edx,[ebp-1C] call dword ptr ds:[0AF773D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov edx,[esi+1C] add edx,[ebp-1C] mov ecx,edx mov [esi+1C],ecx lea ecx,[edx+1] mov [esi+1C],ecx mov ebx,[ebp-24] cmp edx,ebx jae short M07_L06 mov byte ptr [edi+edx],22 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M07_L06 mov byte ptr [edi+edx],3A mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M07_L06 mov ebx,[ebp-10] mov [edi+edx],bl lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M07_L04: lea edx,[ebp-18] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-18] mov edx,[ebp-14] jmp near ptr M07_L01 M07_L05: call dword ptr ds:[8529A08] int 3 M07_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 334 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx mov ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,3 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M08_L00 mov ecx,esi call dword ptr ds:[0B031960]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M08_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M08_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M08_L04 lea ebx,[eax+8] mov ecx,[eax+4] M08_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M08_L05 sub ecx,edx cmp ecx,eax jb near ptr M08_L05 add ebx,edx mov ecx,eax M08_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M08_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M08_L06 mov byte ptr [ebx+eax],2C M08_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae short M08_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+8] mov [ebp-24],ecx mov edx,[ebp+0C] mov [ebp-20],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja short M08_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-20] push dword ptr [ebp-24] push edx push eax push 0 push 1 lea ecx,[ebp-1C] lea edx,[ebp-18] call dword ptr ds:[0AF773D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-18] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae short M08_L06 mov byte ptr [ebx+eax],22 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M08_L04: lea edx,[ebp-14] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-14] mov ecx,[ebp-10] jmp near ptr M08_L01 M08_L05: call dword ptr ds:[8529A08] int 3 M08_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 280 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[ebp+0C] mov ecx,edi cmp ecx,9EF21AA jg short M09_L04 mov ebx,[ebp+8] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M09_L00 push edi push ebx mov ecx,esi mov edx,eax call dword ptr ds:[0B0373D8] jmp short M09_L03 M09_L00: test byte ptr [esi+48],2 jne short M09_L01 mov ecx,esi call dword ptr ds:[0B037198] M09_L01: test byte ptr [esi+48],1 je short M09_L02 push edi push ebx mov ecx,esi call dword ptr ds:[0B0373C0] jmp short M09_L03 M09_L02: push edi push ebx mov ecx,esi call dword ptr ds:[0B0373A8]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) M09_L03: or dword ptr [esi+18],80000000 mov byte ptr [esi+21],7 pop ebx pop esi pop edi pop ebp ret 8 M09_L04: call dword ptr ds:[0B039108] int 3 ; Total bytes of code 125 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) push ebp mov ebp,esp push esi mov esi,ecx cmp dword ptr [esi+48],2 je short M10_L00 movzx edx,dl mov ecx,esi call dword ptr ds:[0B0318E8] jmp short M10_L01 M10_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[0B0318D0]; System.Text.Json.Utf8JsonWriter.WriteEndMinimized(Byte) M10_L01: mov eax,[esi+18] or eax,80000000 mov [esi+18],eax test eax,7FFFFFFF je short M10_L02 dec eax mov [esi+18],eax M10_L02: pop esi pop ebp ret ; Total bytes of code 61 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov esi,ecx mov ecx,[ebp+8] mov edx,[ebp+0C] cmp edx,9EF21AA jg short M11_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M11_L01 M11_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[0B039210] M11_L01: mov edi,[ebp+8] mov ebx,[ebp+0C] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M11_L02 push ebx push edi push eax mov ecx,esi mov edx,7B call dword ptr ds:[0B031870] jmp near ptr M11_L07 M11_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M11_L05 cmp byte ptr [esi+20],0 je near ptr M11_L08 cmp byte ptr [esi+21],5 je near ptr M11_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M11_L03 mov ecx,eax mov edx,[ecx] mov ecx,[ecx+4] lea ebx,[edx+edx] shld ecx,edx,1 or ebx,1 or ecx,0 mov edx,eax mov [edx],ebx mov [edx+4],ecx jmp short M11_L04 M11_L03: mov ecx,eax mov edx,1 call dword ptr ds:[0B0312D0] mov eax,[ebp-14] M11_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],1 M11_L05: test byte ptr [esi+48],1 je short M11_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[0B0339F0] jmp short M11_L07 M11_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[0B0339D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M11_L07: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+21],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M11_L08: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 ; Total bytes of code 288 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStartArray(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov esi,ecx mov ecx,[ebp+8] mov edx,[ebp+0C] cmp edx,9EF21AA jg short M12_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M12_L01 M12_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[0B039210] M12_L01: mov edi,[ebp+8] mov ebx,[ebp+0C] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B03B438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M12_L02 push ebx push edi push eax mov ecx,esi mov edx,5B call dword ptr ds:[0B031870] jmp near ptr M12_L07 M12_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M12_L05 cmp byte ptr [esi+20],0 je near ptr M12_L08 cmp byte ptr [esi+21],5 je near ptr M12_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M12_L03 mov ecx,eax mov edx,[ecx] mov ecx,[ecx+4] lea ebx,[edx+edx] shld ecx,edx,1 mov edx,eax mov [edx],ebx mov [edx+4],ecx jmp short M12_L04 M12_L03: mov ecx,eax xor edx,edx call dword ptr ds:[0B0312D0] mov eax,[ebp-14] M12_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],0 M12_L05: test byte ptr [esi+48],1 je short M12_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[0B0339F0] jmp short M12_L07 M12_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[0B0339D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M12_L07: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+21],3 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M12_L08: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B0393F0] int 3 ; Total bytes of code 279 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteNumberValue(Int64) push ebp mov ebp,esp push esi mov esi,ecx test byte ptr [esi+48],2 jne short M13_L00 mov ecx,esi call dword ptr ds:[0B037198] M13_L00: test byte ptr [esi+48],1 je short M13_L01 push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[0B037300] jmp short M13_L02 M13_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[0B0372E8]; System.Text.Json.Utf8JsonWriter.WriteNumberValueMinimized(Int64) M13_L02: or dword ptr [esi+18],80000000 mov byte ptr [esi+21],8 pop esi pop ebp ret 8 ; Total bytes of code 72 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.Flush() push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov ecx,[esi+10] test ecx,ecx jne short M14_L00 cmp dword ptr [esi+0C],0 je near ptr M14_L06 M14_L00: xor edx,edx mov [esi+24],edx mov [esi+28],edx mov [esi+2C],edx test ecx,ecx je near ptr M14_L04 mov edx,[esi+1C] test edx,edx je near ptr M14_L03 mov ecx,[esi+14] cmp [ecx],ecx call dword ptr ds:[0AF54CC8]; System.Buffers.ArrayBufferWriter`1[[System.Byte, System.Private.CoreLib]].Advance(Int32) xor ecx,ecx mov [esi+1C],ecx mov ecx,[esi+10] mov eax,[esi+14] mov edx,[eax+4] mov edi,[eax+8] test edx,edx je near ptr M14_L07 mov eax,[edx+4] cmp [edx+4],edi jb near ptr M14_L09 add edx,8 M14_L01: push edi push edx mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+1C] lea ecx,[esi+4] mov edx,[ecx] mov ecx,[ecx+4] mov edi,[esi+14] mov eax,[edi+8] mov [ebp-10],eax mov ebx,eax sar eax,1F add edx,ebx adc ecx,eax lea eax,[esi+4] mov [eax],edx mov [eax+4],ecx mov ecx,[edi+4] mov eax,[ebp-10] mov edx,eax test ecx,ecx je short M14_L08 mov eax,[ecx+4] cmp [ecx+4],edx jb short M14_L09 add ecx,8 M14_L02: call dword ptr ds:[7E2F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) xor ecx,ecx mov [edi+8],ecx M14_L03: mov ecx,[esi+10] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+18] pop ecx pop ebx pop esi pop edi pop ebp ret M14_L04: mov edx,[esi+1C] test edx,edx je short M14_L05 mov ecx,[esi+0C] call dword ptr ds:[2F702E4] lea eax,[esi+4] mov edx,[eax] mov eax,[eax+4] mov ecx,[esi+1C] mov edi,ecx sar edi,1F add edx,ecx adc eax,edi lea ecx,[esi+4] mov [ecx],edx mov [ecx+4],eax xor eax,eax mov [esi+1C],eax M14_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M14_L06: call dword ptr ds:[0B039570] int 3 M14_L07: test edi,edi jne short M14_L09 xor edx,edx xor edi,edi jmp near ptr M14_L01 M14_L08: test edx,edx jne short M14_L09 xor ecx,ecx xor edx,edx jmp short M14_L02 M14_L09: call dword ptr ds:[8529A08] int 3 ; Total bytes of code 294 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.Dispose() push ebp mov ebp,esp push esi mov esi,ecx cmp dword ptr [esi+10],0 jne short M15_L00 cmp dword ptr [esi+0C],0 jne short M15_L00 pop esi pop ebp ret M15_L00: mov ecx,esi call dword ptr ds:[0B031618]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,esi call dword ptr ds:[0B0315E8]; System.Text.Json.Utf8JsonWriter.ResetHelper() xor eax,eax mov [esi+10],eax mov [esi+14],eax mov [esi+0C],eax pop esi pop ebp ret ; Total bytes of code 51 ``` ### Compare Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16() push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-20],eax mov [ebp-1C],eax mov [ebp-18],eax mov [ebp-14],eax mov esi,ecx mov edi,[esi+4] mov ecx,[edi+4] mov edx,[edi+8] test ecx,ecx je near ptr M00_L39 mov eax,[ecx+4] cmp [ecx+4],edx jb near ptr M00_L40 add ecx,8 M00_L00: call dword ptr ds:[851F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) xor ecx,ecx mov [edi+8],ecx mov edi,[esi+4] movzx ecx,byte ptr [esi+34] test ecx,ecx je short M00_L01 mov ebx,1 jmp short M00_L02 M00_L01: xor ebx,ebx M00_L02: movzx ecx,byte ptr [esi+35] test ecx,ecx je short M00_L03 or ebx,2 jmp short M00_L04 M00_L03: and ebx,0FFFFFFFD M00_L04: mov ecx,offset MT_System.Text.Json.Utf8JsonWriter call CORINFO_HELP_NEWSFAST mov ecx,eax mov eax,ebx test edi,edi je near ptr M00_L41 lea edx,[ecx+0C] call CORINFO_HELP_ASSIGN_REF_EDI lea edx,[ecx+40] xor edi,edi mov [edx],edi mov [edx+4],edi mov [edx+8],eax cmp dword ptr [ecx+44],0 jne short M00_L05 mov dword ptr [ecx+44],3E8 M00_L05: mov [ebp-28],ecx mov edx,7B call dword ptr ds:[0B697930]; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],1 mov edi,8566FD0 add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L06 push 3 push edi push 0 push 2A mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B69B120] jmp short M00_L08 M00_L06: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L07 cmp byte ptr [ecx+20],0 je near ptr M00_L15 cmp byte ptr [ecx+21],5 je near ptr M00_L15 M00_L07: test al,1 je short M00_L09 push 3 push edi push 0 push 2A call dword ptr ds:[0B69B1B0] M00_L08: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],8 jmp short M00_L10 M00_L09: push 3 push edi push 0 push 2A call dword ptr ds:[0B69B180]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) jmp short M00_L08 M00_L10: mov edi,8566FA0 add edi,8 mov ebx,85675A4 add ebx,8 push 4 push ebx mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov [ebp-24],eax push 5 push edi mov ecx,[ebp-28] mov edx,[ecx+40] mov ecx,edx call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov ecx,[ebp-24] lea edx,[ecx+eax] cmp edx,0FFFFFFFE je near ptr M00_L17 push 5 push edi push 4 push ebx push ecx mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B69B648] M00_L11: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 jmp near ptr M00_L20 M00_L12: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 M00_L13: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 M00_L14: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 M00_L15: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+21] push edx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 M00_L16: call CORINFO_HELP_RNGCHKFAIL M00_L17: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L18 cmp byte ptr [ecx+20],0 je short M00_L12 cmp byte ptr [ecx+21],5 je short M00_L12 M00_L18: test al,1 je short M00_L19 push 5 push edi push 4 push ebx call dword ptr ds:[0B69B768] jmp near ptr M00_L11 M00_L19: push 5 push edi push 4 push ebx call dword ptr ds:[0B69B708]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) jmp near ptr M00_L11 M00_L20: mov eax,8566FB8 add eax,8 mov edx,85675BC add edx,8 push 4 push eax push 5 push edx call dword ptr ds:[0B69B5E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] mov edx,[ecx+18] or edx,80000000 mov [ecx+18],edx mov byte ptr [ecx+21],7 mov edi,8566FE4 add edi,8 mov eax,edx and eax,7FFFFFFF cmp eax,[ecx+44] jl short M00_L21 push 0C push edi mov eax,[ecx+44] mov ecx,edx mov edx,eax call dword ptr ds:[0B69F210] mov ecx,[ebp-28] M00_L21: push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L22 push 0C push edi push eax mov ecx,[ebp-28] mov edx,5B call dword ptr ds:[0B697AF8] jmp short M00_L27 M00_L22: mov [ebp-2C],edi mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L25 cmp byte ptr [ecx+20],0 je near ptr M00_L14 cmp byte ptr [ecx+21],5 je near ptr M00_L14 lea ebx,[ecx+30] cmp dword ptr [ebx+0C],40 jge short M00_L23 mov edx,ebx mov eax,[edx] mov edx,[edx+4] lea edi,[eax+eax] shld edx,eax,1 mov eax,ebx mov [eax],edi mov [eax+4],edx jmp short M00_L24 M00_L23: mov ecx,ebx xor edx,edx call dword ptr ds:[0B697558] M00_L24: inc dword ptr [ebx+0C] mov ecx,[ebp-28] mov byte ptr [ecx+20],0 M00_L25: test byte ptr [ecx+48],1 je short M00_L26 push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[0B6999F0] jmp short M00_L27 M00_L26: push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[0B6999D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M00_L27: mov ecx,[ebp-28] mov eax,[ecx+18] and eax,7FFFFFFF mov [ecx+18],eax inc eax mov [ecx+18],eax mov byte ptr [ecx+21],3 mov edi,85675D4 add edi,8 push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L28 push 0C push edi mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B69D3D8] jmp short M00_L31 M00_L28: mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L29 call dword ptr ds:[0B69D198] mov ecx,[ebp-28] M00_L29: test byte ptr [ecx+48],1 je short M00_L30 push 0C push edi call dword ptr ds:[0B69D3C0] jmp short M00_L31 M00_L30: push 0C push edi call dword ptr ds:[0B69D3A8]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) M00_L31: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,85675FC add eax,8 push 0C push eax call dword ptr ds:[0B69D360]; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[0B697B40]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov eax,856700C add eax,8 push 7 push eax call dword ptr ds:[0B697AB0]; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) mov ecx,8567028 add ecx,8 mov eax,8567624 add eax,8 push 6 push ecx push 0F push eax mov ecx,[ebp-28] call dword ptr ds:[0B69B5E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,8567044 add eax,8 mov edx,8567650 add edx,8 push 4 push eax push 7 push edx call dword ptr ds:[0B69B5E8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov edi,856705C add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L32 push 3 push edi push 0 push 17F04 mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[0B69B120] jmp short M00_L35 M00_L32: mov ecx,[ebp-28] mov eax,[ecx+48] test al,2 jne short M00_L33 cmp byte ptr [ecx+20],0 je near ptr M00_L13 cmp byte ptr [ecx+21],5 je near ptr M00_L13 M00_L33: test al,1 je short M00_L34 push 3 push edi push 0 push 17F04 call dword ptr ds:[0B69B1B0] jmp short M00_L35 M00_L34: push 3 push edi push 0 push 17F04 call dword ptr ds:[0B69B180]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) M00_L35: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],8 mov edx,7D call dword ptr ds:[0B697B40]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 mov eax,8566F7C add eax,8 push 0A push eax call dword ptr ds:[0B697A98]; System.Text.Json.Utf8JsonWriter.WriteStartArray(System.ReadOnlySpan`1) xor edi,edi cmp dword ptr [esi+30],0 jle short M00_L37 M00_L36: mov ecx,[esi+8] cmp edi,[ecx+4] jae near ptr M00_L16 mov ecx,[ecx+edi*4+8] mov eax,ecx sar eax,1F push eax push ecx mov ecx,[ebp-28] call dword ptr ds:[0B69D2D0]; System.Text.Json.Utf8JsonWriter.WriteNumberValue(Int64) inc edi cmp edi,[esi+30] jl short M00_L36 M00_L37: mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[0B697B40]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov edx,7D call dword ptr ds:[0B697B40]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 call dword ptr ds:[0B6978A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,[ebp-28] call dword ptr ds:[0B6804EC]; System.Text.Json.Utf8JsonWriter.Dispose() jmp short M00_L38 mov ecx,[ebp-28] call dword ptr ds:[0B6804EC]; System.Text.Json.Utf8JsonWriter.Dispose() pop eax jmp eax M00_L38: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L39: test edx,edx jne short M00_L40 xor ecx,ecx xor edx,edx jmp near ptr M00_L00 M00_L40: call dword ptr ds:[8BF5060] int 3 M00_L41: mov ecx,3098 mov edx,0B67CA88 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[0B69F018] int 3 ; Total bytes of code 1416 ``` ```assembly ; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) push ebp mov ebp,esp push edi push esi push ebx M01_L00: test edx,edx je short M01_L08 xor eax,eax mov esi,edx sub esi,1 sbb eax,0 cmp esi,16 sbb eax,0 jb short M01_L09 M01_L01: cmp edx,200 jae near ptr M01_L14 xor edi,edi mov eax,ecx test al,3 jne near ptr M01_L15 M01_L02: mov eax,ecx dec eax test al,4 jne short M01_L03 xor eax,eax mov [ecx+edi],eax add edi,4 M01_L03: lea eax,[edx-10] sub edx,edi M01_L04: lea esi,[edi+10] xor ebx,ebx mov [ecx+edi],ebx mov [ecx+edi+4],ebx mov [ecx+edi+8],ebx mov [ecx+edi+0C],ebx mov edi,esi cmp edi,eax jbe short M01_L04 test dl,8 je short M01_L05 xor eax,eax mov [ecx+edi],eax mov [ecx+edi+4],eax add edi,8 M01_L05: test dl,4 jne short M01_L12 M01_L06: test dl,2 jne short M01_L10 M01_L07: test dl,1 jne short M01_L11 M01_L08: pop ebx pop esi pop edi pop ebp ret M01_L09: cmp esi,0B jne short M01_L13 xor edx,edx mov [ecx],edx mov [ecx+4],edx mov [ecx+8],edx jmp short M01_L08 M01_L10: mov word ptr [ecx+edi],0 add edi,2 jmp short M01_L07 M01_L11: mov byte ptr [ecx+edi],0 jmp short M01_L08 M01_L12: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L06 M01_L13: cmp esi,15 ja near ptr M01_L01 lea eax,ds:[0B6B6DB8] mov eax,[eax+esi*4] lea edx,[M01_L00] add eax,edx jmp eax xor eax,eax mov [ecx],eax jmp short M01_L08 xor eax,eax mov [ecx],eax mov word ptr [ecx+4],0 mov byte ptr [ecx+6],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov word ptr [ecx+4],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov byte ptr [ecx+4],0 jmp short M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov word ptr [ecx+8],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov byte ptr [ecx+8],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov word ptr [ecx+0C],0 mov byte ptr [ecx+0E],0 jmp near ptr M01_L08 M01_L14: call dword ptr ds:[8B416C0] jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov byte ptr [ecx+10],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax mov word ptr [ecx+14],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov word ptr [ecx+8],0 mov byte ptr [ecx+0A],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov word ptr [ecx+0C],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov byte ptr [ecx+0C],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 mov byte ptr [ecx+12],0 jmp near ptr M01_L08 mov word ptr [ecx],0 jmp near ptr M01_L08 mov word ptr [ecx],0 mov byte ptr [ecx+2],0 jmp near ptr M01_L08 xor eax,eax mov [ecx],eax mov [ecx+4],eax mov [ecx+8],eax mov [ecx+0C],eax mov [ecx+10],eax mov byte ptr [ecx+14],0 jmp near ptr M01_L08 M01_L15: mov eax,ecx test al,1 je short M01_L16 mov byte ptr [ecx],0 mov edi,1 mov eax,ecx test al,2 jne near ptr M01_L02 M01_L16: mov word ptr [ecx+edi],0 add edi,2 jmp near ptr M01_L02 mov byte ptr [ecx],0 jmp near ptr M01_L08 ; Total bytes of code 630 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) push ebp mov ebp,esp push esi mov esi,ecx mov ecx,[esi+18] and ecx,7FFFFFFF cmp ecx,[esi+44] jge short M02_L02 cmp dword ptr [esi+48],2 je short M02_L00 movzx edx,dl mov ecx,esi call dword ptr ds:[0B697960] jmp short M02_L01 M02_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[0B697948]; System.Text.Json.Utf8JsonWriter.WriteStartMinimized(Byte) M02_L01: mov edx,[esi+18] and edx,7FFFFFFF mov [esi+18],edx inc edx mov [esi+18],edx pop esi pop ebp ret M02_L02: mov edx,[esi+18] push dword ptr [esi+44] push 0 push 0 mov ecx,1A call dword ptr ds:[0B69F3F0] int 3 ; Total bytes of code 91 ``` ```assembly ; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) push ebp mov ebp,esp push eax xor eax,eax mov [ebp-4],eax mov edx,[ebp+0C] test edx,edx jne short M03_L00 mov eax,0FFFFFFFF mov esp,ebp pop ebp ret 8 M03_L00: mov eax,[ebp+8] mov [ebp-4],eax test ecx,ecx jne short M03_L01 mov ecx,ds:[73456D0] M03_L01: push edx mov edx,eax mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov esp,ebp pop ebp ret 8 ; Total bytes of code 60 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) push ebp mov ebp,esp push edi push esi push ebx sub esp,30 xor eax,eax mov [ebp-18],eax mov esi,ecx mov ecx,[ebp+14] lea edx,[ecx+ecx*2] add edx,18 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M04_L00 mov ecx,esi call dword ptr ds:[0B697BE8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M04_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M04_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M04_L22 lea ebx,[eax+8] mov ecx,[eax+4] M04_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M04_L23 sub ecx,edx cmp ecx,eax jb near ptr M04_L23 add ebx,edx mov ecx,eax M04_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M04_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],2C M04_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],22 mov ecx,[ebp+10] mov [ebp-34],ecx mov edx,[ebp+14] mov [ebp-2C],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja near ptr M04_L23 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-2C] push dword ptr [ebp-34] push edx push eax push 0 push 1 lea ecx,[ebp-20] lea edx,[ebp-1C] call dword ptr ds:[0B78D3D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-1C] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],22 mov eax,[esi+1C] lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae near ptr M04_L24 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] cmp eax,edi ja near ptr M04_L23 add ebx,eax sub edi,eax cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M04_L05 test edi,edi jne short M04_L04 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L04: mov eax,[ebp+8] add eax,30 mov [ebx],al mov dword ptr [ebp-10],1 jmp near ptr M04_L21 M04_L05: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M04_L17 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M04_L17 mov ecx,[ebp+8] mov eax,edi test ecx,ecx jge near ptr M04_L11 neg ecx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B9827E8] mov edi,[edx] mov edx,[edx+4] add edi,ecx adc edx,0 mov edi,edx cmp edi,eax jl short M04_L06 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L06: test eax,eax je near ptr M04_L24 mov byte ptr [ebx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M04_L23 dec eax cmp edi,eax ja near ptr M04_L23 inc ebx mov edx,ecx mov [ebp-38],ebx lea ecx,[edi-1] test ecx,ecx jle short M04_L10 M04_L07: lea eax,[edx+30] mov [ebp-24],eax mov ebx,0CCCCCCCD mov eax,edx mul ebx shr edx,3 cmp ecx,edi jae near ptr M04_L24 lea eax,[edx+edx*4] add eax,eax mov ebx,[ebp-24] sub ebx,eax mov eax,[ebp-38] mov [eax+ecx],bl dec ecx test ecx,ecx jg short M04_L09 M04_L08: test edi,edi je near ptr M04_L24 add edx,30 mov [eax],dl jmp near ptr M04_L21 M04_L09: mov [ebp-38],eax jmp short M04_L07 M04_L10: mov eax,[ebp-38] jmp short M04_L08 M04_L11: mov edi,ebx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6B9827E8] mov ebx,[edx] mov edx,[edx+4] add ebx,ecx adc edx,0 mov ebx,edx cmp ebx,eax jle short M04_L12 xor eax,eax mov [ebp-10],eax jmp near ptr M04_L21 M04_L12: mov [ebp-10],ebx cmp ebx,eax ja near ptr M04_L23 mov edx,ecx mov [ebp-3C],edi mov [ebp-30],ebx lea ecx,[ebx-1] test ecx,ecx jle short M04_L16 M04_L13: lea eax,[edx+30] mov [ebp-28],eax mov edi,0CCCCCCCD mov eax,edx mul edi shr edx,3 cmp ecx,ebx jae near ptr M04_L24 lea eax,[edx+edx*4] add eax,eax mov edi,[ebp-28] mov ebx,edi sub ebx,eax mov edi,[ebp-3C] mov [edi+ecx],bl dec ecx test ecx,ecx jg short M04_L15 M04_L14: cmp dword ptr [ebp-30],0 jbe near ptr M04_L24 lea ecx,[edx+30] mov [edi],cl jmp near ptr M04_L21 M04_L15: mov [ebp-3C],edi mov ebx,[ebp-30] jmp short M04_L13 M04_L16: mov edi,[ebp-3C] jmp short M04_L14 M04_L17: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M04_L19 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M04_L19 cmp dword ptr [ebp+0C],0 jl short M04_L18 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B78D360] jmp short M04_L21 M04_L18: mov ecx,[ebp+8] mov eax,[ebp+0C] mov edx,ecx neg edx adc eax,0 neg eax push eax push edx push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B78D2A0] jmp short M04_L21 M04_L19: cmp dword ptr [ebp+0C],0 jl short M04_L20 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B78D378] jmp short M04_L21 M04_L20: mov ecx,[ebp+8] mov eax,[ebp+0C] mov edx,ecx neg edx adc eax,0 neg eax push eax push edx push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B78D2B8] M04_L21: mov edx,[esi+1C] add edx,[ebp-10] mov [esi+1C],edx lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M04_L22: lea edx,[ebp-18] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-18] mov ecx,[ebp-14] jmp near ptr M04_L01 M04_L23: call dword ptr ds:[8BF5060] int 3 M04_L24: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 903 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,28 xor eax,eax mov [ebp-14],eax mov esi,ecx mov ecx,[ebp+14] add ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,6 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M05_L00 mov ecx,esi call dword ptr ds:[0B697BE8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M05_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M05_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M05_L04 lea ebx,[eax+8] mov ecx,[eax+4] M05_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M05_L05 sub ecx,edx cmp ecx,eax jb near ptr M05_L05 add ebx,edx mov ecx,eax M05_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M05_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],2C M05_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+10] mov [ebp-30],ecx mov edx,[ebp+14] mov [ebp-28],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja near ptr M05_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-28] push dword ptr [ebp-30] push edx push eax push 0 push 1 lea ecx,[ebp-1C] lea edx,[ebp-18] call dword ptr ds:[0B78D3D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-18] mov ecx,eax mov [esi+1C],ecx lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],22 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M05_L06 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae short M05_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+8] mov [ebp-34],ecx mov edx,[ebp+0C] mov [ebp-2C],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja short M05_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-2C] push dword ptr [ebp-34] push edx push eax push 0 push 1 lea ecx,[ebp-24] lea edx,[ebp-20] call dword ptr ds:[0B78D3D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-20] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae short M05_L06 mov byte ptr [ebx+eax],22 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M05_L04: lea edx,[ebp-14] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-14] mov ecx,[ebp-10] jmp near ptr M05_L01 M05_L05: call dword ptr ds:[8BF5060] int 3 M05_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 410 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) mov edi,eax push dword ptr [ebp+14] push dword ptr [ebp+10] mov ecx,[esi+40] call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) lea ecx,[edi+eax] cmp ecx,0FFFFFFFE je short M06_L00 push dword ptr [ebp+14] push dword ptr [ebp+10] push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi mov ecx,esi mov edx,eax call dword ptr ds:[0B69B648] pop ebx pop esi pop edi pop ebp ret 10 M06_L00: mov edi,[ebp+10] mov ebx,[ebp+14] mov eax,[ebp+8] mov edx,[ebp+0C] mov ecx,[esi+48] test cl,2 jne short M06_L01 cmp byte ptr [esi+20],0 je short M06_L04 cmp byte ptr [esi+21],5 je short M06_L04 M06_L01: test cl,1 je short M06_L02 push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[0B69B768] jmp short M06_L03 M06_L02: push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[0B69B708]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) M06_L03: pop ebx pop esi pop edi pop ebp ret 10 M06_L04: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 ; Total bytes of code 172 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) push ebp mov ebp,esp push edi push esi push ebx sub esp,20 xor eax,eax mov [ebp-18],eax mov [ebp-10],edx mov esi,ecx mov ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,5 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M07_L00 mov ecx,esi call dword ptr ds:[0B697BE8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M07_L00: lea edi,[esi+24] xor ecx,ecx xor edx,edx mov eax,[edi] test eax,eax je short M07_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M07_L04 lea ecx,[eax+8] mov edx,[eax+4] M07_L01: mov eax,[edi+4] and eax,7FFFFFFF mov edi,[edi+8] cmp eax,edx ja near ptr M07_L05 sub edx,eax cmp edx,edi jb near ptr M07_L05 add ecx,eax mov edx,edi M07_L02: mov edi,ecx mov eax,edx mov [ebp-24],eax cmp dword ptr [esi+18],0 jge short M07_L03 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M07_L06 mov byte ptr [edi+edx],2C M07_L03: mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M07_L06 mov byte ptr [edi+edx],22 mov ecx,[ebp+8] mov [ebp-2C],ecx mov edx,[ebp+0C] mov [ebp-28],edx mov ecx,eax mov edx,[esi+1C] cmp edx,ecx ja near ptr M07_L05 lea ecx,[edi+edx] mov ebx,eax sub ebx,edx push dword ptr [ebp-28] push dword ptr [ebp-2C] push ebx push ecx push 0 push 1 lea ecx,[ebp-20] lea edx,[ebp-1C] call dword ptr ds:[0B78D3D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov edx,[esi+1C] add edx,[ebp-1C] mov ecx,edx mov [esi+1C],ecx lea ecx,[edx+1] mov [esi+1C],ecx mov ebx,[ebp-24] cmp edx,ebx jae short M07_L06 mov byte ptr [edi+edx],22 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M07_L06 mov byte ptr [edi+edx],3A mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M07_L06 mov ebx,[ebp-10] mov [edi+edx],bl lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M07_L04: lea edx,[ebp-18] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ecx,[ebp-18] mov edx,[ebp-14] jmp near ptr M07_L01 M07_L05: call dword ptr ds:[8BF5060] int 3 M07_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 334 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,18 xor eax,eax mov [ebp-14],eax mov esi,ecx mov ecx,[ebp+0C] lea edx,[ecx+ecx*2] add edx,3 mov ecx,[esi+2C] sub ecx,[esi+1C] cmp ecx,edx jge short M08_L00 mov ecx,esi call dword ptr ds:[0B697BE8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M08_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M08_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M08_L04 lea ebx,[eax+8] mov ecx,[eax+4] M08_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M08_L05 sub ecx,edx cmp ecx,eax jb near ptr M08_L05 add ebx,edx mov ecx,eax M08_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M08_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M08_L06 mov byte ptr [ebx+eax],2C M08_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae short M08_L06 mov byte ptr [ebx+eax],22 mov ecx,[ebp+8] mov [ebp-24],ecx mov edx,[ebp+0C] mov [ebp-20],edx mov eax,edi mov ecx,[esi+1C] cmp ecx,eax ja short M08_L05 lea eax,[ebx+ecx] mov edx,edi sub edx,ecx push dword ptr [ebp-20] push dword ptr [ebp-24] push edx push eax push 0 push 1 lea ecx,[ebp-1C] lea edx,[ebp-18] call dword ptr ds:[0B78D3D8]; System.Text.Unicode.Utf8.FromUtf16(System.ReadOnlySpan`1, System.Span`1, Int32 ByRef, Int32 ByRef, Boolean, Boolean) mov eax,[esi+1C] add eax,[ebp-18] mov edx,eax mov [esi+1C],edx lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae short M08_L06 mov byte ptr [ebx+eax],22 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M08_L04: lea edx,[ebp-14] mov ecx,eax mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,[ebp-14] mov ecx,[ebp-10] jmp near ptr M08_L01 M08_L05: call dword ptr ds:[8BF5060] int 3 M08_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 280 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx mov esi,ecx mov edi,[ebp+0C] mov ecx,edi cmp ecx,9EF21AA jg short M09_L04 mov ebx,[ebp+8] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M09_L00 push edi push ebx mov ecx,esi mov edx,eax call dword ptr ds:[0B69D3D8] jmp short M09_L03 M09_L00: test byte ptr [esi+48],2 jne short M09_L01 mov ecx,esi call dword ptr ds:[0B69D198] M09_L01: test byte ptr [esi+48],1 je short M09_L02 push edi push ebx mov ecx,esi call dword ptr ds:[0B69D3C0] jmp short M09_L03 M09_L02: push edi push ebx mov ecx,esi call dword ptr ds:[0B69D3A8]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) M09_L03: or dword ptr [esi+18],80000000 mov byte ptr [esi+21],7 pop ebx pop esi pop edi pop ebp ret 8 M09_L04: call dword ptr ds:[0B69F108] int 3 ; Total bytes of code 125 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) push ebp mov ebp,esp push esi mov esi,ecx cmp dword ptr [esi+48],2 je short M10_L00 movzx edx,dl mov ecx,esi call dword ptr ds:[0B697B70] jmp short M10_L01 M10_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[0B697B58]; System.Text.Json.Utf8JsonWriter.WriteEndMinimized(Byte) M10_L01: mov eax,[esi+18] or eax,80000000 mov [esi+18],eax test eax,7FFFFFFF je short M10_L02 dec eax mov [esi+18],eax M10_L02: pop esi pop ebp ret ; Total bytes of code 61 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov esi,ecx mov ecx,[ebp+8] mov edx,[ebp+0C] cmp edx,9EF21AA jg short M11_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M11_L01 M11_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[0B69F210] M11_L01: mov edi,[ebp+8] mov ebx,[ebp+0C] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M11_L02 push ebx push edi push eax mov ecx,esi mov edx,7B call dword ptr ds:[0B697AF8] jmp near ptr M11_L07 M11_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M11_L05 cmp byte ptr [esi+20],0 je near ptr M11_L08 cmp byte ptr [esi+21],5 je near ptr M11_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M11_L03 mov ecx,eax mov edx,[ecx] mov ecx,[ecx+4] lea ebx,[edx+edx] shld ecx,edx,1 or ebx,1 or ecx,0 mov edx,eax mov [edx],ebx mov [edx+4],ecx jmp short M11_L04 M11_L03: mov ecx,eax mov edx,1 call dword ptr ds:[0B697558] mov eax,[ebp-14] M11_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],1 M11_L05: test byte ptr [esi+48],1 je short M11_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[0B6999F0] jmp short M11_L07 M11_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[0B6999D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M11_L07: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+21],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M11_L08: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 ; Total bytes of code 288 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStartArray(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,8 mov esi,ecx mov ecx,[ebp+8] mov edx,[ebp+0C] cmp edx,9EF21AA jg short M12_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M12_L01 M12_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[0B69F210] M12_L01: mov edi,[ebp+8] mov ebx,[ebp+0C] push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,[esi+40] call dword ptr ds:[0B781438]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M12_L02 push ebx push edi push eax mov ecx,esi mov edx,5B call dword ptr ds:[0B697AF8] jmp near ptr M12_L07 M12_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M12_L05 cmp byte ptr [esi+20],0 je near ptr M12_L08 cmp byte ptr [esi+21],5 je near ptr M12_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M12_L03 mov ecx,eax mov edx,[ecx] mov ecx,[ecx+4] lea ebx,[edx+edx] shld ecx,edx,1 mov edx,eax mov [edx],ebx mov [edx+4],ecx jmp short M12_L04 M12_L03: mov ecx,eax xor edx,edx call dword ptr ds:[0B697558] mov eax,[ebp-14] M12_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],0 M12_L05: test byte ptr [esi+48],1 je short M12_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[0B6999F0] jmp short M12_L07 M12_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[0B6999D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M12_L07: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+21],3 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M12_L08: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+21] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[0B69F3F0] int 3 ; Total bytes of code 279 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteNumberValue(Int64) push ebp mov ebp,esp push esi mov esi,ecx test byte ptr [esi+48],2 jne short M13_L00 mov ecx,esi call dword ptr ds:[0B69D198] M13_L00: test byte ptr [esi+48],1 je short M13_L01 push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[0B69D300] jmp short M13_L02 M13_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[0B69D2E8]; System.Text.Json.Utf8JsonWriter.WriteNumberValueMinimized(Int64) M13_L02: or dword ptr [esi+18],80000000 mov byte ptr [esi+21],8 pop esi pop ebp ret 8 ; Total bytes of code 72 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.Flush() push ebp mov ebp,esp push edi push esi push ebx push eax mov esi,ecx mov ecx,[esi+10] test ecx,ecx jne short M14_L00 cmp dword ptr [esi+0C],0 je near ptr M14_L06 M14_L00: xor edx,edx mov [esi+24],edx mov [esi+28],edx mov [esi+2C],edx test ecx,ecx je near ptr M14_L04 mov edx,[esi+1C] test edx,edx je near ptr M14_L03 mov ecx,[esi+14] cmp [ecx],ecx call dword ptr ds:[0B6481E0]; System.Buffers.ArrayBufferWriter`1[[System.Byte, System.Private.CoreLib]].Advance(Int32) xor ecx,ecx mov [esi+1C],ecx mov ecx,[esi+10] mov eax,[esi+14] mov edx,[eax+4] mov edi,[eax+8] test edx,edx je near ptr M14_L07 mov eax,[edx+4] cmp [edx+4],edi jb near ptr M14_L09 add edx,8 M14_L01: push edi push edx mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+1C] lea ecx,[esi+4] mov edx,[ecx] mov ecx,[ecx+4] mov edi,[esi+14] mov eax,[edi+8] mov [ebp-10],eax mov ebx,eax sar eax,1F add edx,ebx adc ecx,eax lea eax,[esi+4] mov [eax],edx mov [eax+4],ecx mov ecx,[edi+4] mov eax,[ebp-10] mov edx,eax test ecx,ecx je short M14_L08 mov eax,[ecx+4] cmp [ecx+4],edx jb short M14_L09 add ecx,8 M14_L02: call dword ptr ds:[851F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) xor ecx,ecx mov [edi+8],ecx M14_L03: mov ecx,[esi+10] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+18] pop ecx pop ebx pop esi pop edi pop ebp ret M14_L04: mov edx,[esi+1C] test edx,edx je short M14_L05 mov ecx,[esi+0C] call dword ptr ds:[2EE02E4] lea eax,[esi+4] mov edx,[eax] mov eax,[eax+4] mov ecx,[esi+1C] mov edi,ecx sar edi,1F add edx,ecx adc eax,edi lea ecx,[esi+4] mov [ecx],edx mov [ecx+4],eax xor eax,eax mov [esi+1C],eax M14_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M14_L06: call dword ptr ds:[0B69F570] int 3 M14_L07: test edi,edi jne short M14_L09 xor edx,edx xor edi,edi jmp near ptr M14_L01 M14_L08: test edx,edx jne short M14_L09 xor ecx,ecx xor edx,edx jmp short M14_L02 M14_L09: call dword ptr ds:[8BF5060] int 3 ; Total bytes of code 294 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.Dispose() push ebp mov ebp,esp push esi mov esi,ecx cmp dword ptr [esi+10],0 jne short M15_L00 cmp dword ptr [esi+0C],0 jne short M15_L00 pop esi pop ebp ret M15_L00: mov ecx,esi call dword ptr ds:[0B6978A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,esi call dword ptr ds:[0B697870]; System.Text.Json.Utf8JsonWriter.ResetHelper() xor eax,eax mov [esi+10],eax mov [esi+14],eax mov [esi+0C],eax pop esi pop ebp ret ; Total bytes of code 51 ``` #### System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16(Formatted: False, SkipValidation: False, DataSize: 10) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.0435373946477542 > 1028.2989566924073. IsChangePoint: Marked as a change because one of 10/24/2022 10:11:47 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.63338451732071 (T) = (0 -1057.7332938650861) / Math.Sqrt((241.76734993794733 / (32)) + (96.86367444137689 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07940382001260873 = (979.9236154757452 - 1057.7332938650861) / 979.9236154757452 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp push eax mov [ebp-4],ecx mov ecx,[ebp-4] cmp dword ptr [ecx+50],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0A32F558] M00_L00: mov esp,ebp pop ebp ret ; Total bytes of code 29 ``` ### Compare Jit Disasm ```assembly ; BenchmarkDotNet.Autogenerated.Runnable_0.__ForDisassemblyDiagnoser__() push ebp mov ebp,esp push eax mov [ebp-4],ecx mov ecx,[ebp-4] cmp dword ptr [ecx+50],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0AAF7558] M00_L00: mov esp,ebp pop ebp ret ; Total bytes of code 29 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)
performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Json.Serialization.Tests.WriteJson<Location>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SerializeToStream - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Location).SerializeToStream(Mode%3a%20Reflection).html>) 1.01 μs 1.07 μs 1.06 0.04 False
[SerializeToUtf8Bytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Location).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 723.28 ns 789.67 ns 1.09 0.03 False
[SerializeToWriter - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Json.Serialization.Tests.WriteJson(Location).SerializeToWriter(Mode%3a%20SourceGen).html>) 630.12 ns 697.63 ns 1.11 0.04 False

graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Json.Serialization.Tests.WriteJson&lt;Location&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<Location>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 1.0683951607339954 > 1038.6514660590092. IsChangePoint: Marked as a change because one of 12/11/2022 11:54:30 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -13.201357537051432 (T) = (0 -1071.9131807728052) / Math.Sqrt((360.17947959486816 / (32)) + (275.34976728842906 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06776242265155051 = (1003.8873423836617 - 1071.9131807728052) / 1003.8873423836617 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Location>.SerializeToUtf8Bytes(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 789.6726295977446 > 771.7701351388175. IsChangePoint: Marked as a change because one of 11/29/2022 11:48:02 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -26.289625899496695 (T) = (0 -786.4415629605762) / Math.Sqrt((81.19412478660165 / (32)) + (27.99526540126631 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.0725317631288354 = (733.257130461419 - 786.4415629605762) / 733.257130461419 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Location>.SerializeToWriter(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 697.6344449451705 > 662.6490624945117. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -37.73895610373948 (T) = (0 -685.4736940054214) / Math.Sqrt((16.779181423487362 / (32)) + (24.57156046399847 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08187315789906954 = (633.5989473447781 - 685.4736940054214) / 633.5989473447781 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Collections.ContainsKeyFalse<Int32, Int32>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[IDictionary - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Collections.ContainsKeyFalse(Int32%2c%20Int32).IDictionary(Size%3a%20512).html>) 7.38 μs 9.26 μs 1.25 0.61 False

graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Collections.ContainsKeyFalse&lt;Int32, Int32&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Collections.ContainsKeyFalse<Int32, Int32>.IDictionary(Size: 512) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 9.255096473231731 > 7.716535709247509. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -3.9930753250893236 (T) = (0 -8911.004935843526) / Math.Sqrt((325525.61159109016 / (32)) + (1209105.160115397 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.14236466818982654 = (7800.490669904705 - 8911.004935843526) / 7800.490669904705 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 279fb0436f475fbc35ffeff68330f970ee77831a
Compare 23059de6fbb664613c975131712559ccca50c702
Diff Diff

Regressions in System.Text.Tests.Perf_Encoding

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[GetBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetBytes(size%3a%2016%2c%20encName%3a%20%22ascii%22).html>) 27.62 ns 32.25 ns 1.17 0.03 False 299.74416273123654 337.040682492138 1.1244278434684418 Trace Trace
[GetBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetBytes(size%3a%20512%2c%20encName%3a%20%22utf-8%22).html>) 112.04 ns 131.56 ns 1.17 0.07 False 1082.7546951966292 1183.4742995788033 1.0930216279171925 Trace Trace
[GetString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetString(size%3a%20512%2c%20encName%3a%20%22ascii%22).html>) 86.43 ns 94.59 ns 1.09 0.01 False 674.0988142568667 712.619285805357 1.057143657181708 Trace Trace
[GetBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetBytes(size%3a%2016%2c%20encName%3a%20%22utf-8%22).html>) 29.57 ns 32.88 ns 1.11 0.06 False 301.86597661467897 338.45047337686606 1.1211945021842786 Trace Trace
[GetChars - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetChars(size%3a%20512%2c%20encName%3a%20%22ascii%22).html>) 85.05 ns 98.00 ns 1.15 0.03 False 670.3981470003534 706.0878776866492 1.053236618934564 Trace Trace
[GetChars - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetChars(size%3a%2016%2c%20encName%3a%20%22ascii%22).html>) 23.71 ns 28.72 ns 1.21 0.09 False 261.4679127586192 293.5499053294241 1.122699539810922 Trace Trace
[GetString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetString(size%3a%2016%2c%20encName%3a%20%22utf-8%22).html>) 26.94 ns 30.61 ns 1.14 0.06 False 261.43029485052614 298.23082904799884 1.1407661427246354 Trace Trace
[GetString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetString(size%3a%20512%2c%20encName%3a%20%22utf-8%22).html>) 102.83 ns 110.47 ns 1.07 0.10 False 880.8573558050633 927.2097421154841 1.0526218984321891 Trace Trace
[GetChars - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetChars(size%3a%20512%2c%20encName%3a%20%22utf-8%22).html>) 113.58 ns 125.40 ns 1.10 0.08 False 983.3970787707317 1041.4571102860941 1.059040272509187 Trace Trace
[GetString - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetString(size%3a%2016%2c%20encName%3a%20%22ascii%22).html>) 26.25 ns 33.27 ns 1.27 0.05 False 272.69886540260205 309.2109481397074 1.1338915828754927 Trace Trace
[GetBytes - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetBytes(size%3a%20512%2c%20encName%3a%20%22ascii%22).html>) 76.41 ns 86.85 ns 1.14 0.05 False 707.9836421985794 781.4037805815009 1.1037031564103965 Trace Trace
[GetByteCount - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetByteCount(size%3a%2016%2c%20encName%3a%20%22utf-8%22).html>) 13.67 ns 16.26 ns 1.19 0.12 False 160.10425794991406 172.89651963786383 1.0798995720148281 Trace Trace
[GetChars - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/System.Text.Tests.Perf_Encoding.GetChars(size%3a%2016%2c%20encName%3a%20%22utf-8%22).html>) 35.40 ns 43.82 ns 1.24 0.02 False 358.90756357627185 414.74911919983725 1.155587569866575 Trace Trace

graph graph graph graph graph graph graph graph graph graph graph graph graph Test Report

Repro

git clone https://github.com/dotnet/performance.git
py .\performance\scripts\benchmarks_ci.py -f net8.0 --filter 'System.Text.Tests.Perf_Encoding*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Tests.Perf_Encoding.GetBytes(size: 16, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 32.251492005657745 > 28.989257106902638. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -33.07151570626312 (T) = (0 -32.530461668353425) / Math.Sqrt((0.09869972758392637 / (32)) + (0.3103731603702393 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.16951572834016246 = (27.81532636121307 - 32.530461668353425) / 27.81532636121307 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetBytes(size: 512, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 131.56278903236165 > 120.59804575712553. IsChangePoint: Marked as a change because one of 10/17/2022 8:10:07 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -23.740980821861413 (T) = (0 -132.2631509337158) / Math.Sqrt((3.3260192065587275 / (32)) + (9.047133312610855 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.16251525152158802 = (113.77326083300822 - 132.2631509337158) / 113.77326083300822 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetString(size: 512, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 94.58768456032064 > 91.8437588946984. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.983940313545826 (T) = (0 -94.10830507584586) / Math.Sqrt((1.3246383315480177 / (32)) + (0.6808503368671502 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07037716140373197 = (87.92069605860122 - 94.10830507584586) / 87.92069605860122 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetBytes(size: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 32.87514949992376 > 31.93493235277391. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -21.757827067215015 (T) = (0 -33.006144073237074) / Math.Sqrt((0.16410194432472636 / (32)) + (0.18135338764481834 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08847247346786548 = (30.323361295559213 - 33.006144073237074) / 30.323361295559213 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetChars(size: 512, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 98.00040729833702 > 89.90132210801899. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.91027099470414 (T) = (0 -91.43330527058858) / Math.Sqrt((0.7868375917011649 / (32)) + (4.3488878064034795 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.06560326065267777 = (85.80426566505253 - 91.43330527058858) / 85.80426566505253 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetChars(size: 16, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 28.721416506197297 > 25.25074753526846. IsChangePoint: Marked as a change because one of 11/13/2022 8:13:15 AM, 11/13/2022 11:44:30 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -63.22227115761452 (T) = (0 -28.738334025107935) / Math.Sqrt((0.10203845365623826 / (32)) + (0.045635968009363655 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.19967472073835407 = (23.9551051033405 - 28.738334025107935) / 23.9551051033405 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetString(size: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 30.610491027853836 > 27.88574100538456. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -16.35686352591617 (T) = (0 -31.260728608471766) / Math.Sqrt((0.28443114424247345 / (32)) + (1.247664439913941 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.1714034670566882 = (26.686559744456478 - 31.260728608471766) / 26.686559744456478 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetString(size: 512, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 110.4653321725005 > 107.9926583442996. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -14.41587017713761 (T) = (0 -111.93404324261188) / Math.Sqrt((4.331287631053938 / (32)) + (3.7285502901910856 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.08151508858518533 = (103.49744023362778 - 111.93404324261188) / 103.49744023362778 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetChars(size: 512, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 125.39730518584007 > 119.15073243480025. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -13.25681521541958 (T) = (0 -122.33227259160822) / Math.Sqrt((2.6725001551448027 / (32)) + (5.78403960481343 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.07405829482115973 = (113.89723740458392 - 122.33227259160822) / 113.89723740458392 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetString(size: 16, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 33.27375829910817 > 27.678527170608707. IsChangePoint: Marked as a change because one of 10/7/2022 9:25:17 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -53.890822673612256 (T) = (0 -32.89765792381078) / Math.Sqrt((0.22137738962255663 / (32)) + (0.11944634342233684 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.23565725750767091 = (26.62361081434959 - 32.89765792381078) / 26.62361081434959 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetString() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+3C] call dword ptr [eax+14] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetBytes(size: 512, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 86.85329668359395 > 80.69030838271307. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -18.158925940355264 (T) = (0 -85.30461185454601) / Math.Sqrt((1.9359187461420924 / (32)) + (2.0463645954016356 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.09750546176168433 = (77.725911010609 - 85.30461185454601) / 77.725911010609 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetBytes() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+0C] mov eax,[ecx] mov eax,[eax+34] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetByteCount(size: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 16.260838608136897 > 14.144435631072731. IsChangePoint: Marked as a change because one of 10/7/2022 9:25:17 PM, 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -10.304273528499333 (T) = (0 -15.486765417836178) / Math.Sqrt((0.06783604708284668 / (32)) + (0.7896576315827759 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.166436359403301 = (13.276991318890767 - 15.486765417836178) / 13.276991318890767 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetByteCount() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+14] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetByteCount() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+14] mov eax,[ecx] mov eax,[eax+30] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` #### System.Text.Tests.Perf_Encoding.GetChars(size: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsRegressionBase: Marked as regression because the compare was 5% greater than the baseline, and the value was not too small. IsRegressionChecked: Marked as regression because the three check build points were 0.05 greater than the baseline. IsRegressionWindowed: Marked as regression because 43.82104347620365 > 37.280371416323874. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 12/26/2022 8:24:36 PM falls between 12/17/2022 10:44:50 PM and 12/26/2022 8:24:36 PM. IsRegressionStdDev: Marked as regression because -44.93276281691927 (T) = (0 -43.92919956365722) / Math.Sqrt((0.1720283403409575 / (32)) + (0.511790766941403 / (18))) is less than -2.010634757623041 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (32) + (18) - 2, .025) and -0.231636279586692 = (35.66734781342981 - 43.92919956365722) / 35.66734781342981 is less than -0.05. IsImprovementBase: Marked as not an improvement because the compare was not 5% less than the baseline, or the value was too small. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Compare Jit Disasm ```assembly ; System.Text.Tests.Perf_Encoding.GetChars() push ebp mov ebp,esp mov edx,ecx mov ecx,[edx+8] mov edx,[edx+10] mov eax,[ecx] mov eax,[eax+38] call dword ptr [eax+8] pop ebp ret ; Total bytes of code 21 ``` ### Docs [Profiling workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/profiling-workflow-dotnet-runtime.md) [Benchmarking workflow for dotnet/runtime repository](https://github.com/dotnet/performance/blob/master/docs/benchmarking-workflow-dotnet-runtime.md)