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: 32 Improvements on 1/18/2023 1:01:18 AM #12029

Open performanceautofiler[bot] opened 1 year ago

performanceautofiler[bot] commented 1 year ago

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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>) 32.44 μs 30.25 μs 0.93 0.04 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>) 16.49 μs 15.01 μs 0.91 0.04 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(ImmutableDictionary(String%2c%20String)).SerializeToStream(Mode%3a%20Reflection).html>) 30.60 μs 28.51 μs 0.93 0.02 False

graph_1.png>) graph_2.png>) graph_3.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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 30.250209137709138 < 30.586635844110667. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 16.302950254125328 (T) = (0 -30034.598098431386) / Math.Sqrt((1302250.0902242505 / (245)) + (172234.34956885997 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.050825530877106756 = (31642.86343077217 - 30034.598098431386) / 31642.86343077217 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 15.011432741522714 < 15.672336348380206. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.92191036557055 (T) = (0 -14933.824074027332) / Math.Sqrt((566895.759774991 / (245)) + (16634.744184432686 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05286201980168402 = (15767.31625829261 - 14933.824074027332) / 15767.31625829261 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<ImmutableDictionary<String, String>>.SerializeToStream(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 28.50513458029197 < 29.39136144225397. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 19.371999762957245 (T) = (0 -28933.91782136133) / Math.Sqrt((610452.2250333712 / (244)) + (182351.72312805633 / (39))) is greater than 1.968442091833948 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (244) + (39) - 2, .975) and 0.05367771813506311 = (30575.12052272579 - 28933.91782136133) / 30575.12052272579 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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%20False%2c%20DataSize%3a%2010).html>) 1.06 μs 970.91 ns 0.91 0.03 False 9844.919418626923 9243.025326275258 0.9388624663384383 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%20True%2c%20DataSize%3a%2010).html>) 1.02 μs 894.98 ns 0.88 0.02 False 9379.926544814107 8777.036853292087 0.935725542343896 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: False, DataSize: 10) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 970.9050021674492 < 1.0492446338084407. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 14.509890840519864 (T) = (0 -962.2639219358706) / Math.Sqrt((3230.327951806442 / (299)) + (171.8259168239431 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.05554072889875766 = (1018.8516872875502 - 962.2639219358706) / 1018.8516872875502 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_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:[840F3A8]; 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:[8B39330]; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],1 mov edi,8457040 add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B671D80] 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:[8B3B720] 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:[8B3B7B0] 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:[8B3B780] jmp short M00_L08 M00_L10: mov edi,8457010 add edi,8 mov ebx,8457628 add ebx,8 push 4 push ebx mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B671D80] mov [ebp-24],eax push 5 push edi mov ecx,[ebp-28] mov edx,[ecx+40] mov ecx,edx call dword ptr ds:[0B671D80] 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:[8B3D048] 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:[8B3F9D8] 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:[8B3F9D8] 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:[8B3F9D8] 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:[8B3F9D8] 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:[8B3D168] jmp near ptr M00_L11 M00_L19: push 5 push edi push 4 push ebx call dword ptr ds:[8B3D108] jmp near ptr M00_L11 M00_L20: mov eax,8457028 add eax,8 mov edx,8457640 add edx,8 push 4 push eax push 5 push edx call dword ptr ds:[8B3BBE8] mov ecx,[ebp-28] mov edx,[ecx+18] or edx,80000000 mov [ecx+18],edx mov byte ptr [ecx+21],7 mov edi,8457054 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:[8B3F7F8] mov ecx,[ebp-28] M00_L21: push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B671D80] cmp eax,0FFFFFFFF je short M00_L22 push 0C push edi push eax mov ecx,[ebp-28] mov edx,5B call dword ptr ds:[8B394F8] 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:[8B37F30] 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:[8B3B3F0] jmp short M00_L27 M00_L26: push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[8B3B3D8]; 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,8457658 add edi,8 push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B671D80] cmp eax,0FFFFFFFF je short M00_L28 push 0C push edi mov ecx,[ebp-28] mov edx,eax call dword ptr ds:[8B3D9D8] jmp short M00_L31 M00_L28: mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L29 call dword ptr ds:[8B3D798] mov ecx,[ebp-28] M00_L29: test byte ptr [ecx+48],1 je short M00_L30 push 0C push edi call dword ptr ds:[8B3D9C0] jmp short M00_L31 M00_L30: push 0C push edi call dword ptr ds:[8B3D9A8] M00_L31: mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,8457680 add eax,8 push 0C push eax call dword ptr ds:[8B3D960] mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[8B39540] mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov eax,845707C add eax,8 push 7 push eax call dword ptr ds:[8B394B0]; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) mov ecx,8457098 add ecx,8 mov eax,84576A8 add eax,8 push 6 push ecx push 0F push eax mov ecx,[ebp-28] call dword ptr ds:[8B3BBE8] mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov eax,84570B4 add eax,8 mov edx,84576D4 add edx,8 push 4 push eax push 7 push edx call dword ptr ds:[8B3BBE8] mov ecx,[ebp-28] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+21],7 mov edi,84570CC add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B671D80] 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:[8B3B720] 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:[8B3B7B0] jmp short M00_L35 M00_L34: push 3 push edi push 0 push 17F04 call dword ptr ds:[8B3B780] 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:[8B39540] mov ecx,[ebp-28] mov byte ptr [ecx+21],2 mov eax,8456FEC add eax,8 push 0A push eax call dword ptr ds:[8B39498]; 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:[8B3D8D0] inc edi cmp edi,[esi+30] jl short M00_L36 M00_L37: mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[8B39540] mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov edx,7D call dword ptr ds:[8B39540] mov ecx,[ebp-28] mov byte ptr [ecx+21],2 call dword ptr ds:[8B392A0] mov ecx,[ebp-28] call dword ptr ds:[0B56F4EC] jmp short M00_L38 mov ecx,[ebp-28] call dword ptr ds:[0B56F4EC] 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:[8AF5060] int 3 M00_L41: mov ecx,3124 mov edx,0B56BA80 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8B3F600] 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_L15 xor edi,edi mov eax,ecx test al,3 jne near ptr M01_L16 M01_L02: mov eax,ecx dec eax test al,4 je short M01_L10 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_L13 M01_L06: test dl,2 jne short M01_L11 M01_L07: test dl,1 jne short M01_L12 M01_L08: pop ebx pop esi pop edi pop ebp ret M01_L09: cmp esi,0B jne short M01_L14 xor edx,edx mov [ecx],edx mov [ecx+4],edx mov [ecx+8],edx jmp short M01_L08 M01_L10: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L03 M01_L11: mov word ptr [ecx+edi],0 add edi,2 jmp short M01_L07 M01_L12: mov byte ptr [ecx+edi],0 jmp short M01_L08 M01_L13: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L06 M01_L14: cmp esi,15 ja near ptr M01_L01 lea eax,ds:[0B5A7B00] 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 near ptr 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 [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 mov byte ptr [ecx+12],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_L15: call dword ptr ds:[8A31498] 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 [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 [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 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 [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 byte ptr [ecx+10],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_L16: mov eax,ecx test al,1 je short M01_L17 mov byte ptr [ecx],0 mov edi,1 mov eax,ecx test al,2 jne near ptr M01_L02 M01_L17: 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 635 ``` ```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:[8B39360]; System.Text.Json.Utf8JsonWriter.WriteStartSlow(Byte) jmp short M02_L01 M02_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[8B39348] 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:[8B3F9D8] int 3 ; Total bytes of code 91 ``` ```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 M03_L00 mov ecx,esi call dword ptr ds:[8B395E8] M03_L00: lea edi,[esi+24] xor ecx,ecx xor edx,edx mov eax,[edi] test eax,eax je short M03_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M03_L04 lea ecx,[eax+8] mov edx,[eax+4] M03_L01: mov eax,[edi+4] and eax,7FFFFFFF mov edi,[edi+8] cmp eax,edx ja near ptr M03_L05 sub edx,eax cmp edx,edi jb near ptr M03_L05 add ecx,eax mov edx,edi M03_L02: mov edi,ecx mov eax,edx mov [ebp-24],eax cmp dword ptr [esi+18],0 jge short M03_L03 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M03_L06 mov byte ptr [edi+edx],2C M03_L03: mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M03_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 M03_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:[0B67F3C0]; 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 M03_L06 mov byte ptr [edi+edx],22 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M03_L06 mov byte ptr [edi+edx],3A mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M03_L06 mov ebx,[ebp-10] mov [edi+edx],bl lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M03_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 M03_L01 M03_L05: call dword ptr ds:[8AF5060] int 3 M03_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 334 ``` ```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 M04_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M04_L01 M04_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[8B3F7F8] M04_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:[0B671D80] cmp eax,0FFFFFFFF je short M04_L02 push ebx push edi push eax mov ecx,esi mov edx,7B call dword ptr ds:[8B394F8] jmp near ptr M04_L07 M04_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M04_L05 cmp byte ptr [esi+20],0 je near ptr M04_L08 cmp byte ptr [esi+21],5 je near ptr M04_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M04_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 M04_L04 M04_L03: mov ecx,eax mov edx,1 call dword ptr ds:[8B37F30] mov eax,[ebp-14] M04_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],1 M04_L05: test byte ptr [esi+48],1 je short M04_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[8B3B3F0] jmp short M04_L07 M04_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[8B3B3D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M04_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 M04_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:[8B3F9D8] 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 M05_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M05_L01 M05_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[8B3F7F8] M05_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:[0B671D80] cmp eax,0FFFFFFFF je short M05_L02 push ebx push edi push eax mov ecx,esi mov edx,5B call dword ptr ds:[8B394F8] jmp near ptr M05_L07 M05_L02: mov [ebp-10],ebx test byte ptr [esi+48],2 jne short M05_L05 cmp byte ptr [esi+20],0 je near ptr M05_L08 cmp byte ptr [esi+21],5 je near ptr M05_L08 lea eax,[esi+30] mov [ebp-14],eax cmp dword ptr [eax+0C],40 jge short M05_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 M05_L04 M05_L03: mov ecx,eax xor edx,edx call dword ptr ds:[8B37F30] mov eax,[ebp-14] M05_L04: inc dword ptr [eax+0C] mov byte ptr [esi+20],0 M05_L05: test byte ptr [esi+48],1 je short M05_L06 push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[8B3B3F0] jmp short M05_L07 M05_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[8B3B3D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M05_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 M05_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:[8B3F9D8] int 3 ; Total bytes of code 279 ``` ### 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:[0A6BF450] M00_L00: mov esp,ebp pop ebp ret ; Total bytes of code 29 ``` #### System.Text.Json.Tests.Perf_Basic.WriteBasicUtf16(Formatted: False, SkipValidation: True, DataSize: 10) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 894.9807786631183 < 0.9674353415602006. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 18.667237951074334 (T) = (0 -912.6381366745316) / Math.Sqrt((2438.571193337339 / (299)) + (199.78734478876783 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.069364271192296 = (980.6609701561423 - 912.6381366745316) / 980.6609701561423 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```### Baseline Jit Disasm ```assembly ; System.Text.Json.Tests.Perf_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:[89AF3A8]; 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:[90D9330]; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],1 mov edi,89F7040 add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0BC11D80]; 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:[90DB720] 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:[90DB7B0] 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:[90DB780]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) jmp short M00_L08 M00_L10: mov edi,89F7010 add edi,8 mov ebx,89F7628 add ebx,8 push 4 push ebx mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0BC11D80]; 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:[0BC11D80]; 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:[90DD048] 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:[90DF9D8] 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:[90DF9D8] 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:[90DF9D8] 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:[90DF9D8] 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:[90DD168] jmp near ptr M00_L11 M00_L19: push 5 push edi push 4 push ebx call dword ptr ds:[90DD108]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) jmp near ptr M00_L11 M00_L20: mov eax,89F7028 add eax,8 mov edx,89F7640 add edx,8 push 4 push eax push 5 push edx call dword ptr ds:[90DBBE8]; 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,89F7054 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:[90DF7F8] mov ecx,[ebp-28] M00_L21: push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0BC11D80]; 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:[90D94F8] 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:[90D7F30] 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:[90DB3F0] jmp short M00_L27 M00_L26: push 0C push dword ptr [ebp-2C] mov edx,5B call dword ptr ds:[90DB3D8]; 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,89F7658 add edi,8 push 0C push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0BC11D80]; 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:[90DD9D8] jmp short M00_L31 M00_L28: mov ecx,[ebp-28] test byte ptr [ecx+48],2 jne short M00_L29 call dword ptr ds:[90DD798] mov ecx,[ebp-28] M00_L29: test byte ptr [ecx+48],1 je short M00_L30 push 0C push edi call dword ptr ds:[90DD9C0] jmp short M00_L31 M00_L30: push 0C push edi call dword ptr ds:[90DD9A8]; 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,89F7680 add eax,8 push 0C push eax call dword ptr ds:[90DD960]; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) mov ecx,[ebp-28] mov edx,5D call dword ptr ds:[90D9540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov eax,89F707C add eax,8 push 7 push eax call dword ptr ds:[90D94B0]; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) mov ecx,89F7098 add ecx,8 mov eax,89F76A8 add eax,8 push 6 push ecx push 0F push eax mov ecx,[ebp-28] call dword ptr ds:[90DBBE8]; 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,89F70B4 add eax,8 mov edx,89F76D4 add edx,8 push 4 push eax push 7 push edx call dword ptr ds:[90DBBE8]; 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,89F70CC add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0BC11D80]; 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:[90DB720] 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:[90DB7B0] jmp short M00_L35 M00_L34: push 3 push edi push 0 push 17F04 call dword ptr ds:[90DB780]; 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:[90D9540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 mov eax,89F6FEC add eax,8 push 0A push eax call dword ptr ds:[90D9498]; 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:[90DD8D0]; 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:[90D9540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],4 mov edx,7D call dword ptr ds:[90D9540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-28] mov byte ptr [ecx+21],2 call dword ptr ds:[90D92A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,[ebp-28] call dword ptr ds:[0BB0F4EC]; System.Text.Json.Utf8JsonWriter.Dispose() jmp short M00_L38 mov ecx,[ebp-28] call dword ptr ds:[0BB0F4EC]; 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:[9095060] int 3 M00_L41: mov ecx,3124 mov edx,0BB0BA80 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[90DF600] 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_L15 xor edi,edi mov eax,ecx test al,3 jne near ptr M01_L16 M01_L02: mov eax,ecx dec eax test al,4 je short M01_L10 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_L13 M01_L06: test dl,2 jne short M01_L11 M01_L07: test dl,1 jne short M01_L12 M01_L08: pop ebx pop esi pop edi pop ebp ret M01_L09: cmp esi,0B jne short M01_L14 xor edx,edx mov [ecx],edx mov [ecx+4],edx mov [ecx+8],edx jmp short M01_L08 M01_L10: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L03 M01_L11: mov word ptr [ecx+edi],0 add edi,2 jmp short M01_L07 M01_L12: mov byte ptr [ecx+edi],0 jmp short M01_L08 M01_L13: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L06 M01_L14: cmp esi,15 ja near ptr M01_L01 lea eax,ds:[0BB47260] 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 near ptr 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 [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 mov byte ptr [ecx+12],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_L15: call dword ptr ds:[8FD1498] 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 [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 [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 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 [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 byte ptr [ecx+10],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_L16: mov eax,ecx test al,1 je short M01_L17 mov byte ptr [ecx],0 mov edi,1 mov eax,ecx test al,2 jne near ptr M01_L02 M01_L17: 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 635 ``` ```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:[90D9360] jmp short M02_L01 M02_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[90D9348]; 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:[90DF9D8] 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:[77656C8] 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:[90D95E8]; 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_L21 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_L22 sub ecx,edx cmp ecx,eax jb near ptr M04_L22 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_L23 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_L23 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_L22 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:[0BC1F3C0]; 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_L23 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_L23 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] cmp eax,edi ja near ptr M04_L22 add ebx,eax sub edi,eax cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M04_L06 test edi,edi jne short M04_L05 M04_L04: xor eax,eax mov [ebp-10],eax jmp near ptr M04_L20 M04_L05: mov eax,[ebp+8] add eax,30 mov [ebx],al mov dword ptr [ebp-10],1 jmp near ptr M04_L20 M04_L06: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M04_L16 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M04_L16 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+6B187C34] mov edi,[edx] mov edx,[edx+4] add edi,ecx adc edx,0 mov edi,edx cmp edi,eax jge short M04_L04 test eax,eax je near ptr M04_L23 mov byte ptr [ebx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M04_L22 dec eax cmp edi,eax ja near ptr M04_L22 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_L23 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_L23 add edx,30 mov [eax],dl jmp near ptr M04_L20 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+6B187C34] mov ebx,[edx] mov edx,[edx+4] add ebx,ecx adc edx,0 mov ebx,edx cmp ebx,eax jg near ptr M04_L04 mov [ebp-10],ebx cmp ebx,eax ja near ptr M04_L22 mov edx,ecx mov [ebp-3C],edi mov [ebp-30],ebx lea ecx,[ebx-1] test ecx,ecx jle short M04_L15 M04_L12: 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_L23 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_L14 M04_L13: cmp dword ptr [ebp-30],0 jbe near ptr M04_L23 lea ecx,[edx+30] mov [edi],cl jmp near ptr M04_L20 M04_L14: mov [ebp-3C],edi mov ebx,[ebp-30] jmp short M04_L12 M04_L15: mov edi,[ebp-3C] jmp short M04_L13 M04_L16: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M04_L18 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M04_L18 cmp dword ptr [ebp+0C],0 jl short M04_L17 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0BC1F348] jmp short M04_L20 M04_L17: 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:[0BC1F288] jmp short M04_L20 M04_L18: cmp dword ptr [ebp+0C],0 jl short M04_L19 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0BC1F360] jmp short M04_L20 M04_L19: 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:[0BC1F2A0] M04_L20: 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_L21: 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_L22: call dword ptr ds:[9095060] int 3 M04_L23: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 887 ``` ```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:[90D95E8]; 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:[0BC1F3C0]; 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:[0BC1F3C0]; 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:[9095060] 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:[0BC11D80]; 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:[0BC11D80]; 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:[90DD048] 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:[90DD168] jmp short M06_L03 M06_L02: push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[90DD108]; 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:[90DF9D8] 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:[90D95E8]; 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:[0BC1F3C0]; 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:[9095060] 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:[90D95E8]; 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:[0BC1F3C0]; 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:[9095060] 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:[0BC11D80]; 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:[90DD9D8] jmp short M09_L03 M09_L00: test byte ptr [esi+48],2 jne short M09_L01 mov ecx,esi call dword ptr ds:[90DD798] M09_L01: test byte ptr [esi+48],1 je short M09_L02 push edi push ebx mov ecx,esi call dword ptr ds:[90DD9C0] jmp short M09_L03 M09_L02: push edi push ebx mov ecx,esi call dword ptr ds:[90DD9A8]; 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:[90DF6F0] 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:[90D9570] jmp short M10_L01 M10_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[90D9558]; 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:[90DF7F8] 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:[0BC11D80]; 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:[90D94F8] 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:[90D7F30] 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:[90DB3F0] jmp short M11_L07 M11_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,7B call dword ptr ds:[90DB3D8]; 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:[90DF9D8] 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:[90DF7F8] 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:[0BC11D80]; 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:[90D94F8] 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:[90D7F30] 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:[90DB3F0] jmp short M12_L07 M12_L06: push dword ptr [ebp-10] push edi mov ecx,esi mov edx,5B call dword ptr ds:[90DB3D8]; 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:[90DF9D8] 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:[90DD798] 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:[90DD900] jmp short M13_L02 M13_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[90DD8E8]; 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:[0BAC54BC]; 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:[89AF3A8]; 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:[54302E4] 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:[90DFB58] 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:[9095060] 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:[90D92A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,esi call dword ptr ds:[90D9270]; 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,48 vxorps xmm4,xmm4,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 esi,ecx mov edi,[esi+4] mov ecx,[edi+4] mov edx,[edi+8] test ecx,ecx je near ptr M00_L40 mov eax,[ecx+4] cmp [ecx+4],edx jb near ptr M00_L41 add ecx,8 M00_L00: call dword ptr ds:[872F3A8]; 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_L42 lea edx,[ecx+0C] call CORINFO_HELP_ASSIGN_REF_EDI lea edi,[ecx+40] mov edx,edi xor ebx,ebx mov [edx],ebx mov [edx+4],ebx mov [edx+8],eax cmp dword ptr [ecx+44],0 jne short M00_L05 mov dword ptr [ecx+44],3E8 M00_L05: mov [ebp-3C],ecx mov edx,7B call dword ptr ds:[8E39330]; System.Text.Json.Utf8JsonWriter.WriteStart(Byte) mov ecx,[ebp-3C] mov byte ptr [ecx+22],1 mov ebx,8757040 add ebx,8 mov edx,edi mov edx,[edx] mov eax,ebx mov [ebp-24],eax mov [ebp-28],eax test edx,edx jne short M00_L07 mov ecx,0B86F4E8 mov edx,19 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov edx,ds:[75456C0] mov eax,[ebp-28] M00_L06: push 3 mov [ebp-40],edx mov ecx,edx mov edx,eax mov eax,[ebp-40] mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] mov edx,eax xor ecx,ecx mov [ebp-24],ecx cmp edx,0FFFFFFFF je short M00_L08 push 3 push ebx push 0 push 2A mov ecx,[ebp-3C] call dword ptr ds:[8E3B720] jmp short M00_L10 M00_L07: mov eax,[ebp-28] jmp short M00_L06 M00_L08: mov ecx,[ebp-3C] mov eax,[ecx+48] test al,2 jne short M00_L09 cmp byte ptr [ecx+20],0 je near ptr M00_L19 cmp byte ptr [ecx+22],5 je near ptr M00_L19 M00_L09: test al,1 je short M00_L11 push 3 push ebx push 0 push 2A call dword ptr ds:[8E3B7B0] M00_L10: mov ecx,[ebp-3C] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+22],8 jmp short M00_L12 M00_L11: push 3 push ebx push 0 push 2A call dword ptr ds:[8E3B780]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) jmp short M00_L10 M00_L12: mov ebx,8757010 add ebx,8 mov eax,8757628 add eax,8 mov [ebp-50],ebx mov [ebp-4C],eax mov edx,edi mov edx,[edx] mov ebx,eax mov [ebp-2C],ebx test edx,edx jne short M00_L13 mov ecx,0B86F4E8 mov edx,19 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov edx,ds:[75456C0] M00_L13: push 4 mov [ebp-44],edx mov ecx,edx mov edx,ebx mov ebx,[ebp-44] mov ebx,[ebx] mov ebx,[ebx+28] call dword ptr [ebx+14] mov ebx,eax xor ecx,ecx mov [ebp-2C],ecx mov ecx,edi mov ecx,[ecx] mov eax,[ebp-50] mov edx,eax mov [ebp-30],edx mov [ebp-34],edx test ecx,ecx jne short M00_L14 mov ecx,0B86F4E8 mov edx,19 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov ecx,ds:[75456C0] M00_L14: push 5 mov edx,[ebp-34] mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov edx,eax xor ecx,ecx mov [ebp-30],ecx lea ecx,[ebx+edx] cmp ecx,0FFFFFFFE je near ptr M00_L21 push 5 push dword ptr [ebp-50] push 4 push dword ptr [ebp-4C] push ebx mov ecx,[ebp-3C] call dword ptr ds:[8E3D048] M00_L15: mov ecx,[ebp-3C] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+22],7 jmp near ptr M00_L24 M00_L16: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+22] push edx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 M00_L17: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+22] push edx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 M00_L18: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+22] push edx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 M00_L19: push dword ptr [ecx+44] push 0 movzx edx,byte ptr [ecx+22] push edx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 M00_L20: call CORINFO_HELP_RNGCHKFAIL M00_L21: mov ebx,[ebp-50] mov eax,[ebp-4C] mov ecx,[ebp-3C] mov edx,[ecx+48] test dl,2 jne short M00_L22 cmp byte ptr [ecx+20],0 je short M00_L16 cmp byte ptr [ecx+22],5 je near ptr M00_L16 M00_L22: test dl,1 je short M00_L23 push 5 push ebx push 4 push eax call dword ptr ds:[8E3D168] jmp near ptr M00_L15 M00_L23: push 5 push ebx push 4 push eax call dword ptr ds:[8E3D108]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) jmp near ptr M00_L15 M00_L24: mov eax,8757028 add eax,8 mov edx,8757640 add edx,8 push 4 push eax push 5 push edx call dword ptr ds:[8E3BBE8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-3C] mov edx,[ecx+18] or edx,80000000 mov [ecx+18],edx mov byte ptr [ecx+22],7 mov ebx,8757054 add ebx,8 mov eax,edx and eax,7FFFFFFF cmp eax,[ecx+44] jl short M00_L25 push 0C push ebx mov eax,[ecx+44] mov ecx,edx mov edx,eax call dword ptr ds:[8E3F7F8] mov ecx,[ebp-3C] M00_L25: mov edx,[edi] mov edi,ebx mov [ebp-38],edi test edx,edx jne short M00_L26 mov ecx,0B86F4E8 mov edx,19 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov edx,ds:[75456C0] M00_L26: push 0C mov [ebp-48],edx mov ecx,edx mov edx,edi mov eax,[ebp-48] mov eax,[eax] mov eax,[eax+28] call dword ptr [eax+14] xor ecx,ecx mov [ebp-38],ecx cmp eax,0FFFFFFFF je short M00_L27 push 0C push ebx push eax mov ecx,[ebp-3C] mov edx,5B call dword ptr ds:[8E394F8] jmp short M00_L32 M00_L27: mov [ebp-54],ebx mov ecx,[ebp-3C] test byte ptr [ecx+48],2 jne short M00_L30 cmp byte ptr [ecx+20],0 je near ptr M00_L18 cmp byte ptr [ecx+22],5 je near ptr M00_L18 lea edi,[ecx+30] cmp dword ptr [edi+0C],40 jge short M00_L28 mov edx,edi mov eax,[edx] mov edx,[edx+4] lea ebx,[eax+eax] shld edx,eax,1 mov eax,edi mov [eax],ebx mov [eax+4],edx jmp short M00_L29 M00_L28: mov ecx,edi xor edx,edx call dword ptr ds:[8E37F30] M00_L29: inc dword ptr [edi+0C] mov ecx,[ebp-3C] mov byte ptr [ecx+20],0 M00_L30: test byte ptr [ecx+48],1 je short M00_L31 push 0C push dword ptr [ebp-54] mov edx,5B call dword ptr ds:[8E3B3F0] jmp short M00_L32 M00_L31: push 0C push dword ptr [ebp-54] mov edx,5B call dword ptr ds:[8E3B3D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M00_L32: mov ecx,[ebp-3C] mov eax,[ecx+18] and eax,7FFFFFFF mov [ecx+18],eax inc eax mov [ecx+18],eax mov byte ptr [ecx+22],3 mov eax,8757658 add eax,8 push 0C push eax call dword ptr ds:[8E3D960]; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) mov ecx,8757680 add ecx,8 push 0C push ecx mov ecx,[ebp-3C] call dword ptr ds:[8E3D960]; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) mov ecx,[ebp-3C] mov edx,5D call dword ptr ds:[8E39540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-3C] mov byte ptr [ecx+22],4 mov eax,875707C add eax,8 push 7 push eax call dword ptr ds:[8E394B0]; System.Text.Json.Utf8JsonWriter.WriteStartObject(System.ReadOnlySpan`1) mov ecx,8757098 add ecx,8 mov eax,87576A8 add eax,8 push 6 push ecx push 0F push eax mov ecx,[ebp-3C] call dword ptr ds:[8E3BBE8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-3C] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+22],7 mov eax,87570B4 add eax,8 mov edx,87576D4 add edx,8 push 4 push eax push 7 push edx call dword ptr ds:[8E3BBE8]; System.Text.Json.Utf8JsonWriter.WriteStringEscape(System.ReadOnlySpan`1, System.ReadOnlySpan`1) mov ecx,[ebp-3C] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+22],7 mov edi,87570CC add edi,8 push 3 push edi mov eax,[ecx+40] mov ecx,eax call dword ptr ds:[0B971D80]; System.Text.Json.JsonWriterHelper.NeedsEscaping(System.ReadOnlySpan`1, System.Text.Encodings.Web.JavaScriptEncoder) cmp eax,0FFFFFFFF je short M00_L33 push 3 push edi push 0 push 17F04 mov ecx,[ebp-3C] mov edx,eax call dword ptr ds:[8E3B720] jmp short M00_L36 M00_L33: mov ecx,[ebp-3C] mov eax,[ecx+48] test al,2 jne short M00_L34 cmp byte ptr [ecx+20],0 je near ptr M00_L17 cmp byte ptr [ecx+22],5 je near ptr M00_L17 M00_L34: test al,1 je short M00_L35 push 3 push edi push 0 push 17F04 call dword ptr ds:[8E3B7B0] jmp short M00_L36 M00_L35: push 3 push edi push 0 push 17F04 call dword ptr ds:[8E3B780]; System.Text.Json.Utf8JsonWriter.WriteNumberMinimized(System.ReadOnlySpan`1, Int64) M00_L36: mov ecx,[ebp-3C] or dword ptr [ecx+18],80000000 mov byte ptr [ecx+22],8 mov edx,7D call dword ptr ds:[8E39540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-3C] mov byte ptr [ecx+22],2 mov eax,8756FEC add eax,8 push 0A push eax call dword ptr ds:[8E39498]; System.Text.Json.Utf8JsonWriter.WriteStartArray(System.ReadOnlySpan`1) xor edi,edi cmp dword ptr [esi+30],0 jle short M00_L38 M00_L37: mov ecx,[esi+8] cmp edi,[ecx+4] jae near ptr M00_L20 mov ecx,[ecx+edi*4+8] mov eax,ecx sar eax,1F push eax push ecx mov ecx,[ebp-3C] call dword ptr ds:[8E3D8D0]; System.Text.Json.Utf8JsonWriter.WriteNumberValue(Int64) inc edi cmp edi,[esi+30] jl short M00_L37 M00_L38: mov ecx,[ebp-3C] mov edx,5D call dword ptr ds:[8E39540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-3C] mov byte ptr [ecx+22],4 mov edx,7D call dword ptr ds:[8E39540]; System.Text.Json.Utf8JsonWriter.WriteEnd(Byte) mov ecx,[ebp-3C] mov byte ptr [ecx+22],2 call dword ptr ds:[8E392A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,[ebp-3C] call dword ptr ds:[0B86EA40]; System.Text.Json.Utf8JsonWriter.Dispose() jmp short M00_L39 mov ecx,[ebp-3C] call dword ptr ds:[0B86EA40]; System.Text.Json.Utf8JsonWriter.Dispose() pop eax jmp eax M00_L39: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret M00_L40: test edx,edx jne short M00_L41 xor ecx,ecx xor edx,edx jmp near ptr M00_L00 M00_L41: call dword ptr ds:[8E25060] int 3 M00_L42: mov ecx,30EC mov edx,0B86AFB0 call CORINFO_HELP_STRCNS mov ecx,eax call dword ptr ds:[8E3F600] int 3 ; Total bytes of code 1548 ``` ```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_L15 xor edi,edi mov eax,ecx test al,3 jne near ptr M01_L16 M01_L02: mov eax,ecx dec eax test al,4 je short M01_L10 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_L13 M01_L06: test dl,2 jne short M01_L11 M01_L07: test dl,1 jne short M01_L12 M01_L08: pop ebx pop esi pop edi pop ebp ret M01_L09: cmp esi,0B jne short M01_L14 xor edx,edx mov [ecx],edx mov [ecx+4],edx mov [ecx+8],edx jmp short M01_L08 M01_L10: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L03 M01_L11: mov word ptr [ecx+edi],0 add edi,2 jmp short M01_L07 M01_L12: mov byte ptr [ecx+edi],0 jmp short M01_L08 M01_L13: xor eax,eax mov [ecx+edi],eax add edi,4 jmp short M01_L06 M01_L14: cmp esi,15 ja near ptr M01_L01 lea eax,ds:[0B8A6FA0] 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 near ptr 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 [ecx+8],eax mov [ecx+0C],eax mov word ptr [ecx+10],0 mov byte ptr [ecx+12],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_L15: call dword ptr ds:[8D31690] 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 [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 [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 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 [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 byte ptr [ecx+10],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_L16: mov eax,ecx test al,1 je short M01_L17 mov byte ptr [ecx],0 mov edi,1 mov eax,ecx test al,2 jne near ptr M01_L02 M01_L17: 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 635 ``` ```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:[8E39360] jmp short M02_L01 M02_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[8E39348]; 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:[8E3F9D8] int 3 ; Total bytes of code 91 ``` ```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 M03_L00 mov ecx,esi call dword ptr ds:[8E395E8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M03_L00: lea edi,[esi+24] xor ebx,ebx xor ecx,ecx mov eax,[edi] test eax,eax je short M03_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M03_L21 lea ebx,[eax+8] mov ecx,[eax+4] M03_L01: mov edx,[edi+4] and edx,7FFFFFFF mov eax,[edi+8] cmp edx,ecx ja near ptr M03_L22 sub ecx,edx cmp ecx,eax jb near ptr M03_L22 add ebx,edx mov ecx,eax M03_L02: mov edi,ecx cmp dword ptr [esi+18],0 jge short M03_L03 mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M03_L23 mov byte ptr [ebx+eax],2C M03_L03: mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae near ptr M03_L23 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 M03_L22 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:[0B97F3C0]; 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 M03_L23 mov byte ptr [ebx+eax],22 mov eax,[esi+1C] lea edx,[eax+1] mov [esi+1C],edx cmp eax,edi jae near ptr M03_L23 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] cmp eax,edi ja near ptr M03_L22 add ebx,eax sub edi,eax cmp dword ptr [ebp+8],0A mov eax,[ebp+0C] sbb eax,0 jae short M03_L06 test edi,edi jne short M03_L05 M03_L04: xor eax,eax mov [ebp-10],eax jmp near ptr M03_L20 M03_L05: mov eax,[ebp+8] add eax,30 mov [ebx],al mov dword ptr [ebp-10],1 jmp near ptr M03_L20 M03_L06: cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0 jge near ptr M03_L16 cmp dword ptr [ebp+8],80000000 mov eax,[ebp+0C] sbb eax,0FFFFFFFF jl near ptr M03_L16 mov ecx,[ebp+8] mov eax,edi test ecx,ecx jge near ptr M03_L11 neg ecx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6AB76D50] mov edi,[edx] mov edx,[edx+4] add edi,ecx adc edx,0 mov edi,edx cmp edi,eax jge short M03_L04 test eax,eax je near ptr M03_L23 mov byte ptr [ebx],2D lea edx,[edi+1] mov [ebp-10],edx cmp eax,1 jb near ptr M03_L22 dec eax cmp edi,eax ja near ptr M03_L22 inc ebx mov edx,ecx mov [ebp-38],ebx lea ecx,[edi-1] test ecx,ecx jle short M03_L10 M03_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 M03_L23 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 M03_L09 M03_L08: test edi,edi je near ptr M03_L23 add edx,30 mov [eax],dl jmp near ptr M03_L20 M03_L09: mov [ebp-38],eax jmp short M03_L07 M03_L10: mov eax,[ebp-38] jmp short M03_L08 M03_L11: mov edi,ebx mov edx,ecx or edx,1 lzcnt edx,edx xor edx,1F lea edx,[edx*8+6AB76D50] mov ebx,[edx] mov edx,[edx+4] add ebx,ecx adc edx,0 mov ebx,edx cmp ebx,eax jg near ptr M03_L04 mov [ebp-10],ebx cmp ebx,eax ja near ptr M03_L22 mov edx,ecx mov [ebp-3C],edi mov [ebp-30],ebx lea ecx,[ebx-1] test ecx,ecx jle short M03_L15 M03_L12: 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 M03_L23 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 M03_L14 M03_L13: cmp dword ptr [ebp-30],0 jbe near ptr M03_L23 lea ecx,[edx+30] mov [edi],cl jmp near ptr M03_L20 M03_L14: mov [ebp-3C],edi mov ebx,[ebp-30] jmp short M03_L12 M03_L15: mov edi,[ebp-3C] jmp short M03_L13 M03_L16: cmp dword ptr [ebp+8],0C4653601 mov ecx,[ebp+0C] sbb ecx,3B9AC9FF jge short M03_L18 cmp dword ptr [ebp+8],3B9ACA00 mov ecx,[ebp+0C] sbb ecx,0C4653600 jl short M03_L18 cmp dword ptr [ebp+0C],0 jl short M03_L17 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B97F348] jmp short M03_L20 M03_L17: 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:[0B97F288] jmp short M03_L20 M03_L18: cmp dword ptr [ebp+0C],0 jl short M03_L19 push dword ptr [ebp+0C] push dword ptr [ebp+8] push edi push ebx lea ecx,[ebp-10] call dword ptr ds:[0B97F360] jmp short M03_L20 M03_L19: 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:[0B97F2A0] M03_L20: 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 M03_L21: 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 M03_L01 M03_L22: call dword ptr ds:[8E25060] int 3 M03_L23: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 887 ``` ```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 M04_L00 mov ecx,esi call dword ptr ds:[8E395E8]; 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_L04 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_L05 sub ecx,edx cmp ecx,eax jb near ptr M04_L05 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_L06 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_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 M04_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:[0B97F3C0]; 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 M04_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 M04_L06 mov byte ptr [ebx+eax],3A mov eax,[esi+1C] lea ecx,[eax+1] mov [esi+1C],ecx cmp eax,edi jae short M04_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 M04_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:[0B97F3C0]; 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 M04_L06 mov byte ptr [ebx+eax],22 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M04_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 M04_L01 M04_L05: call dword ptr ds:[8E25060] int 3 M04_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 sub esp,8 xor eax,eax mov [ebp-10],eax mov [ebp-14],eax mov esi,ecx lea ecx,[esi+40] mov edx,[ebp+8] mov eax,[ebp+0C] mov ecx,[ecx] test eax,eax jne short M05_L00 mov edi,0FFFFFFFF jmp short M05_L02 M05_L00: mov [ebp-10],edx test ecx,ecx jne short M05_L01 mov ecx,ds:[75456C0] M05_L01: push eax mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov edi,eax M05_L02: xor ecx,ecx mov [ebp-10],ecx lea ecx,[esi+40] mov edx,[ebp+10] mov eax,[ebp+14] mov ecx,[ecx] test eax,eax jne short M05_L03 mov ebx,0FFFFFFFF jmp short M05_L05 M05_L03: mov [ebp-14],edx test ecx,ecx jne short M05_L04 mov ecx,ds:[75456C0] M05_L04: push eax mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov ebx,eax M05_L05: xor ecx,ecx mov [ebp-14],ecx mov edx,ebx lea ecx,[edi+edx] cmp ecx,0FFFFFFFE je short M05_L06 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 call dword ptr ds:[8E3D048] lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M05_L06: 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 M05_L07 cmp byte ptr [esi+20],0 je short M05_L10 cmp byte ptr [esi+22],5 je short M05_L10 M05_L07: test cl,1 je short M05_L08 push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[8E3D168] jmp short M05_L09 M05_L08: push ebx push edi push edx push eax mov ecx,esi call dword ptr ds:[8E3D108]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1, System.ReadOnlySpan`1) M05_L09: lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 10 M05_L10: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+22] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 ; Total bytes of code 259 ``` ```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 M06_L00 mov ecx,esi call dword ptr ds:[8E395E8]; System.Text.Json.Utf8JsonWriter.Grow(Int32) M06_L00: lea edi,[esi+24] xor ecx,ecx xor edx,edx mov eax,[edi] test eax,eax je short M06_L02 mov ecx,[eax] test dword ptr [ecx],80000000 je near ptr M06_L04 lea ecx,[eax+8] mov edx,[eax+4] M06_L01: mov eax,[edi+4] and eax,7FFFFFFF mov edi,[edi+8] cmp eax,edx ja near ptr M06_L05 sub edx,eax cmp edx,edi jb near ptr M06_L05 add ecx,eax mov edx,edi M06_L02: mov edi,ecx mov eax,edx mov [ebp-24],eax cmp dword ptr [esi+18],0 jge short M06_L03 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M06_L06 mov byte ptr [edi+edx],2C M06_L03: mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,eax jae near ptr M06_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 M06_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:[0B97F3C0]; 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 M06_L06 mov byte ptr [edi+edx],22 mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M06_L06 mov byte ptr [edi+edx],3A mov edx,[esi+1C] lea ecx,[edx+1] mov [esi+1C],ecx cmp edx,ebx jae short M06_L06 mov ebx,[ebp-10] mov [edi+edx],bl lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M06_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 M06_L01 M06_L05: call dword ptr ds:[8E25060] int 3 M06_L06: call CORINFO_HELP_RNGCHKFAIL int 3 ; Total bytes of code 334 ``` ```assembly ; System.Text.Json.Utf8JsonWriter.WriteStringValue(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx push eax xor eax,eax mov [ebp-10],eax mov esi,ecx mov edi,[ebp+0C] mov ecx,edi cmp ecx,9EF21AA jg near ptr M07_L07 mov ebx,[ebp+8] lea ecx,[esi+40] mov ecx,[ecx] test edi,edi jne short M07_L00 mov edx,0FFFFFFFF jmp short M07_L02 M07_L00: mov edx,ebx mov [ebp-10],edx test ecx,ecx jne short M07_L01 mov ecx,ds:[75456C0] M07_L01: push edi mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] mov edx,eax M07_L02: xor ecx,ecx mov [ebp-10],ecx cmp edx,0FFFFFFFF je short M07_L03 push edi push ebx mov ecx,esi call dword ptr ds:[8E3D9D8] jmp short M07_L06 M07_L03: test byte ptr [esi+48],2 jne short M07_L04 mov ecx,esi call dword ptr ds:[8E3D798] M07_L04: test byte ptr [esi+48],1 je short M07_L05 push edi push ebx mov ecx,esi call dword ptr ds:[8E3D9C0] jmp short M07_L06 M07_L05: push edi push ebx mov ecx,esi call dword ptr ds:[8E3D9A8]; System.Text.Json.Utf8JsonWriter.WriteStringMinimized(System.ReadOnlySpan`1) M07_L06: or dword ptr [esi+18],80000000 mov byte ptr [esi+22],7 pop ecx pop ebx pop esi pop edi pop ebp ret 8 M07_L07: call dword ptr ds:[8E3F6F0] int 3 ; Total bytes of code 166 ``` ```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 M08_L00 movzx edx,dl mov ecx,esi call dword ptr ds:[8E39570] jmp short M08_L01 M08_L00: movzx edx,dl mov ecx,esi call dword ptr ds:[8E39558]; System.Text.Json.Utf8JsonWriter.WriteEndMinimized(Byte) M08_L01: mov eax,[esi+18] or eax,80000000 mov [esi+18],eax test eax,7FFFFFFF je short M08_L02 dec eax mov [esi+18],eax M08_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,0C xor eax,eax mov [ebp-10],eax mov esi,ecx mov edi,[ebp+8] mov ecx,edi mov ebx,[ebp+0C] mov edx,ebx cmp edx,9EF21AA jg short M09_L00 mov eax,[esi+18] and eax,7FFFFFFF cmp eax,[esi+44] jl short M09_L01 M09_L00: push edx push ecx mov ecx,[esi+18] mov edx,[esi+44] call dword ptr ds:[8E3F7F8] M09_L01: lea ecx,[esi+40] mov ecx,[ecx] test ebx,ebx jne short M09_L02 mov eax,0FFFFFFFF jmp short M09_L04 M09_L02: mov edx,edi mov [ebp-10],edx test ecx,ecx jne short M09_L03 mov ecx,ds:[75456C0] M09_L03: push ebx mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] M09_L04: xor ecx,ecx mov [ebp-10],ecx cmp eax,0FFFFFFFF je short M09_L05 push ebx push edi push eax mov ecx,esi mov edx,7B call dword ptr ds:[8E394F8] jmp near ptr M09_L10 M09_L05: mov [ebp-14],ebx test byte ptr [esi+48],2 jne short M09_L08 cmp byte ptr [esi+20],0 je near ptr M09_L11 cmp byte ptr [esi+22],5 je near ptr M09_L11 lea eax,[esi+30] mov [ebp-18],eax cmp dword ptr [eax+0C],40 jge short M09_L06 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 M09_L07 M09_L06: mov ecx,eax mov edx,1 call dword ptr ds:[8E37F30] mov eax,[ebp-18] M09_L07: inc dword ptr [eax+0C] mov byte ptr [esi+20],1 M09_L08: test byte ptr [esi+48],1 je short M09_L09 push dword ptr [ebp-14] push edi mov ecx,esi mov edx,7B call dword ptr ds:[8E3B3F0] jmp short M09_L10 M09_L09: push dword ptr [ebp-14] push edi mov ecx,esi mov edx,7B call dword ptr ds:[8E3B3D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M09_L10: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+22],1 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M09_L11: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+22] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 ; Total bytes of code 321 ``` ```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 M10_L00 mov eax,0FFFFFFFF mov esp,ebp pop ebp ret 8 M10_L00: mov eax,[ebp+8] mov [ebp-4],eax test ecx,ecx jne short M10_L01 mov ecx,ds:[75456C0] M10_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.WriteStartArray(System.ReadOnlySpan`1) push ebp mov ebp,esp push edi push esi push ebx sub esp,0C xor eax,eax mov [ebp-10],eax mov esi,ecx mov edi,[ebp+8] mov ecx,edi mov ebx,[ebp+0C] mov edx,ebx 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:[8E3F7F8] M11_L01: lea ecx,[esi+40] mov ecx,[ecx] test ebx,ebx jne short M11_L02 mov eax,0FFFFFFFF jmp short M11_L04 M11_L02: mov edx,edi mov [ebp-10],edx test ecx,ecx jne short M11_L03 mov ecx,ds:[75456C0] M11_L03: push ebx mov eax,[ecx] mov eax,[eax+28] call dword ptr [eax+14] M11_L04: xor ecx,ecx mov [ebp-10],ecx cmp eax,0FFFFFFFF je short M11_L05 push ebx push edi push eax mov ecx,esi mov edx,5B call dword ptr ds:[8E394F8] jmp near ptr M11_L10 M11_L05: mov [ebp-14],ebx test byte ptr [esi+48],2 jne short M11_L08 cmp byte ptr [esi+20],0 je near ptr M11_L11 cmp byte ptr [esi+22],5 je near ptr M11_L11 lea eax,[esi+30] mov [ebp-18],eax cmp dword ptr [eax+0C],40 jge short M11_L06 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 M11_L07 M11_L06: mov ecx,eax xor edx,edx call dword ptr ds:[8E37F30] mov eax,[ebp-18] M11_L07: inc dword ptr [eax+0C] mov byte ptr [esi+20],0 M11_L08: test byte ptr [esi+48],1 je short M11_L09 push dword ptr [ebp-14] push edi mov ecx,esi mov edx,5B call dword ptr ds:[8E3B3F0] jmp short M11_L10 M11_L09: push dword ptr [ebp-14] push edi mov ecx,esi mov edx,5B call dword ptr ds:[8E3B3D8]; System.Text.Json.Utf8JsonWriter.WritePropertyNameMinimized(System.ReadOnlySpan`1, Byte) M11_L10: mov ecx,[esi+18] and ecx,7FFFFFFF mov [esi+18],ecx inc ecx mov [esi+18],ecx mov byte ptr [esi+22],3 lea esp,[ebp-0C] pop ebx pop esi pop edi pop ebp ret 8 M11_L11: push dword ptr [esi+44] push 0 movzx ecx,byte ptr [esi+22] push ecx mov ecx,1F xor edx,edx call dword ptr ds:[8E3F9D8] int 3 ; Total bytes of code 312 ``` ```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 M12_L00 mov ecx,esi call dword ptr ds:[8E3D798] M12_L00: test byte ptr [esi+48],1 je short M12_L01 push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[8E3D900] jmp short M12_L02 M12_L01: push dword ptr [ebp+0C] push dword ptr [ebp+8] mov ecx,esi call dword ptr ds:[8E3D8E8]; System.Text.Json.Utf8JsonWriter.WriteNumberValueMinimized(Int64) M12_L02: or dword ptr [esi+18],80000000 mov byte ptr [esi+22],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 M13_L00 cmp dword ptr [esi+0C],0 je near ptr M13_L06 M13_L00: xor edx,edx mov [esi+24],edx mov [esi+28],edx mov [esi+2C],edx test ecx,ecx je near ptr M13_L04 mov edx,[esi+1C] test edx,edx je near ptr M13_L03 mov ecx,[esi+14] cmp [ecx],ecx call dword ptr ds:[0B7E49EC]; 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 M13_L07 mov eax,[edx+4] cmp [edx+4],edi jb near ptr M13_L09 add edx,8 M13_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 M13_L08 mov eax,[ecx+4] cmp [ecx+4],edx jb short M13_L09 add ecx,8 M13_L02: call dword ptr ds:[872F3A8]; System.SpanHelpers.ClearWithoutReferences(Byte ByRef, UIntPtr) xor ecx,ecx mov [edi+8],ecx M13_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 M13_L04: mov edx,[esi+1C] test edx,edx je short M13_L05 mov ecx,[esi+0C] call dword ptr ds:[32902E0] 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 M13_L05: pop ecx pop ebx pop esi pop edi pop ebp ret M13_L06: call dword ptr ds:[8E3FB58] int 3 M13_L07: test edi,edi jne short M13_L09 xor edx,edx xor edi,edi jmp near ptr M13_L01 M13_L08: test edx,edx jne short M13_L09 xor ecx,ecx xor edx,edx jmp short M13_L02 M13_L09: call dword ptr ds:[8E25060] 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 M14_L00 cmp dword ptr [esi+0C],0 jne short M14_L00 pop esi pop ebp ret M14_L00: mov ecx,esi call dword ptr ds:[8E392A0]; System.Text.Json.Utf8JsonWriter.Flush() mov ecx,esi call dword ptr ds:[8E39270]; 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 ``` ### 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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
[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(Location).SerializeObjectProperty(Mode%3a%20SourceGen).html>) 1.12 μs 1.01 μs 0.91 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(Location).SerializeToString(Mode%3a%20SourceGen).html>) 856.24 ns 763.03 ns 0.89 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(Location).SerializeToUtf8Bytes(Mode%3a%20SourceGen).html>) 792.90 ns 720.08 ns 0.91 0.03 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>.SerializeObjectProperty(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 1.0113863059330377 < 1.0590457160647633. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 16.198918598637242 (T) = (0 -1020.1633252741975) / Math.Sqrt((1671.8057318178123 / (245)) + (165.26467970178007 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05016125080721686 = (1074.0384366727294 - 1020.1633252741975) / 1074.0384366727294 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<Location>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 763.0264707224281 < 807.9333404380069. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 17.97602796692248 (T) = (0 -773.628283234832) / Math.Sqrt((865.6679298605101 / (245)) + (101.80610796683051 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05445768631051991 = (818.1847306400871 - 773.628283234832) / 818.1847306400871 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 720.0796620046622 < 747.1969613937399. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.77628078218927 (T) = (0 -721.3412545340353) / Math.Sqrt((703.7559453951912 / (245)) + (140.08515193693248 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.052677577114631835 = (761.4527399625608 - 721.3412545340353) / 761.4527399625608 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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
[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>) 8.10 μs 6.99 μs 0.86 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>) 9.06 μs 7.67 μs 0.85 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(HashSet(String)).SerializeToStream(Mode%3a%20SourceGen).html>) 6.01 μs 5.43 μs 0.90 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(HashSet(String)).SerializeToString(Mode%3a%20Reflection).html>) 8.50 μs 7.44 μs 0.87 0.02 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>) 8.12 μs 7.10 μs 0.87 0.04 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.77 μs 5.23 μs 0.91 0.07 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.78 μs 6.99 μs 0.90 0.00 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;HashSet&lt;String&gt;&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToUtf8Bytes(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 6.98783493089612 < 7.728502776881999. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 8.977388474797054 (T) = (0 -7248.778132169198) / Math.Sqrt((130175.89021704605 / (245)) + (52680.12953917687 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.050989180934345936 = (7638.246041605682 - 7248.778132169198) / 7638.246041605682 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 7.672431699835936 < 8.373201815421657. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 11.811722791361678 (T) = (0 -7908.722393079318) / Math.Sqrt((127716.26782814242 / (245)) + (31337.87199153024 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.051558119634715176 = (8338.647371869889 - 7908.722393079318) / 8338.647371869889 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToStream(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.4312631995776135 < 5.833147189084631. IsChangePoint: Marked as a change because one of 12/5/2022 3:14:07 PM, 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 12.506609963844783 (T) = (0 -5452.588701802004) / Math.Sqrt((441711.1311318114 / (245)) + (8836.198558692033 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.09365323097550664 = (6016.00721506478 - 5452.588701802004) / 6016.00721506478 is greater than 0.05. IsChangeEdgeDetector: Marked not as a regression because Edge Detector said so. ```#### System.Text.Json.Serialization.Tests.WriteJson<HashSet<String>>.SerializeToString(Mode: Reflection) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 7.437222616233255 < 8.107980838993665. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/19/2023 4:24:48 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 8.798765129139769 (T) = (0 -7571.368945415654) / Math.Sqrt((106443.00026554913 / (257)) + (78196.17212829288 / (27))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (257) + (27) - 2, .975) and 0.06267213146954688 = (8077.609980044742 - 7571.368945415654) / 8077.609980044742 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 7.09764521640091 < 7.454398939530327. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 10.861175631024542 (T) = (0 -7108.484582513145) / Math.Sqrt((111786.17020800173 / (245)) + (36753.17409429784 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05405332487553444 = (7514.677908855514 - 7108.484582513145) / 7514.677908855514 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 5.231186566745256 < 5.507777850275805. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 12.67717819952096 (T) = (0 -5216.22191119752) / Math.Sqrt((141554.13595063155 / (245)) + (1723.6882628462677 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.057147185818418364 = (5532.381971755924 - 5216.22191119752) / 5532.381971755924 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 6.994607886904761 < 7.624805994342178. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 9.865364424366566 (T) = (0 -7151.117985853308) / Math.Sqrt((128861.74638661376 / (245)) + (50397.99175302222 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05555696011963229 = (7571.783245667349 - 7151.117985853308) / 7571.783245667349 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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
[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>) 30.66 ns 26.71 ns 0.87 0.07 False 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>) 32.51 ns 26.82 ns 0.83 0.05 False 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%22ascii%22).html>) 31.83 ns 28.76 ns 0.90 0.03 False 334.25361538687616 300.8548313129667 0.9000795128715284 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>) 32.35 ns 27.38 ns 0.85 0.06 False 338.3116014391308 301.3360268092271 0.8907055670789452 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>) 44.08 ns 35.75 ns 0.81 0.01 False Trace Trace

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.GetString(size: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 26.709688786218283 < 29.188599606742656. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 10.876711704282512 (T) = (0 -26.746364464653805) / Math.Sqrt((5.47679774462913 / (299)) + (0.16033679688272617 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.057405742107704924 = (28.37526776840387 - 26.746364464653805) / 28.37526776840387 is greater than 0.05. 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: 16, encName: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 26.823313873898897 < 30.957698179842694. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 7.782222429038717 (T) = (0 -26.999791636361472) / Math.Sqrt((10.414634637109884 / (299)) + (0.7034967857590534 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.06215534949701399 = (28.789194054560006 - 26.999791636361472) / 28.789194054560006 is greater than 0.05. 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: "ascii") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 28.760407276611204 < 30.24404392865508. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 10.321265269979317 (T) = (0 -27.52764408748212) / Math.Sqrt((5.755372549936288 / (299)) + (0.5746737876640999 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.06465090891810031 = (29.4303424784873 - 27.52764408748212) / 29.4303424784873 is greater than 0.05. 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: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 27.384790876479165 < 30.71758131587338. IsChangePoint: Marked as a change because one of 12/6/2022 2:12:43 AM, 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.69831072528142 (T) = (0 -27.486038383212616) / Math.Sqrt((10.071105811850428 / (299)) + (0.045366719495497525 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.09634298512756638 = (30.416449970338284 - 27.486038383212616) / 30.416449970338284 is greater than 0.05. 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: 16, encName: "utf-8") ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 35.749873369908144 < 41.60839278073191. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 13.535042209741695 (T) = (0 -35.85201248823868) / Math.Sqrt((14.76484138515126 / (299)) + (0.11424351004578166 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.07948236860493355 = (38.94766516737338 - 35.85201248823868) / 38.94766516737338 is greater than 0.05. 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)

Run Information

Architecture x86
OS Windows 10.0.18362
Baseline 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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>) 11.91 μs 10.87 μs 0.91 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(Dictionary(String%2c%20String)).SerializeToStream(Mode%3a%20Reflection).html>) 13.93 μs 12.43 μs 0.89 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%20Reflection).html>) 12.94 μs 11.49 μs 0.89 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>) 14.26 μs 12.60 μs 0.88 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>) 14.49 μs 13.16 μs 0.91 0.02 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;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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 10.86762527964206 < 11.483762140905634. IsChangePoint: Marked as a change because one of 12/5/2022 3:14:07 PM, 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 13.71225849098731 (T) = (0 -10639.675451102672) / Math.Sqrt((1002877.3691674382 / (245)) + (24831.960688375435 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.08142023802018396 = (11582.745333046492 - 10639.675451102672) / 11582.745333046492 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 12.431301020408165 < 13.522885626787945. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.180348901560567 (T) = (0 -12757.603422492431) / Math.Sqrt((445255.5506009001 / (245)) + (35813.252681562306 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05858985727303079 = (13551.589093291119 - 12757.603422492431) / 13551.589093291119 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 11.493626666316782 < 12.606876378003008. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.095961146945765 (T) = (0 -11672.490681925146) / Math.Sqrt((498760.7691524748 / (245)) + (28209.70171398857 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.06361151698093331 = (12465.43597406406 - 11672.490681925146) / 12465.43597406406 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 12.603634872824632 < 13.489279740283939. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 19.20591409634662 (T) = (0 -12776.780969233365) / Math.Sqrt((418851.28414593847 / (245)) + (31518.1715048666 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.07013580991450492 = (13740.480712628176 - 12776.780969233365) / 13740.480712628176 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 13.15834278205369 < 14.257446780089833. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 15.448136441540461 (T) = (0 -13197.16804963344) / Math.Sqrt((385732.56320562045 / (245)) + (31634.012605457443 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05408083365698914 = (13951.686908570218 - 13197.16804963344) / 13951.686908570218 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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>) 29.40 ns 22.83 ns 0.78 0.15 False 285.44606239513 247.93777057754562 0.8685976205001442 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.IO.Tests.BinaryWriterExtendedTests*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.IO.Tests.BinaryWriterExtendedTests.WriteAsciiString(StringLengthInChars: 32) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 22.827722148820776 < 28.28128599685769. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 16.73716827928699 (T) = (0 -22.820868307777346) / Math.Sqrt((8.001641126672567 / (299)) + (0.08868744758569062 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.11108917922035705 = (25.67284341050286 - 22.820868307777346) / 25.67284341050286 is greater than 0.05. 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 ``` ### 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements in MicroBenchmarks.Serializers.Json_ToStream<Location>

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[SystemTextJsonSourceGen - Duration of single invocation](<https://pvscmdupload.z22.web.core.windows.net/reports/allTestHistory/refs/heads/main_x86_Windows 10.0.18362/MicroBenchmarks.Serializers.Json_ToStream(Location).SystemTextJsonSourceGen.html>) 770.10 ns 707.33 ns 0.92 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_ToStream&lt;Location&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### MicroBenchmarks.Serializers.Json_ToStream<Location>.SystemTextJson_SourceGen_ ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 707.33266447167 < 731.2729426827428. IsChangePoint: Marked as a change because one of 12/5/2022 3:14:07 PM, 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 16.71993800041004 (T) = (0 -714.5340981498072) / Math.Sqrt((3633.229794171046 / (245)) + (91.40506013324418 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.08839809518898814 = (783.8225154849148 - 714.5340981498072) / 783.8225154849148 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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>) 5.25 μs 4.48 μs 0.85 0.07 False 48432.00983836964 41510.972580753434 0.8570978722395886 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 4.475675910765452 < 4.994460473128965. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 9.977470967795087 (T) = (0 -4478.663693709041) / Math.Sqrt((168257.39596400378 / (299)) + (878.4185839929823 / (39))) is greater than 1.9670493839589689 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (299) + (39) - 2, .975) and 0.051138532160672046 = (4720.039590086315 - 4478.663693709041) / 4720.039590086315 is greater than 0.05. 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+20],0B jne short M00_L00 mov ecx,[ebp-4] call dword ptr ds:[0AD8F5A0] mov esp,ebp pop ebp ret M00_L00: xor eax,eax mov esp,ebp pop ebp ret ; Total bytes of code 35 ``` ### Compare 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,0B096718 mov edx,233 call CORINFO_HELP_GETSHARED_NONGCSTATIC_BASE mov ecx,ds:[75245DC] 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:[0B99B6D8]; 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:[0B99B8E8]; 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:[0B99D1B0] 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:[0B99D528]; 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:[0B99F378] 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:[7521F50] 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:[0B99B948] 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:[0B99BAC8] 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:[0B99B888] 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:[0B99B9D8] 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:[0B99B8B8] jmp short M02_L14 M02_L12: mov ecx,esi call dword ptr ds:[0B99B960]; 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:[0B99B930]; System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte) 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:[0B99F378] int 3 M02_L18: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B99F378] int 3 M02_L19: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,19 call dword ptr ds:[0B99F378] int 3 M02_L20: xor edi,edi push 0 push 0 push edi mov ecx,esi mov edx,16 call dword ptr ds:[0B99F378] int 3 M02_L21: xor ecx,ecx push edx push 0 push ecx mov ecx,esi mov edx,0C call dword ptr ds:[0B99F378] 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:[0BA61000] 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:[0BA61168] 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:[0BA611F8]; 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:[0B99F288] int 3 ; Total bytes of code 151 ``` ### 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements in System.Text.Json.Serialization.Tests.WriteJson<SimpleStructWithProperties>

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(SimpleStructWithProperties).SerializeToString(Mode%3a%20SourceGen).html>) 238.24 ns 216.27 ns 0.91 0.15 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.WriteJson&lt;SimpleStructWithProperties&gt;*'
### Payloads [Baseline]() [Compare]() ### Histogram #### System.Text.Json.Serialization.Tests.WriteJson<SimpleStructWithProperties>.SerializeToString(Mode: SourceGen) ```log ``` ### Description of detection logic ```IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 216.2662027561741 < 226.40224224791655. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 12.295210530395579 (T) = (0 -219.93386591195753) / Math.Sqrt((107.86316505178512 / (245)) + (18.063921462273843 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05045541121426852 = (231.6203667625623 - 219.93386591195753) / 231.6203667625623 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

Improvements 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>) 13.38 μs 12.03 μs 0.90 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>) 22.71 μs 20.57 μs 0.91 0.02 False

graph_1.png>) graph_2.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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 12.027165321547526 < 12.93894015109482. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 12.897146751332214 (T) = (0 -12081.685007274471) / Math.Sqrt((549659.1432986984 / (245)) + (32327.12278884761 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05586497825969168 = (12796.564822904782 - 12081.685007274471) / 12796.564822904782 is greater than 0.05. 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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 20.56626968503937 < 21.389274049504177. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 17.92240994583228 (T) = (0 -20586.018575992828) / Math.Sqrt((479474.61236213864 / (245)) + (103515.0226015187 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.05581991681881247 = (21803.063782740675 - 20586.018575992828) / 21803.063782740675 is greater than 0.05. 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 2e77a42d4563246f2362a498ca5906fdbd9274db
Compare 19fc478d67c2fc55e62b50676935f903a77f5a4d
Diff Diff

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

Benchmark Baseline Test Test/Base Test Quality Edge Detector Baseline IR Compare IR IR Ratio Baseline ETL Compare ETL
[DeserializeFromStream - Duration of single invocation](<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>) 30.15 μs 26.50 μs 0.88 0.09 False

graph_1.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 not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsRegressionBase: Marked as not a regression because the compare was not 5% greater than the baseline, or the value was too small. IsImprovementBase: Marked as improvement because the compare was 5% less than the baseline, and the value was not too small. IsImprovementCheck: Marked as improvement because the three check build points were 0.05 less than the baseline. IsImprovementWindowed:Marked as improvement because 26.4998645437622 < 29.155799715391648. IsChangePoint: Marked as a change because one of 12/21/2022 9:23:17 AM, 1/17/2023 8:36:05 PM, 1/24/2023 6:33:57 AM falls between 1/15/2023 4:08:29 PM and 1/24/2023 6:33:57 AM. IsImprovementStdDev: Marked as improvement because 12.272239070311732 (T) = (0 -27122.55021621582) / Math.Sqrt((2263323.576642977 / (245)) + (424828.3298177912 / (39))) is greater than 1.968411900500806 = MathNet.Numerics.Distributions.StudentT.InvCDF(0, 1, (245) + (39) - 2, .975) and 0.06032594853363415 = (28863.785451871263 - 27122.55021621582) / 28863.785451871263 is greater than 0.05. 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)