Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
bench: add new idle loop count benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
bnoordhuis committed May 31, 2012
1 parent 71a66c1 commit 3f37ba8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
2 changes: 2 additions & 0 deletions test/benchmark-list.h
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
36 changes: 33 additions & 3 deletions test/benchmark-loop-count.c
Expand Up @@ -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++;
}

Expand All @@ -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);
Expand Down

0 comments on commit 3f37ba8

Please sign in to comment.