Measure per metric in render scale bench

This commit is contained in:
2025-09-03 12:51:49 -04:00
parent 52b0cb3e6e
commit 0ac4c31a53
2 changed files with 40 additions and 62 deletions

View File

@@ -156,54 +156,30 @@ int main() {
[&]() { histogram.observe(2.0); });
}
// Callback metrics performance
{
auto counter_family =
metric::create_counter("callback_counter", "Callback counter");
auto gauge_family =
metric::create_gauge("callback_gauge", "Callback gauge");
std::atomic<double> counter_value{0};
std::atomic<double> gauge_value{100};
// Register callbacks
counter_family.register_callback(
{{"type", "callback"}}, [&counter_value]() {
return counter_value.load(std::memory_order_relaxed);
});
gauge_family.register_callback({{"type", "callback"}}, [&gauge_value]() {
return gauge_value.load(std::memory_order_relaxed);
});
ArenaAllocator arena;
bench.run("render() - with callback metrics", [&]() {
auto output = metric::render(arena);
ankerl::nanobench::doNotOptimizeAway(output);
arena.reset();
});
}
// Render performance scaling
{
bench.unit("metric");
bench.title("render performance");
// Test render performance as number of metrics increases
std::vector<metric::Counter> counters;
std::vector<metric::Gauge> gauges;
std::vector<metric::Histogram> histograms;
auto counter_family =
metric::create_counter("scale_counter", "Scale counter");
auto gauge_family = metric::create_gauge("scale_gauge", "Scale gauge");
auto histogram_family = metric::create_histogram(
"scale_histogram", "Scale histogram",
std::initializer_list<double>{0.1, 0.5, 1.0, 2.5, 5.0, 10.0, 25.0,
50.0});
// Create varying numbers of metrics
for (int scale : {10, 100, 1000}) {
bench.batch(scale);
metric::reset_metrics_for_testing();
std::vector<metric::Counter> counters;
std::vector<metric::Gauge> gauges;
std::vector<metric::Histogram> histograms;
auto counter_family =
metric::create_counter("scale_counter", "Scale counter");
auto gauge_family = metric::create_gauge("scale_gauge", "Scale gauge");
auto buckets = std::initializer_list<double>{0.1, 0.5, 1.0, 2.5,
5.0, 10.0, 25.0, 50.0};
auto histogram_family = metric::create_histogram(
"scale_histogram", "Scale histogram", buckets);
std::atomic<double> counter_value{3.1415924654};
bench.batch(scale * (/*counter*/ 1 + /*gauge*/ 1 + /*callback*/ 1 +
/*histogram*/ (buckets.size() * 2 + 2)));
// Clear previous metrics by creating new families
// (Note: In real usage, metrics persist for application lifetime)
for (int i = 0; i < scale; ++i) {
@@ -217,6 +193,12 @@ int main() {
counters.back().inc(static_cast<double>(i));
gauges.back().set(static_cast<double>(i * 2));
histograms.back().observe(static_cast<double>(i) * 0.1);
// Register callbacks
counter_family.register_callback(
{{"type", "callback"}, {"id", std::to_string(i)}},
[&counter_value]() {
return counter_value.load(std::memory_order_relaxed);
});
}
ArenaAllocator arena;