Conversation
BenchmarksBenchmark execution time: 2026-02-17 17:38:56 Comparing candidate commit 8516714 in PR branch Found 2 performance improvements and 9 performance regressions! Performance is the same for 165 metrics, 16 unstable metrics. scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.AspNetCoreBenchmark.SendRequest net6.0
scenario:Benchmarks.Trace.AspNetCoreBenchmark.SendRequest netcoreapp3.1
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net472
scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool net6.0
scenario:Benchmarks.Trace.DbCommandBenchmark.ExecuteNonQuery net6.0
scenario:Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark netcoreapp3.1
scenario:Benchmarks.Trace.SingleSpanAspNetCoreBenchmark.SingleSpanAspNetCore net6.0
|
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8212) and master.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 203.03 ± (202.87 - 203.75) ms | 225.37 ± (224.21 - 226.70) ms | +11.0% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 206.24 ± (206.11 - 206.99) ms | 228.32 ± (227.86 - 229.96) ms | +10.7% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1182.81 ± (1181.42 - 1187.30) ms | 1252.37 ± (1250.21 - 1257.86) ms | +5.9% | ❌⬆️ |
Full Metrics Comparison
FakeDbCommand
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 71.40 ± (71.35 - 71.63) ms | 75.91 ± (75.94 - 76.28) ms | +6.3% | ✅⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 76.81 ± (76.76 - 77.14) ms | 81.01 ± (80.75 - 81.12) ms | +5.5% | ✅⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1071.45 ± (1070.11 - 1076.29) ms | 1092.64 ± (1092.57 - 1098.75) ms | +2.0% | ✅⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 23.09 ± (23.04 - 23.15) ms | 23.91 ± (23.86 - 23.96) ms | +3.5% | ✅⬆️ |
| process.time_to_main_ms | 93.73 ± (93.50 - 93.96) ms | 97.78 ± (97.56 - 98.01) ms | +4.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.45 ± (15.45 - 15.46) MB | 15.47 ± (15.47 - 15.48) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 12 ± (12 - 12) | 12 ± (12 - 12) | +0.0% | ✅ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 23.17 ± (23.13 - 23.21) ms | 23.69 ± (23.64 - 23.73) ms | +2.2% | ✅⬆️ |
| process.time_to_main_ms | 96.00 ± (95.76 - 96.25) ms | 98.75 ± (98.56 - 98.94) ms | +2.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.51 ± (15.51 - 15.52) MB | 15.48 ± (15.48 - 15.49) MB | -0.2% | ✅ |
| runtime.dotnet.threads.count | 13 ± (13 - 13) | 13 ± (13 - 13) | +0.0% | ✅ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 268.62 ± (266.03 - 271.20) ms | 280.61 ± (279.14 - 282.07) ms | +4.5% | ✅⬆️ |
| process.time_to_main_ms | 515.97 ± (515.27 - 516.67) ms | 532.58 ± (531.74 - 533.42) ms | +3.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 52.10 ± (52.08 - 52.12) MB | 52.13 ± (52.10 - 52.15) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | +0.0% | ✅⬆️ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 21.83 ± (21.79 - 21.88) ms | 22.30 ± (22.25 - 22.35) ms | +2.2% | ✅⬆️ |
| process.time_to_main_ms | 80.71 ± (80.55 - 80.88) ms | 83.94 ± (83.75 - 84.13) ms | +4.0% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.16 ± (15.16 - 15.16) MB | 15.19 ± (15.19 - 15.20) MB | +0.2% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 21.82 ± (21.78 - 21.86) ms | 22.24 ± (22.19 - 22.29) ms | +1.9% | ✅⬆️ |
| process.time_to_main_ms | 82.71 ± (82.51 - 82.90) ms | 84.86 ± (84.63 - 85.09) ms | +2.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 15.28 ± (15.27 - 15.28) MB | 15.29 ± (15.29 - 15.29) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 267.16 ± (266.35 - 267.96) ms | 275.70 ± (274.80 - 276.61) ms | +3.2% | ✅⬆️ |
| process.time_to_main_ms | 489.54 ± (488.70 - 490.37) ms | 510.03 ± (509.24 - 510.81) ms | +4.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 52.92 ± (52.90 - 52.95) MB | 52.93 ± (52.91 - 52.96) MB | +0.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | -0.1% | ✅ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 19.37 ± (19.33 - 19.41) ms | 20.19 ± (20.15 - 20.23) ms | +4.2% | ✅⬆️ |
| process.time_to_main_ms | 72.71 ± (72.54 - 72.87) ms | 76.38 ± (76.20 - 76.55) ms | +5.0% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.65 ± (7.64 - 7.66) MB | 7.69 ± (7.68 - 7.69) MB | +0.5% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 19.38 ± (19.33 - 19.43) ms | 20.22 ± (20.17 - 20.27) ms | +4.3% | ✅⬆️ |
| process.time_to_main_ms | 73.84 ± (73.67 - 74.01) ms | 77.91 ± (77.76 - 78.07) ms | +5.5% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.71 ± (7.70 - 7.72) MB | 7.74 ± (7.73 - 7.74) MB | +0.4% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 187.75 ± (186.83 - 188.67) ms | 192.41 ± (191.67 - 193.14) ms | +2.5% | ✅⬆️ |
| process.time_to_main_ms | 445.02 ± (444.20 - 445.85) ms | 462.53 ± (461.84 - 463.22) ms | +3.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 36.00 ± (35.96 - 36.04) MB | 36.18 ± (36.14 - 36.22) MB | +0.5% | ✅⬆️ |
| runtime.dotnet.threads.count | 27 ± (27 - 27) | 27 ± (27 - 27) | -0.3% | ✅ |
HttpMessageHandler
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 203.03 ± (202.87 - 203.75) ms | 225.37 ± (224.21 - 226.70) ms | +11.0% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 206.24 ± (206.11 - 206.99) ms | 228.32 ± (227.86 - 229.96) ms | +10.7% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1182.81 ± (1181.42 - 1187.30) ms | 1252.37 ± (1250.21 - 1257.86) ms | +5.9% | ❌⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 201.34 ± (200.92 - 201.76) ms | 223.18 ± (222.19 - 224.17) ms | +10.8% | ✅⬆️ |
| process.time_to_main_ms | 93.16 ± (92.90 - 93.42) ms | 103.04 ± (102.62 - 103.46) ms | +10.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.61 ± (20.60 - 20.63) MB | 20.35 ± (20.33 - 20.36) MB | -1.3% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | +1.0% | ✅⬆️ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 201.93 ± (201.50 - 202.37) ms | 224.17 ± (223.18 - 225.15) ms | +11.0% | ✅⬆️ |
| process.time_to_main_ms | 94.94 ± (94.58 - 95.30) ms | 105.33 ± (104.93 - 105.74) ms | +10.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 20.55 ± (20.53 - 20.57) MB | 20.38 ± (20.37 - 20.40) MB | -0.8% | ✅ |
| runtime.dotnet.threads.count | 21 ± (21 - 21) | 21 ± (21 - 21) | +2.0% | ✅⬆️ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 460.10 ± (458.07 - 462.13) ms | 489.12 ± (486.54 - 491.69) ms | +6.3% | ✅⬆️ |
| process.time_to_main_ms | 524.59 ± (523.77 - 525.41) ms | 557.27 ± (556.00 - 558.53) ms | +6.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 61.88 ± (61.75 - 62.01) MB | 60.65 ± (60.53 - 60.78) MB | -2.0% | ✅ |
| runtime.dotnet.threads.count | 29 ± (29 - 29) | 30 ± (30 - 30) | +1.2% | ✅⬆️ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 204.45 ± (203.96 - 204.94) ms | 218.01 ± (217.19 - 218.83) ms | +6.6% | ✅⬆️ |
| process.time_to_main_ms | 75.24 ± (74.97 - 75.51) ms | 79.92 ± (79.65 - 80.19) ms | +6.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.23 ± (16.21 - 16.26) MB | 16.12 ± (16.10 - 16.13) MB | -0.7% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 20) | +1.0% | ✅⬆️ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 203.25 ± (202.78 - 203.72) ms | 218.39 ± (217.48 - 219.31) ms | +7.5% | ✅⬆️ |
| process.time_to_main_ms | 75.78 ± (75.58 - 75.98) ms | 81.28 ± (80.97 - 81.59) ms | +7.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.27 ± (16.25 - 16.29) MB | 16.17 ± (16.16 - 16.19) MB | -0.6% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 21 ± (20 - 21) | +1.7% | ✅⬆️ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 466.38 ± (463.91 - 468.85) ms | 484.52 ± (478.88 - 490.17) ms | +3.9% | ✅⬆️ |
| process.time_to_main_ms | 473.07 ± (472.39 - 473.75) ms | 499.42 ± (498.33 - 500.51) ms | +5.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 57.14 ± (57.02 - 57.27) MB | 57.53 ± (57.36 - 57.70) MB | +0.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 30 ± (30 - 30) | 30 ± (30 - 30) | +1.1% | ✅⬆️ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 206.87 ± (206.43 - 207.32) ms | 230.20 ± (228.87 - 231.53) ms | +11.3% | ✅⬆️ |
| process.time_to_main_ms | 81.25 ± (81.01 - 81.49) ms | 87.42 ± (87.01 - 87.83) ms | +7.6% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.11 ± (16.10 - 16.13) MB | 15.89 ± (15.87 - 15.91) MB | -1.4% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 19) | +0.0% | ✅⬆️ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 206.14 ± (205.64 - 206.64) ms | 228.27 ± (227.17 - 229.38) ms | +10.7% | ✅⬆️ |
| process.time_to_main_ms | 82.06 ± (81.85 - 82.28) ms | 89.64 ± (89.28 - 90.00) ms | +9.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.17 ± (16.15 - 16.18) MB | 15.98 ± (15.96 - 16.00) MB | -1.2% | ✅ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | +0.1% | ✅⬆️ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 414.65 ± (407.90 - 421.39) ms | 511.95 ± (510.21 - 513.69) ms | +23.5% | ✅⬆️ |
| process.time_to_main_ms | 485.34 ± (484.59 - 486.10) ms | 512.26 ± (511.12 - 513.39) ms | +5.5% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 53.78 ± (53.62 - 53.94) MB | 54.29 ± (54.26 - 54.32) MB | +1.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 29 ± (29 - 29) | 29 ± (29 - 29) | -0.5% | ✅ |
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 (8212) - mean (76ms) : 74, 79
master - mean (71ms) : 69, 74
section Bailout
This PR (8212) - mean (81ms) : 79, 83
master - mean (77ms) : 75, 79
section CallTarget+Inlining+NGEN
This PR (8212) - mean (1,096ms) : 1052, 1140
master - mean (1,073ms) : 1028, 1118
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 (8212) - mean (129ms) : 125, 134
master - mean (125ms) : 119, 130
section Bailout
This PR (8212) - mean (130ms) : 128, 132
master - mean (127ms) : 122, 132
section CallTarget+Inlining+NGEN
This PR (8212) - mean (846ms) : 804, 887
master - mean (814ms) : 768, 859
FakeDbCommand (.NET 6)
gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8212) - mean (113ms) : 110, 117
master - mean (109ms) : 106, 113
section Bailout
This PR (8212) - mean (114ms) : 111, 117
master - mean (112ms) : 109, 114
section CallTarget+Inlining+NGEN
This PR (8212) - mean (825ms) : 800, 850
master - mean (791ms) : 762, 820
FakeDbCommand (.NET 8)
gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8212) - mean (105ms) : 100, 109
master - mean (100ms) : 97, 103
section Bailout
This PR (8212) - mean (106ms) : 104, 108
master - mean (101ms) : 99, 103
section CallTarget+Inlining+NGEN
This PR (8212) - mean (687ms) : 662, 712
master - mean (661ms) : 642, 680
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 (8212) - mean (225ms) : 207, 244
master - mean (203ms) : 198, 209
section Bailout
This PR (8212) - mean (229ms) : crit, 213, 244
master - mean (207ms) : 202, 211
section CallTarget+Inlining+NGEN
This PR (8212) - mean (1,254ms) : crit, 1198, 1310
master - mean (1,184ms) : 1142, 1227
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 (8212) - mean (337ms) : 315, 359
master - mean (304ms) : 295, 313
section Bailout
This PR (8212) - mean (341ms) : crit, 319, 363
master - mean (306ms) : 299, 313
section CallTarget+Inlining+NGEN
This PR (8212) - mean (1,085ms) : crit, 1041, 1130
master - mean (1,018ms) : 981, 1055
HttpMessageHandler (.NET 6)
gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8212) - mean (307ms) : 292, 323
master - mean (288ms) : 279, 297
section Bailout
This PR (8212) - mean (309ms) : crit, 291, 328
master - mean (288ms) : 278, 297
section CallTarget+Inlining+NGEN
This PR (8212) - mean (1,023ms) : 922, 1125
master - mean (970ms) : 926, 1014
HttpMessageHandler (.NET 8)
gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8212) - mean (330ms) : 307, 352
master - mean (299ms) : 290, 308
section Bailout
This PR (8212) - mean (331ms) : crit, 306, 356
master - mean (299ms) : 290, 308
section CallTarget+Inlining+NGEN
This PR (8212) - mean (1,062ms) : crit, 1018, 1105
master - mean (939ms) : 832, 1045
Summary of changes
Test Datadog.Trace.ClrProfiler.IntegrationTests.CI.NUnitTests.SubmitTraces is failing on different branches unuder Linux. Skip while it's fixed.
Reason for change
Implementation details
Test coverage
Other details