bench: add new idle loop count benchmark
This commit is contained in:
parent
71a66c17a1
commit
3f37ba859f
@ -21,6 +21,7 @@
|
||||
|
||||
BENCHMARK_DECLARE (sizes)
|
||||
BENCHMARK_DECLARE (loop_count)
|
||||
BENCHMARK_DECLARE (loop_count_timed)
|
||||
BENCHMARK_DECLARE (ping_pongs)
|
||||
BENCHMARK_DECLARE (tcp_write_batch)
|
||||
BENCHMARK_DECLARE (tcp4_pound_100)
|
||||
@ -55,6 +56,7 @@ HELPER_DECLARE (dns_server)
|
||||
TASK_LIST_START
|
||||
BENCHMARK_ENTRY (sizes)
|
||||
BENCHMARK_ENTRY (loop_count)
|
||||
BENCHMARK_ENTRY (loop_count_timed)
|
||||
|
||||
BENCHMARK_ENTRY (ping_pongs)
|
||||
BENCHMARK_HELPER (ping_pongs, tcp4_echo_server)
|
||||
|
||||
@ -25,12 +25,20 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define NUM_TICKS (2 * 1000 * 1000)
|
||||
|
||||
static unsigned long ticks;
|
||||
static uv_idle_t idle_handle;
|
||||
static uv_timer_t timer_handle;
|
||||
|
||||
|
||||
static void idle_cb(uv_idle_t* handle, int status) {
|
||||
if (++ticks == NUM_TICKS)
|
||||
uv_idle_stop(handle);
|
||||
}
|
||||
|
||||
|
||||
static void idle2_cb(uv_idle_t* handle, int status) {
|
||||
ticks++;
|
||||
}
|
||||
|
||||
@ -43,13 +51,35 @@ static void timer_cb(uv_timer_t* handle, int status) {
|
||||
|
||||
BENCHMARK_IMPL(loop_count) {
|
||||
uv_loop_t* loop = uv_default_loop();
|
||||
|
||||
uv_timer_init(loop, &timer_handle);
|
||||
uv_timer_start(&timer_handle, timer_cb, 5000, 0);
|
||||
uint64_t ns;
|
||||
|
||||
uv_idle_init(loop, &idle_handle);
|
||||
uv_idle_start(&idle_handle, idle_cb);
|
||||
|
||||
ns = uv_hrtime();
|
||||
uv_run(loop);
|
||||
ns = uv_hrtime() - ns;
|
||||
|
||||
ASSERT(ticks == NUM_TICKS);
|
||||
|
||||
LOGF("loop_count: %d ticks in %.2fs (%.0f/s)\n",
|
||||
NUM_TICKS,
|
||||
ns / 1e9,
|
||||
NUM_TICKS / (ns / 1e9));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BENCHMARK_IMPL(loop_count_timed) {
|
||||
uv_loop_t* loop = uv_default_loop();
|
||||
|
||||
uv_idle_init(loop, &idle_handle);
|
||||
uv_idle_start(&idle_handle, idle2_cb);
|
||||
|
||||
uv_timer_init(loop, &timer_handle);
|
||||
uv_timer_start(&timer_handle, timer_cb, 5000, 0);
|
||||
|
||||
uv_run(loop);
|
||||
|
||||
LOGF("loop_count: %lu ticks (%.0f ticks/s)\n", ticks, ticks / 5.0);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user