static void test_timeval_diff(void)
{
	static struct timeval input[] = {
		{ 1, 0 }, { 0, 999999 },
		{ 1, 0 }, { 0, 999001 },
		{ 1, 1 }, { 0, 999001 },
		{ 2, 1 }, { 1, 0 },
		{ INT_MAX, 0 }, { INT_MAX-1, 1 }
	};
	static int output[] = {
		1,
		999,
		1000,
		1000001,
		999999
	};
	unsigned int i;
	long long udiff;
	int mdiff;

	test_begin("timeval_diff_*()");
	for (i = 0; i < N_ELEMENTS(input); i += 2) {
		udiff = timeval_diff_usecs(&input[i], &input[i+1]);
		mdiff = timeval_diff_msecs(&input[i], &input[i+1]);
		test_assert(udiff == output[i/2]);
		test_assert(mdiff == udiff/1000);

		udiff = timeval_diff_usecs(&input[i+1], &input[i]);
		mdiff = timeval_diff_msecs(&input[i+1], &input[i]);
		test_assert(udiff == -output[i/2]);
		test_assert(mdiff == udiff/1000);
	}
	test_end();
}
Ejemplo n.º 2
0
bool command_exec(struct client_command_context *cmd)
{
	const struct command_hook *hook;
	long long diff;
	bool finished;

	if (cmd->last_ioloop_time.tv_sec != 0) {
		diff = timeval_diff_usecs(&ioloop_timeval, &cmd->last_ioloop_time);
		if (diff > 0)
			cmd->usecs_in_ioloop += diff;
	}

	array_foreach(&command_hooks, hook)
		hook->pre(cmd);
	finished = cmd->func(cmd);
	array_foreach(&command_hooks, hook)
		hook->post(cmd);
	if (cmd->state == CLIENT_COMMAND_STATE_DONE)
		finished = TRUE;
	if (!finished) {
		io_loop_time_refresh();
		cmd->last_ioloop_time = ioloop_timeval;
	}
	return finished;
}
Ejemplo n.º 3
0
static void timeval_add_diff(struct timeval *dest,
			     const struct timeval *newsrc,
			     const struct timeval *oldsrc)
{
	long long usecs;

	usecs = timeval_diff_usecs(newsrc, oldsrc);
	dest->tv_sec += usecs / USECS_PER_SEC;
	dest->tv_usec += usecs % USECS_PER_SEC;
	if (dest->tv_usec > USECS_PER_SEC) {
		dest->tv_usec -= USECS_PER_SEC;
		dest->tv_sec++;
	}
}
Ejemplo n.º 4
0
int timeval_diff_msecs(const struct timeval *tv1, const struct timeval *tv2)
{
    return timeval_diff_usecs(tv1, tv2) / 1000;
}