Update UpdateVendors tool to allow vendoring non-C# code#8529
Conversation
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8529) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-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:
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 chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8529) - mean (72ms) : 70, 75
master - mean (73ms) : 70, 76
section Bailout
This PR (8529) - mean (78ms) : 74, 82
master - mean (78ms) : 76, 80
section CallTarget+Inlining+NGEN
This PR (8529) - mean (1,074ms) : 1031, 1117
master - mean (1,084ms) : 1027, 1142
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 (8529) - mean (114ms) : 110, 118
master - mean (113ms) : 108, 118
section Bailout
This PR (8529) - mean (118ms) : 112, 124
master - mean (115ms) : 112, 117
section CallTarget+Inlining+NGEN
This PR (8529) - mean (780ms) : 756, 804
master - mean (784ms) : 752, 816
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8529) - mean (101ms) : 97, 105
master - mean (100ms) : 97, 104
section Bailout
This PR (8529) - mean (105ms) : 100, 111
master - mean (102ms) : 100, 104
section CallTarget+Inlining+NGEN
This PR (8529) - mean (941ms) : 909, 973
master - mean (940ms) : 908, 972
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8529) - mean (100ms) : 96, 104
master - mean (101ms) : 97, 105
section Bailout
This PR (8529) - mean (101ms) : 98, 104
master - mean (104ms) : 100, 109
section CallTarget+Inlining+NGEN
This PR (8529) - mean (824ms) : 781, 868
master - mean (822ms) : 783, 860
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 (8529) - mean (201ms) : 194, 208
master - mean (202ms) : 193, 210
section Bailout
This PR (8529) - mean (206ms) : 197, 215
master - mean (206ms) : 198, 215
section CallTarget+Inlining+NGEN
This PR (8529) - mean (1,192ms) : 1143, 1241
master - mean (1,207ms) : 1140, 1274
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 (8529) - mean (288ms) : 278, 299
master - mean (292ms) : 277, 307
section Bailout
This PR (8529) - mean (289ms) : 280, 298
master - mean (292ms) : 278, 305
section CallTarget+Inlining+NGEN
This PR (8529) - mean (953ms) : 919, 987
master - mean (961ms) : 934, 987
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8529) - mean (283ms) : 271, 296
master - mean (290ms) : 274, 305
section Bailout
This PR (8529) - mean (284ms) : 273, 294
master - mean (285ms) : 270, 301
section CallTarget+Inlining+NGEN
This PR (8529) - mean (1,156ms) : 1110, 1201
master - mean (1,158ms) : 1109, 1206
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8529) - mean (282ms) : 272, 293
master - mean (283ms) : 270, 297
section Bailout
This PR (8529) - mean (283ms) : 271, 295
master - mean (285ms) : 269, 301
section CallTarget+Inlining+NGEN
This PR (8529) - mean (1,045ms) : 987, 1102
master - mean (1,043ms) : 996, 1089
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BenchmarksBenchmark execution time: 2026-04-28 10:51:04 Comparing candidate commit 99c7117 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 27 metrics, 0 unstable metrics, 61 known flaky benchmarks, 26 flaky benchmarks without significant changes.
|
## Summary of changes - Update spdlog to latest - Fix build issue due to missing `/utf8` ## Reason for change We want to update spdlog, partly because newer versions of macos (Tahoe) require a newer version of `fmt`, which spdlog uses. ## Implementation details - Update the vendored version (from #8529) to use 1.17.0 (current latest), which also bumps `{fmt}` library to 12.1.0. - Fix build issue on Windows related to utf-8. The latest version of `{fmt}` requires narrow string literals to be UTF-8 encoded via a `static_assert`: ```c++ static_assert(!FMT_UNICODE || use_utf8, "Unicode support requires compiling with /utf-8"); ``` `use_utf8` is false on Windows unless `/utf-8` is passed (it tests whether `"\u00A7"[1] == '\xA7'`, which only holds when narrow literals are UTF-8). Our Windows native projects compile with the default execution charset, so this fails. That gives us two options: - Define `FMT_UNICODE=0` to disable unicode support in `{fmt}` - Compile with `/utf-8` to enable unicode support everywhere Chose `FMT_UNICODE=0` as it preserves the existing execution-charset behavior — adding `/utf-8` would change the encoding of every narrow string literal in our codebase, which seems higher risk. We log via `std::string` (ASCII-only log messages), so disabling fmt's Unicode requirement should be safe. ## Test coverage This is the test, if the build works and the tests pass, I'll check the log files for anything suspicious, but otherwise we should be good. ## Other details You may want to review the 3 commits separately: 1. Bump the vendored version 2. Run the `UpdateVendors` tool to update the vendored code 3. Fix the build issues Stacked on [Update UpdateVendors tool to allow vendoring non-C# code](https://github.com/DataDog/dd-trace-dotnet/pull/8529#top)#8529
Summary of changes
UpdateVendorstool to allow outputting to arbitrary directoryReason for change
We want to update spdlog. The update was done manually in #4044, but using the existing infrastructure seems preferable.
Note that this PR doesn't bump the dependency, it just sets up the infrastructure to make it easy.
Implementation details
RelativePathToVendorDirectoryOverrideto allow vendoring to arbitrary directoryIsNuGetPackageto allow opt-out of the NuGet dependabot fileTest coverage
Ran the tool, and it updated spdlog, but the code was the same
Other details
We'll bump the spdlog version in a subsequent PR