Skip to content

Add missing assembly for <.NET Core 3.1#7904

Merged
andrewlock merged 1 commit intomasterfrom
andrew/fix-assembly-references
Dec 4, 2025
Merged

Add missing assembly for <.NET Core 3.1#7904
andrewlock merged 1 commit intomasterfrom
andrew/fix-assembly-references

Conversation

@andrewlock
Copy link
Member

Summary of changes

Add additional assembly to public API for unsafe to .NET Standard 2.0

Reason for change

#7874 reduced the allocation in TraceContext and used unsafe code. Apparently this is a new assembly reference for < .NET Core 3.1, and because we don't run tests on .NET Core 2.1 (ever) or .NET Core 3.0 tests (on PRs), we missed it.

Implementation details

Added the assembly reference, and confirmed it passes for both .NET Core 2.1 and 3.0 now.

Test coverage

Covered by existing

Other details

Raises the question of whether we should be testing one of those on PRs again, given there's whole code paths that go untouched otherwise 😅

@andrewlock andrewlock requested a review from a team as a code owner December 4, 2025 09:33
@andrewlock andrewlock added the area:tests unit tests, integration tests label Dec 4, 2025
@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Dec 4, 2025

⚠️ Tests

⚠️ Warnings

🧪 1 Test failed

DoesNotFireAfterUnsubscribing from Datadog.Trace.Tests.Agent.DiscoveryServiceTests (Datadog)
Expected mutex3.Wait(30_000) to be True because Should make third request to api, but found False.

ℹ️ Info

❄️ No new flaky tests detected

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 0971a93 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

@dd-trace-dotnet-ci-bot
Copy link

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7904) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration75.47 ± (75.19 - 76.08) ms75.29 ± (75.28 - 76.07) ms-0.2%
.NET Framework 4.8 - Bailout
duration78.91 ± (79.10 - 79.73) ms80.61 ± (80.36 - 81.11) ms+2.1%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1057.00 ± (1056.46 - 1064.47) ms1058.59 ± (1057.36 - 1065.29) ms+0.2%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.79 ± (22.73 - 22.86) ms22.93 ± (22.86 - 23.00) ms+0.6%✅⬆️
process.time_to_main_ms86.43 ± (86.11 - 86.75) ms87.55 ± (87.22 - 87.88) ms+1.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.92 ± (10.92 - 10.93) MB10.92 ± (10.92 - 10.92) MB-0.0%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.61 ± (22.56 - 22.67) ms22.61 ± (22.55 - 22.67) ms-0.0%
process.time_to_main_ms87.75 ± (87.40 - 88.11) ms87.78 ± (87.42 - 88.14) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.96 ± (10.96 - 10.97) MB+0.1%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms219.78 ± (218.47 - 221.10) ms221.67 ± (220.26 - 223.07) ms+0.9%✅⬆️
process.time_to_main_ms497.19 ± (496.15 - 498.23) ms498.51 ± (497.49 - 499.53) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.87 ± (47.85 - 47.89) MB47.87 ± (47.85 - 47.89) MB-0.0%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.5%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms21.64 ± (21.57 - 21.72) ms21.80 ± (21.75 - 21.86) ms+0.7%✅⬆️
process.time_to_main_ms75.47 ± (75.15 - 75.79) ms76.43 ± (76.13 - 76.74) ms+1.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.62 ± (10.62 - 10.62) MB10.63 ± (10.63 - 10.63) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.61 ± (21.55 - 21.67) ms21.76 ± (21.70 - 21.83) ms+0.7%✅⬆️
process.time_to_main_ms76.50 ± (76.19 - 76.81) ms77.00 ± (76.71 - 77.30) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.66 ± (10.66 - 10.66) MB10.66 ± (10.66 - 10.67) MB+0.0%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms208.36 ± (207.19 - 209.53) ms210.89 ± (209.75 - 212.04) ms+1.2%✅⬆️
process.time_to_main_ms462.04 ± (460.99 - 463.08) ms464.84 ± (463.74 - 465.93) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.07 ± (48.05 - 48.10) MB48.12 ± (48.10 - 48.15) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms19.68 ± (19.63 - 19.74) ms19.69 ± (19.63 - 19.74) ms+0.0%✅⬆️
process.time_to_main_ms74.39 ± (74.09 - 74.69) ms74.06 ± (73.75 - 74.37) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.64 ± (7.64 - 7.65) MB7.66 ± (7.65 - 7.67) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.74 ± (19.68 - 19.80) ms19.71 ± (19.65 - 19.77) ms-0.2%
process.time_to_main_ms76.35 ± (76.02 - 76.68) ms75.66 ± (75.35 - 75.98) ms-0.9%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.69 - 7.70) MB7.70 ± (7.69 - 7.70) MB+0.0%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms192.69 ± (191.71 - 193.67) ms191.85 ± (190.87 - 192.82) ms-0.4%
process.time_to_main_ms452.60 ± (451.62 - 453.59) ms454.63 ± (453.61 - 455.66) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.36 ± (36.32 - 36.40) MB36.38 ± (36.34 - 36.42) MB+0.1%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.0%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration192.77 ± (192.67 - 193.42) ms193.52 ± (193.57 - 194.45) ms+0.4%✅⬆️
.NET Framework 4.8 - Bailout
duration196.83 ± (196.70 - 197.22) ms196.42 ± (196.30 - 196.93) ms-0.2%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1110.85 ± (1113.99 - 1122.94) ms1114.80 ± (1120.59 - 1130.24) ms+0.4%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms188.43 ± (188.08 - 188.79) ms188.90 ± (188.49 - 189.30) ms+0.2%✅⬆️
process.time_to_main_ms80.82 ± (80.61 - 81.03) ms81.01 ± (80.77 - 81.24) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.05 ± (16.02 - 16.08) MB16.05 ± (16.03 - 16.08) MB+0.0%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (19 - 20)-0.1%
.NET Core 3.1 - Bailout
process.internal_duration_ms187.60 ± (187.32 - 187.88) ms187.66 ± (187.40 - 187.91) ms+0.0%✅⬆️
process.time_to_main_ms82.01 ± (81.86 - 82.16) ms82.16 ± (82.03 - 82.29) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.08 ± (16.06 - 16.10) MB16.17 ± (16.14 - 16.20) MB+0.5%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (20 - 21)-0.2%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms399.30 ± (396.58 - 402.03) ms397.87 ± (395.62 - 400.12) ms-0.4%
process.time_to_main_ms472.48 ± (471.85 - 473.11) ms474.98 ± (474.33 - 475.64) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.88 ± (58.77 - 59.00) MB58.96 ± (58.87 - 59.06) MB+0.1%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 30)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms192.50 ± (192.14 - 192.87) ms192.27 ± (191.90 - 192.64) ms-0.1%
process.time_to_main_ms70.16 ± (69.97 - 70.34) ms70.28 ± (70.12 - 70.43) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.31 ± (16.22 - 16.40) MB16.07 ± (15.92 - 16.22) MB-1.5%
runtime.dotnet.threads.count19 ± (18 - 19)18 ± (18 - 19)-1.7%
.NET 6 - Bailout
process.internal_duration_ms191.05 ± (190.81 - 191.29) ms191.66 ± (191.39 - 191.94) ms+0.3%✅⬆️
process.time_to_main_ms70.89 ± (70.82 - 70.97) ms71.10 ± (70.98 - 71.23) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.18 ± (16.05 - 16.32) MB16.32 ± (16.20 - 16.45) MB+0.9%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)19 ± (19 - 20)-1.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms407.79 ± (405.87 - 409.71) ms408.54 ± (406.47 - 410.61) ms+0.2%✅⬆️
process.time_to_main_ms442.04 ± (441.41 - 442.67) ms442.08 ± (441.52 - 442.64) ms+0.0%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed58.96 ± (58.82 - 59.10) MB59.10 ± (58.97 - 59.23) MB+0.2%✅⬆️
runtime.dotnet.threads.count30 ± (29 - 30)30 ± (29 - 30)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms190.74 ± (190.32 - 191.15) ms191.10 ± (190.69 - 191.51) ms+0.2%✅⬆️
process.time_to_main_ms69.69 ± (69.48 - 69.89) ms69.59 ± (69.42 - 69.76) ms-0.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.78 ± (11.74 - 11.81) MB11.74 ± (11.72 - 11.76) MB-0.3%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.1%
.NET 8 - Bailout
process.internal_duration_ms189.95 ± (189.70 - 190.20) ms189.83 ± (189.50 - 190.16) ms-0.1%
process.time_to_main_ms70.50 ± (70.40 - 70.59) ms70.46 ± (70.33 - 70.59) ms-0.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.73 ± (11.66 - 11.81) MB11.82 ± (11.79 - 11.85) MB+0.7%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.1%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms367.59 ± (366.15 - 369.03) ms366.93 ± (365.43 - 368.42) ms-0.2%
process.time_to_main_ms428.03 ± (427.45 - 428.61) ms428.83 ± (428.28 - 429.38) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.89 ± (47.86 - 47.93) MB47.86 ± (47.83 - 47.89) MB-0.1%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.1%
Comparison explanation

Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:

  • Welch test with statistical test for significance of 5%
  • Only results indicating a difference greater than 5% and 5 ms are considered.

Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.

Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).

Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
    title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (76ms)  : 70, 82
    master - mean (76ms)  : 69, 82

    section Bailout
    This PR (7904) - mean (81ms)  : 75, 86
    master - mean (79ms)  : 75, 84

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (1,061ms)  : 1004, 1119
    master - mean (1,060ms)  : 1002, 1119

Loading
FakeDbCommand (.NET Core 3.1)
gantt
    title Execution time (ms) FakeDbCommand (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (118ms)  : 111, 126
    master - mean (117ms)  : 110, 124

    section Bailout
    This PR (7904) - mean (118ms)  : 111, 124
    master - mean (118ms)  : 112, 124

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (755ms)  : 718, 791
    master - mean (753ms)  : 711, 795

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (105ms)  : 100, 111
    master - mean (104ms)  : 97, 110

    section Bailout
    This PR (7904) - mean (106ms)  : 100, 111
    master - mean (105ms)  : 99, 111

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (703ms)  : 673, 733
    master - mean (698ms)  : 673, 723

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (102ms)  : 95, 110
    master - mean (103ms)  : 97, 109

    section Bailout
    This PR (7904) - mean (104ms)  : 96, 111
    master - mean (105ms)  : 99, 111

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (680ms)  : 648, 712
    master - mean (679ms)  : 649, 708

Loading
HttpMessageHandler (.NET Framework 4.8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (194ms)  : 189, 199
    master - mean (193ms)  : 189, 197

    section Bailout
    This PR (7904) - mean (197ms)  : 193, 200
    master - mean (197ms)  : 194, 199

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (1,125ms)  : 1052, 1198
    master - mean (1,118ms)  : 1052, 1184

Loading
HttpMessageHandler (.NET Core 3.1)
gantt
    title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (279ms)  : 274, 284
    master - mean (278ms)  : 272, 284

    section Bailout
    This PR (7904) - mean (278ms)  : 275, 281
    master - mean (278ms)  : 272, 283

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (916ms)  : 876, 956
    master - mean (909ms)  : 869, 950

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (271ms)  : 264, 278
    master - mean (271ms)  : 266, 277

    section Bailout
    This PR (7904) - mean (271ms)  : 267, 275
    master - mean (270ms)  : 267, 273

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (888ms)  : 844, 931
    master - mean (883ms)  : 847, 920

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7904) - mean (271ms)  : 263, 280
    master - mean (270ms)  : 264, 277

    section Bailout
    This PR (7904) - mean (270ms)  : 265, 275
    master - mean (270ms)  : 267, 273

    section CallTarget+Inlining+NGEN
    This PR (7904) - mean (827ms)  : 802, 852
    master - mean (826ms)  : 808, 844

Loading

@andrewlock andrewlock enabled auto-merge (squash) December 4, 2025 10:23
@andrewlock andrewlock merged commit 8097cf3 into master Dec 4, 2025
84 of 151 checks passed
@andrewlock andrewlock deleted the andrew/fix-assembly-references branch December 4, 2025 10:41
@github-actions github-actions bot added this to the vNext-v3 milestone Dec 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:tests unit tests, integration tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants