[Intel-gfx] [PATCH igt] igt/kms_setmode: Adjust timing assertion from percentage to scanline

Chris Wilson chris at chris-wilson.co.uk
Fri Nov 25 12:39:21 UTC 2016


The target is that we report the vblank time accurate to within a
scanline (limit of the hw with which we can reliably compensate).

Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
---
 tests/kms_setmode.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
index 9dafca0..e1e1893 100644
--- a/tests/kms_setmode.c
+++ b/tests/kms_setmode.c
@@ -417,6 +417,11 @@ static double frame_time(const drmModeModeInfo *kmode)
 	return 1000.0 * kmode->htotal * kmode->vtotal / kmode->clock;
 }
 
+static double line_time(const drmModeModeInfo *kmode)
+{
+	return 1000.0 * kmode->htotal / kmode->clock;
+}
+
 static void check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 {
 #define CALIBRATE_TS_STEPS 120 /* ~2s has to be less than 128! */
@@ -425,6 +430,7 @@ static void check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 	uint32_t last_seq;
 	uint64_t last_timestamp;
 	double expected;
+	double accuracy;
 	double mean;
 	double stddev;
 	int n;
@@ -470,15 +476,21 @@ static void check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 
 	mean = igt_stats_get_mean(&stats);
 	stddev = igt_stats_get_std_deviation(&stats);
+	accuracy = 3.090 * stddev; /* 2-tailed 99% confidence */
+
+	igt_info("Expected frametime: %.0fus; measured %.1fus +- %.3fus accuracy %.2f%% [%.2f scanlines]\n",
+		 expected, mean, stddev,
+		 100 * accuracy / mean, accuracy / line_time(kmode));
 
-	igt_info("Expected frametime: %.0fus; measured %.1fus +- %.3fus accuracy %.2f%%\n",
-		 expected, mean, stddev, 100 * 6 * stddev / mean);
-	igt_assert(6 * stddev / mean < 0.005); /* 99% accuracy within 0.5% */
+	/* 99% accuracy within one scanline */
+	igt_assert_f(accuracy < line_time(kmode),
+		     "vblank accuracy (%.3fus, %.1f%%) worse than a scanline (%.3fus)\n",
+		     accuracy, 100 * accuracy / mean, line_time(kmode));
 
 	igt_assert_f(fabs(mean - expected) < 2*stddev,
-		      "vblank interval differs from modeline! expected %.1fus, measured %1.fus +- %.3fus, difference %.1fus (%.1f sigma)\n",
-		      expected, mean, stddev,
-		      fabs(mean - expected), fabs(mean - expected) / stddev);
+		     "vblank interval differs from modeline! expected %.1fus, measured %1.fus +- %.3fus, difference %.1fus (%.1f sigma)\n",
+		     expected, mean, stddev,
+		     fabs(mean - expected), fabs(mean - expected) / stddev);
 }
 
 static void test_crtc_config(const struct test_config *tconf,
-- 
2.10.2



More information about the Intel-gfx mailing list