time_t ioloop_time = 0;
struct timeval ioloop_timeval;
-
struct ioloop *current_ioloop = NULL;
+uint64_t ioloop_global_wait_usecs = 0;
+
static ARRAY(io_switch_callback_t *) io_switch_callbacks = ARRAY_INIT;
static void io_loop_initialize_handler(struct ioloop *ioloop)
ioloop->time_moved_callback(ioloop->next_max_time,
ioloop_timeval.tv_sec);
}
- ioloop->ioloop_wait_usecs +=
+ long long diff =
timeval_diff_usecs(&ioloop_timeval, &prev_ioloop_timeval);
+ ioloop->ioloop_wait_usecs += diff;
+ ioloop_global_wait_usecs += diff;
}
ioloop_time = ioloop_timeval.tv_sec;
extern struct timeval ioloop_timeval;
extern struct ioloop *current_ioloop;
+/* Number of microseconds spent on all the ioloops waiting for themselves. */
+extern uint64_t ioloop_global_wait_usecs;
/* You can create different handlers for IO_READ and IO_WRITE. IO_READ and
IO_ERROR can't use different handlers (and there's no point anyway).