mirror of
https://github.com/esphome/esphome.git
synced 2026-09-16 17:48:40 +00:00
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.
This commit is contained in:
@@ -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<uint32_t>(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<uint32_t>(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<uint32_t>(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) {
|
||||
|
||||
Reference in New Issue
Block a user