tests/kms_flip: scale test runtime

On machines with many outputs and many crtcs it takes too long.
So scale the runtime by the number of output combinations we're trying
to light up.

Compensate the test runtime a bit by doubling most subtests' duration.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Daniel Vetter 2013-09-30 21:38:09 +02:00
parent 3f89d5403e
commit 1f0addb689

View File

@ -1101,7 +1101,7 @@ static unsigned int wait_for_events(struct test_output *o)
} }
/* Returned the elapsed time in us */ /* Returned the elapsed time in us */
static unsigned event_loop(struct test_output *o, unsigned duration_sec) static unsigned event_loop(struct test_output *o, unsigned duration_ms)
{ {
unsigned long start, end; unsigned long start, end;
@ -1116,7 +1116,7 @@ static unsigned event_loop(struct test_output *o, unsigned duration_sec)
check_all_state(o, completed_events); check_all_state(o, completed_events);
update_all_state(o, completed_events); update_all_state(o, completed_events);
if ((gettime_us() - start) / 1000000 >= duration_sec) if ((gettime_us() - start) / 1000 >= duration_ms)
break; break;
} }
@ -1129,13 +1129,10 @@ static unsigned event_loop(struct test_output *o, unsigned duration_sec)
return end - start; return end - start;
} }
static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration) static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration_ms)
{ {
unsigned elapsed; unsigned elapsed;
o->bpp = 32;
o->depth = 24;
connector_find_preferred_mode(o->_connector[0], crtc_idx, o); connector_find_preferred_mode(o->_connector[0], crtc_idx, o);
if (!o->mode_valid) if (!o->mode_valid)
return; return;
@ -1154,10 +1151,9 @@ static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration)
o->bpp, o->depth, false, &o->fb_info[1]); o->bpp, o->depth, false, &o->fb_info[1]);
o->fb_ids[2] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height, o->fb_ids[2] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height,
o->bpp, o->depth, true, &o->fb_info[2]); o->bpp, o->depth, true, &o->fb_info[2]);
if (!o->fb_ids[0] || !o->fb_ids[1] || !o->fb_ids[2]) { igt_assert(o->fb_ids[0]);
fprintf(stderr, "failed to create fbs\n"); igt_assert(o->fb_ids[1]);
igt_fail(3); igt_assert(o->fb_ids[2]);
}
paint_flip_mode(&o->fb_info[0], false); paint_flip_mode(&o->fb_info[0], false);
paint_flip_mode(&o->fb_info[1], true); paint_flip_mode(&o->fb_info[1], true);
@ -1192,7 +1188,7 @@ static void run_test_on_crtc(struct test_output *o, int crtc_idx, int duration)
else else
o->vblank_state.seq_step = 1; o->vblank_state.seq_step = 1;
elapsed = event_loop(o, duration); elapsed = event_loop(o, duration_ms);
if (o->flags & TEST_FLIP && !(o->flags & TEST_NOEVENT)) if (o->flags & TEST_FLIP && !(o->flags & TEST_NOEVENT))
check_final_state(o, &o->flip_state, elapsed); check_final_state(o, &o->flip_state, elapsed);
@ -1213,14 +1209,12 @@ out:
drmModeFreeConnector(o->kconnector[0]); drmModeFreeConnector(o->kconnector[0]);
} }
static void run_test_on_crtc_pair(struct test_output *o, int crtc_idx0, int crtc_idx1, int duration) static void run_test_on_crtc_pair(struct test_output *o,
int crtc_idx0, int crtc_idx1, int duration_ms)
{ {
unsigned elapsed; unsigned elapsed;
int i; int i;
o->bpp = 32;
o->depth = 24;
connector_find_compatible_mode(crtc_idx0, crtc_idx1, o); connector_find_compatible_mode(crtc_idx0, crtc_idx1, o);
if (!o->mode_valid) if (!o->mode_valid)
return; return;
@ -1239,10 +1233,9 @@ static void run_test_on_crtc_pair(struct test_output *o, int crtc_idx0, int crtc
o->bpp, o->depth, false, &o->fb_info[1]); o->bpp, o->depth, false, &o->fb_info[1]);
o->fb_ids[2] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height, o->fb_ids[2] = kmstest_create_fb(drm_fd, o->fb_width, o->fb_height,
o->bpp, o->depth, true, &o->fb_info[2]); o->bpp, o->depth, true, &o->fb_info[2]);
if (!o->fb_ids[0] || !o->fb_ids[1] || !o->fb_ids[2]) { igt_assert(o->fb_ids[0]);
fprintf(stderr, "failed to create fbs\n"); igt_assert(o->fb_ids[1]);
igt_fail(3); igt_assert(o->fb_ids[2]);
}
paint_flip_mode(&o->fb_info[0], false); paint_flip_mode(&o->fb_info[0], false);
paint_flip_mode(&o->fb_info[1], true); paint_flip_mode(&o->fb_info[1], true);
@ -1282,7 +1275,7 @@ static void run_test_on_crtc_pair(struct test_output *o, int crtc_idx0, int crtc
else else
o->vblank_state.seq_step = 1; o->vblank_state.seq_step = 1;
elapsed = event_loop(o, duration); elapsed = event_loop(o, duration_ms);
if (o->flags & TEST_FLIP && !(o->flags & TEST_NOEVENT)) if (o->flags & TEST_FLIP && !(o->flags & TEST_NOEVENT))
check_final_state(o, &o->flip_state, elapsed); check_final_state(o, &o->flip_state, elapsed);
@ -1308,15 +1301,34 @@ out:
static int run_test(int duration, int flags) static int run_test(int duration, int flags)
{ {
struct test_output o; struct test_output o;
int i, n; int i, n, modes = 0;
resources = drmModeGetResources(drm_fd); resources = drmModeGetResources(drm_fd);
if (!resources) { igt_assert(resources);
fprintf(stderr, "drmModeGetResources failed: %s\n",
strerror(errno)); /* Count output configurations to scale test runtime. */
igt_fail(5); for (i = 0; i < resources->count_connectors; i++) {
for (n = 0; n < resources->count_crtcs; n++) {
memset(&o, 0, sizeof(o));
o.count = 1;
o._connector[0] = resources->connectors[i];
o.flags = flags;
o.flip_state.name = "flip";
o.vblank_state.name = "vblank";
o.bpp = 32;
o.depth = 24;
connector_find_preferred_mode(o._connector[0], n, &o);
if (o.mode_valid)
modes++;
}
} }
igt_assert(modes);
duration = duration * 1000 / modes;
duration = duration < 500 ? 500 : duration;
/* Find any connected displays */ /* Find any connected displays */
for (i = 0; i < resources->count_connectors; i++) { for (i = 0; i < resources->count_connectors; i++) {
for (n = 0; n < resources->count_crtcs; n++) { for (n = 0; n < resources->count_crtcs; n++) {
@ -1326,6 +1338,8 @@ static int run_test(int duration, int flags)
o.flags = flags; o.flags = flags;
o.flip_state.name = "flip"; o.flip_state.name = "flip";
o.vblank_state.name = "vblank"; o.vblank_state.name = "vblank";
o.bpp = 32;
o.depth = 24;
run_test_on_crtc(&o, n, duration); run_test_on_crtc(&o, n, duration);
} }
@ -1338,14 +1352,10 @@ static int run_test(int duration, int flags)
static int run_pair(int duration, int flags) static int run_pair(int duration, int flags)
{ {
struct test_output o; struct test_output o;
int i, j, m, n; int i, j, m, n, modes = 0;
resources = drmModeGetResources(drm_fd); resources = drmModeGetResources(drm_fd);
if (!resources) { igt_assert(resources);
fprintf(stderr, "drmModeGetResources failed: %s\n",
strerror(errno));
igt_fail(5);
}
/* Find a pair of connected displays */ /* Find a pair of connected displays */
for (i = 0; i < resources->count_connectors; i++) { for (i = 0; i < resources->count_connectors; i++) {
@ -1359,6 +1369,36 @@ static int run_pair(int duration, int flags)
o.flags = flags; o.flags = flags;
o.flip_state.name = "flip"; o.flip_state.name = "flip";
o.vblank_state.name = "vblank"; o.vblank_state.name = "vblank";
o.bpp = 32;
o.depth = 24;
connector_find_compatible_mode(n, m, &o);
if (o.mode_valid)
modes++;
}
}
}
}
igt_assert(modes);
duration = duration * 1000 / modes;
duration = duration < 500 ? 500 : duration;
/* Find a pair of connected displays */
for (i = 0; i < resources->count_connectors; i++) {
for (n = 0; n < resources->count_crtcs; n++) {
for (j = i + 1; j < resources->count_connectors; j++) {
for (m = n + 1; m < resources->count_crtcs; m++) {
memset(&o, 0, sizeof(o));
o.count = 2;
o._connector[0] = resources->connectors[i];
o._connector[1] = resources->connectors[j];
o.flags = flags;
o.flip_state.name = "flip";
o.vblank_state.name = "vblank";
o.bpp = 32;
o.depth = 24;
run_test_on_crtc_pair(&o, n, m, duration); run_test_on_crtc_pair(&o, n, m, duration);
} }
@ -1395,50 +1435,50 @@ int main(int argc, char **argv)
int flags; int flags;
const char *name; const char *name;
} tests[] = { } tests[] = {
{ 15, TEST_VBLANK, "wf_vblank" }, { 30, TEST_VBLANK, "wf_vblank" },
{ 15, TEST_VBLANK | TEST_CHECK_TS, "wf_vblank-ts-check" }, { 30, TEST_VBLANK | TEST_CHECK_TS, "wf_vblank-ts-check" },
{ 15, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_CHECK_TS, { 30, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_CHECK_TS,
"blocking-wf_vblank" }, "blocking-wf_vblank" },
{ 5, TEST_VBLANK | TEST_VBLANK_ABSOLUTE, { 30, TEST_VBLANK | TEST_VBLANK_ABSOLUTE,
"absolute-wf_vblank" }, "absolute-wf_vblank" },
{ 5, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_VBLANK_ABSOLUTE, { 30, TEST_VBLANK | TEST_VBLANK_BLOCK | TEST_VBLANK_ABSOLUTE,
"blocking-absolute-wf_vblank" }, "blocking-absolute-wf_vblank" },
{ 30, TEST_VBLANK | TEST_DPMS | TEST_EINVAL, "wf_vblank-vs-dpms" }, { 60, TEST_VBLANK | TEST_DPMS | TEST_EINVAL, "wf_vblank-vs-dpms" },
{ 30, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_BCS, { 60, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_BCS,
"bcs-wf_vblank-vs-dpms" }, "bcs-wf_vblank-vs-dpms" },
{ 30, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_RCS, { 60, TEST_VBLANK | TEST_DPMS | TEST_WITH_DUMMY_RCS,
"rcs-wf_vblank-vs-dpms" }, "rcs-wf_vblank-vs-dpms" },
{ 30, TEST_VBLANK | TEST_MODESET | TEST_EINVAL, "wf_vblank-vs-modeset" }, { 60, TEST_VBLANK | TEST_MODESET | TEST_EINVAL, "wf_vblank-vs-modeset" },
{ 30, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_BCS, { 60, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_BCS,
"bcs-wf_vblank-vs-modeset" }, "bcs-wf_vblank-vs-modeset" },
{ 30, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_RCS, { 60, TEST_VBLANK | TEST_MODESET | TEST_WITH_DUMMY_RCS,
"rcs-wf_vblank-vs-modeset" }, "rcs-wf_vblank-vs-modeset" },
{ 15, TEST_FLIP | TEST_EBUSY , "plain-flip" }, { 30, TEST_FLIP | TEST_EBUSY , "plain-flip" },
{ 15, TEST_FLIP | TEST_CHECK_TS | TEST_EBUSY , "plain-flip-ts-check" }, { 30, TEST_FLIP | TEST_CHECK_TS | TEST_EBUSY , "plain-flip-ts-check" },
{ 15, TEST_FLIP | TEST_CHECK_TS | TEST_EBUSY | TEST_FB_RECREATE, { 30, TEST_FLIP | TEST_CHECK_TS | TEST_EBUSY | TEST_FB_RECREATE,
"plain-flip-fb-recreate" }, "plain-flip-fb-recreate" },
{ 15, TEST_FLIP | TEST_EBUSY | TEST_RMFB | TEST_MODESET , "flip-vs-rmfb" }, { 30, TEST_FLIP | TEST_EBUSY | TEST_RMFB | TEST_MODESET , "flip-vs-rmfb" },
{ 30, TEST_FLIP | TEST_DPMS | TEST_EINVAL, "flip-vs-dpms" }, { 60, TEST_FLIP | TEST_DPMS | TEST_EINVAL, "flip-vs-dpms" },
{ 30, TEST_FLIP | TEST_DPMS | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-dpms" }, { 60, TEST_FLIP | TEST_DPMS | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-dpms" },
{ 30, TEST_FLIP | TEST_DPMS | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-dpms" }, { 60, TEST_FLIP | TEST_DPMS | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-dpms" },
{ 5, TEST_FLIP | TEST_PAN, "flip-vs-panning" }, { 30, TEST_FLIP | TEST_PAN, "flip-vs-panning" },
{ 30, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-panning" }, { 60, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-panning" },
{ 30, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-panning" }, { 60, TEST_FLIP | TEST_PAN | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-panning" },
{ 30, TEST_FLIP | TEST_MODESET | TEST_EINVAL, "flip-vs-modeset" }, { 60, TEST_FLIP | TEST_MODESET | TEST_EINVAL, "flip-vs-modeset" },
{ 30, TEST_FLIP | TEST_MODESET | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-modeset" }, { 60, TEST_FLIP | TEST_MODESET | TEST_WITH_DUMMY_BCS, "bcs-flip-vs-modeset" },
{ 30, TEST_FLIP | TEST_MODESET | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-modeset" }, { 60, TEST_FLIP | TEST_MODESET | TEST_WITH_DUMMY_RCS, "rcs-flip-vs-modeset" },
{ 5, TEST_FLIP | TEST_VBLANK_EXPIRED_SEQ, { 30, TEST_FLIP | TEST_VBLANK_EXPIRED_SEQ,
"flip-vs-expired-vblank" }, "flip-vs-expired-vblank" },
{ 15, TEST_FLIP | TEST_VBLANK | TEST_VBLANK_ABSOLUTE | { 30, TEST_FLIP | TEST_VBLANK | TEST_VBLANK_ABSOLUTE |
TEST_CHECK_TS, "flip-vs-absolute-wf_vblank" }, TEST_CHECK_TS, "flip-vs-absolute-wf_vblank" },
{ 15, TEST_FLIP | TEST_VBLANK | TEST_CHECK_TS, { 30, TEST_FLIP | TEST_VBLANK | TEST_CHECK_TS,
"flip-vs-wf_vblank" }, "flip-vs-wf_vblank" },
{ 15, TEST_FLIP | TEST_VBLANK | TEST_VBLANK_BLOCK | { 30, TEST_FLIP | TEST_VBLANK | TEST_VBLANK_BLOCK |
TEST_CHECK_TS, "flip-vs-blocking-wf-vblank" }, TEST_CHECK_TS, "flip-vs-blocking-wf-vblank" },
{ 15, TEST_FLIP | TEST_MODESET | TEST_HANG | TEST_NOEVENT, "flip-vs-modeset-vs-hang" }, { 30, TEST_FLIP | TEST_MODESET | TEST_HANG | TEST_NOEVENT, "flip-vs-modeset-vs-hang" },
{ 15, TEST_FLIP | TEST_PAN | TEST_HANG, "flip-vs-panning-vs-hang" }, { 30, TEST_FLIP | TEST_PAN | TEST_HANG, "flip-vs-panning-vs-hang" },
{ 1, TEST_FLIP | TEST_EINVAL | TEST_FB_BAD_TILING, "flip-vs-bad-tiling" }, { 1, TEST_FLIP | TEST_EINVAL | TEST_FB_BAD_TILING, "flip-vs-bad-tiling" },
{ 1, TEST_DPMS_OFF | TEST_MODESET | TEST_FLIP, { 1, TEST_DPMS_OFF | TEST_MODESET | TEST_FLIP,