Doing modeset on internal panels may have a considerable overhead due to the panel specific power sequencing delays. To avoid long test runtimes in the CI fast-feedback test split out the testing of internal panels from the plane modeset subtests. Create fast and slow versions of these new subtests. In the fast one only combinations with all enabled, all planes disabled or a single plane enable are tested. In the slow one all plane combinations are tested. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103334 Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> Signed-off-by: Imre Deak <imre.deak@xxxxxxxxx> --- tests/kms_atomic_transition.c | 64 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c index 4c295125..c27e48e1 100644 --- a/tests/kms_atomic_transition.c +++ b/tests/kms_atomic_transition.c @@ -189,6 +189,7 @@ enum transition_type { TRANSITION_PLANES, TRANSITION_AFTER_FREE, TRANSITION_MODESET, + TRANSITION_MODESET_PLANES_FAST, TRANSITION_MODESET_DISABLE, }; @@ -528,6 +529,10 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output } for (i = 0; i < iter_max; i++) { + if (type == TRANSITION_MODESET_PLANES_FAST && + hweight32(i) != 1 && hweight32(i) != pipe_obj->n_planes) + continue; + igt_output_set_pipe(output, pipe); wm_setup_plane(display, pipe, i, parms, fencing); @@ -547,16 +552,20 @@ run_transition_test(igt_display_t *display, enum pipe pipe, igt_output_t *output /* i -> i+1 will be done when i increases, can be skipped here */ for (j = iter_max - 1; j > i + 1; j--) { + if (type == TRANSITION_MODESET_PLANES_FAST && + hweight32(j) != 1 && hweight32(j) != pipe_obj->n_planes) + continue; + wm_setup_plane(display, pipe, j, parms, fencing); - if (type == TRANSITION_MODESET) + if (type >= TRANSITION_MODESET) igt_output_override_mode(output, &override_mode); atomic_commit(display, pipe, flags, (void *)(unsigned long) j, fencing); wait_for_transition(display, pipe, nonblocking, fencing); wm_setup_plane(display, pipe, i, parms, fencing); - if (type == TRANSITION_MODESET) + if (type >= TRANSITION_MODESET) igt_output_override_mode(output, NULL); atomic_commit(display, pipe, flags, (void *)(unsigned long) i, fencing); @@ -864,6 +873,19 @@ static void run_modeset_transition(igt_display_t *display, int requested_outputs run_modeset_tests(display, requested_outputs, nonblocking, fencing); } +static bool output_is_internal_panel(igt_output_t *output) +{ + switch (output->config.connector->connector_type) { + case DRM_MODE_CONNECTOR_LVDS: + case DRM_MODE_CONNECTOR_eDP: + case DRM_MODE_CONNECTOR_DSI: + case DRM_MODE_CONNECTOR_DPI: + return true; + default: + return false; + } +} + igt_main { igt_display_t display; @@ -914,12 +936,46 @@ igt_main run_transition_test(&display, pipe, output, TRANSITION_AFTER_FREE, true, true); igt_subtest("plane-all-modeset-transition") - for_each_pipe_with_valid_output(&display, pipe, output) + for_each_pipe_with_valid_output(&display, pipe, output) { + if (output_is_internal_panel(output)) + continue; run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, false); + } igt_subtest("plane-all-modeset-transition-fencing") - for_each_pipe_with_valid_output(&display, pipe, output) + for_each_pipe_with_valid_output(&display, pipe, output) { + if (output_is_internal_panel(output)) + continue; run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, true); + } + + igt_subtest("plane-all-modeset-transition-internal-panels-fast") + for_each_pipe_with_valid_output(&display, pipe, output) { + if (!output_is_internal_panel(output)) + continue; + run_transition_test(&display, pipe, output, TRANSITION_MODESET_PLANES_FAST, false, false); + } + + igt_subtest("plane-all-modeset-transition-fencing-internal-panels-fast") + for_each_pipe_with_valid_output(&display, pipe, output) { + if (!output_is_internal_panel(output)) + continue; + run_transition_test(&display, pipe, output, TRANSITION_MODESET_PLANES_FAST, false, true); + } + + igt_subtest("plane-all-modeset-transition-internal-panels-slow") + for_each_pipe_with_valid_output(&display, pipe, output) { + if (!output_is_internal_panel(output)) + continue; + run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, false); + } + + igt_subtest("plane-all-modeset-transition-fencing-internal-panels-slow") + for_each_pipe_with_valid_output(&display, pipe, output) { + if (!output_is_internal_panel(output)) + continue; + run_transition_test(&display, pipe, output, TRANSITION_MODESET, false, true); + } igt_subtest("plane-toggle-modeset-transition") for_each_pipe_with_valid_output(&display, pipe, output) -- 2.11.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx