summaryrefslogtreecommitdiff
path: root/tests/kms_flip.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-20 16:11:49 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-20 16:11:57 +0200
commit45cd89ab3d18dc2c869951db4134c1e5dde45c1b (patch)
tree76878ea3f45e278188a6e2ed2d4687c7cee001eb /tests/kms_flip.c
parent8e11f8778adff693f3a0246fe0e87be4e3ddb83f (diff)
tests/kms_flip: Unconfuse the framenumber step checking
We run flips and vblank waits in parallel, which means the step for each is the maximum. If we'd switch to an interleaved scheme (to be able to check the correlation) we'd need to add them instead. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'tests/kms_flip.c')
-rw-r--r--tests/kms_flip.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/tests/kms_flip.c b/tests/kms_flip.c
index b63d3241..269df526 100644
--- a/tests/kms_flip.c
+++ b/tests/kms_flip.c
@@ -71,6 +71,8 @@
#define DRM_CAP_TIMESTAMP_MONOTONIC 6
#endif
+#define max(a, b) ((a) > (b) ? (a) : (b))
+
drmModeRes *resources;
int drm_fd;
static drm_intel_bufmgr *bufmgr;
@@ -132,6 +134,8 @@ struct test_output {
struct event_state flip_state;
struct event_state vblank_state;
+ /* Overall step between each round */
+ int seq_step;
unsigned int pending_events;
int flip_count;
};
@@ -503,16 +507,16 @@ static void check_state(struct test_output *o, struct event_state *es)
if (!(o->flags & (TEST_DPMS | TEST_MODESET))) {
/* check only valid if no modeset happens in between, that
* increments by (1 << 23) on each step. */
- if (es->current_seq - (es->last_seq + es->seq_step) > 1UL << 23) {
+ if (es->current_seq - (es->last_seq + o->seq_step) > 1UL << 23) {
fprintf(stderr, "unexpected %s seq %u, should be >= %u\n",
- es->name, es->current_seq, es->last_seq + es->seq_step);
+ es->name, es->current_seq, es->last_seq + o->seq_step);
igt_fail(10);
}
}
if ((o->flags & TEST_CHECK_TS) && (!analog_tv_connector(o))) {
timersub(&es->current_ts, &es->last_ts, &diff);
- usec_interflip = (double)es->seq_step * frame_time(o);
+ usec_interflip = (double)o->seq_step * frame_time(o);
if (fabs((((double) diff.tv_usec) - usec_interflip) /
usec_interflip) > 0.005) {
fprintf(stderr, "inter-%s ts jitter: %is, %ius\n",
@@ -521,10 +525,10 @@ static void check_state(struct test_output *o, struct event_state *es)
igt_fail(9);
}
- if (es->current_seq != es->last_seq + es->seq_step) {
+ if (es->current_seq != es->last_seq + o->seq_step) {
fprintf(stderr, "unexpected %s seq %u, expected %u\n",
es->name, es->current_seq,
- es->last_seq + es->seq_step);
+ es->last_seq + o->seq_step);
igt_fail(9);
}
}
@@ -1023,7 +1027,7 @@ static void check_final_state(struct test_output *o, struct event_state *es,
int expected;
int count = es->count;
- count *= es->seq_step;
+ count *= o->seq_step;
expected = elapsed * o->kmode[0].vrefresh / (1000 * 1000);
igt_assert_f(count >= expected * 99/100 && count <= expected * 101/100,
"dropped frames, expected %d, counted %d, encoder type %d\n",
@@ -1158,11 +1162,17 @@ static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration_m
wait_for_events(o);
o->current_fb_id = 1;
- o->flip_state.seq_step = 1;
- if (o->flags & TEST_VBLANK_ABSOLUTE)
- o->vblank_state.seq_step = 5;
+ if (o->flags & TEST_FLIP)
+ o->flip_state.seq_step = 1;
else
- o->vblank_state.seq_step = 1;
+ o->flip_state.seq_step = 0;
+ if (o->flags & TEST_VBLANK)
+ o->vblank_state.seq_step = 10;
+ else
+ o->vblank_state.seq_step = 0;
+
+ /* We run the vblank and flip actions in parallel by default. */
+ o->seq_step = max(o->vblank_state.seq_step, o->flip_state.seq_step);
elapsed = event_loop(o, duration_ms);