| 107 | }; |
| 108 | |
| 109 | BenchmarkStats BuildBenchmarkStats(std::vector<long long> samples) { |
| 110 | BenchmarkStats stats; |
| 111 | if (samples.empty()) { |
| 112 | return stats; |
| 113 | } |
| 114 | |
| 115 | std::sort(samples.begin(), samples.end()); |
| 116 | stats.min_ms = samples.front(); |
| 117 | stats.median_ms = samples[samples.size() / 2]; |
| 118 | const size_t p95_index = std::min(samples.size() - 1, static_cast<size_t>((samples.size() * 95 + 99) / 100 - 1)); |
| 119 | stats.p95_ms = samples[p95_index]; |
| 120 | stats.avg_ms = static_cast<double>(std::accumulate(samples.begin(), samples.end(), 0LL)) / |
| 121 | static_cast<double>(samples.size()); |
| 122 | return stats; |
| 123 | } |
| 124 | |
| 125 | void RecordBenchmarkStats(const std::string &name, const BenchmarkStats &stats) { |
| 126 | ::testing::Test::RecordProperty(name + "_min_ms", stats.min_ms); |
no test coverage detected