lib: Tweak calibration of initial settimer delay

If we assume that the first settimer and clock_gettime() itself have
appreciable overhead, try to exclude those from the calibration delay.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2016-05-02 14:42:54 +01:00
parent 92a9588841
commit 4782591873

View File

@ -182,6 +182,9 @@ static bool igt_sigiter_start(struct igt_sigiter *iter, bool enable)
sev.sigev_signo = SIGRTMIN;
igt_assert(timer_create(CLOCK_MONOTONIC, &sev, &__igt_sigiter.timer) == 0);
memset(&its, 0, sizeof(its));
igt_assert(timer_settime(__igt_sigiter.timer, 0, &its, NULL) == 0);
memset(&act, 0, sizeof(act));
act.sa_sigaction = sigiter;
act.sa_flags = SA_SIGINFO;
@ -192,7 +195,6 @@ static bool igt_sigiter_start(struct igt_sigiter *iter, bool enable)
* and avoid the timer firing before we enter the drmIoctl.
*/
igt_assert(clock_gettime(CLOCK_MONOTONIC, &start) == 0);
memset(&its, 0, sizeof(its));
igt_assert(timer_settime(__igt_sigiter.timer, 0, &its, NULL) == 0);
igt_assert(clock_gettime(CLOCK_MONOTONIC, &end) == 0);
@ -202,6 +204,11 @@ static bool igt_sigiter_start(struct igt_sigiter *iter, bool enable)
__igt_sigiter.offset.tv_nsec += NSEC_PER_SEC;
__igt_sigiter.offset.tv_sec -= 1;
}
if (__igt_sigiter.offset.tv_sec < 0) {
__igt_sigiter.offset.tv_nsec = 0;
__igt_sigiter.offset.tv_sec = 0;
}
igt_assert(__igt_sigiter.offset.tv_sec == 0);
igt_debug("Initial delay for interruption: %ld.%09lds\n",
__igt_sigiter.offset.tv_sec,