From d5f2c93e68b4425a43a261f3573388c1b925f71d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 17 Mar 2026 01:38:19 -1000 Subject: [PATCH] Add benchmarks for set_timeout, set_interval, and defer registration Measures the cost of registering scheduler items: - Scheduler_SetTimeout: set_timeout with 1s delay (heap path) - Scheduler_SetInterval: set_interval with 1s period (heap path + offset calc) - Scheduler_Defer: Component::defer (set_timeout with delay=0) Uses i%5 for IDs to exercise the cancel-existing-timer path that happens when re-registering with the same ID. --- tests/benchmarks/core/bench_scheduler.cpp | 49 +++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/benchmarks/core/bench_scheduler.cpp b/tests/benchmarks/core/bench_scheduler.cpp index 3d2cd0bda2..1b61223f75 100644 --- a/tests/benchmarks/core/bench_scheduler.cpp +++ b/tests/benchmarks/core/bench_scheduler.cpp @@ -77,6 +77,55 @@ static void Scheduler_Call_5IntervalsFiring(benchmark::State &state) { } BENCHMARK(Scheduler_Call_5IntervalsFiring); +// --- Scheduler: set_timeout registration --- + +static void Scheduler_SetTimeout(benchmark::State &state) { + Scheduler scheduler; + Component dummy_component; + + for (auto _ : state) { + for (int i = 0; i < kInnerIterations; i++) { + scheduler.set_timeout(&dummy_component, static_cast(i % 5), 1000, []() {}); + } + scheduler.process_to_add(); + benchmark::DoNotOptimize(scheduler); + } + state.SetItemsProcessed(state.iterations() * kInnerIterations); +} +BENCHMARK(Scheduler_SetTimeout); + +// --- Scheduler: set_interval registration --- + +static void Scheduler_SetInterval(benchmark::State &state) { + Scheduler scheduler; + Component dummy_component; + + for (auto _ : state) { + for (int i = 0; i < kInnerIterations; i++) { + scheduler.set_interval(&dummy_component, static_cast(i % 5), 1000, []() {}); + } + scheduler.process_to_add(); + benchmark::DoNotOptimize(scheduler); + } + state.SetItemsProcessed(state.iterations() * kInnerIterations); +} +BENCHMARK(Scheduler_SetInterval); + +// --- Scheduler: defer registration --- + +static void Scheduler_Defer(benchmark::State &state) { + Component dummy_component; + + for (auto _ : state) { + for (int i = 0; i < kInnerIterations; i++) { + dummy_component.defer(static_cast(i % 5), []() {}); + } + benchmark::DoNotOptimize(dummy_component); + } + state.SetItemsProcessed(state.iterations() * kInnerIterations); +} +BENCHMARK(Scheduler_Defer); + // --- Scheduler: next_schedule_in() calculation --- static void Scheduler_NextScheduleIn(benchmark::State &state) {