[igt-dev] [PATCH i-g-t 2/2] tests/kms_chv_cursor_fail: Use igt_display_reset() and igt_pipe_crc_drain()
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Thu Feb 15 12:34:00 UTC 2018
This reduces the amount of state to reset on each preparation, and allows
us to keep CRC enabled. With 2 outputs on KBL the test time goes from
approximately 9.2s to 7s on KBL.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
---
tests/kms_chv_cursor_fail.c | 60 ++++++++++++++-------------------------------
1 file changed, 18 insertions(+), 42 deletions(-)
diff --git a/tests/kms_chv_cursor_fail.c b/tests/kms_chv_cursor_fail.c
index 1bcf8469088e..ffbe39d0c41b 100644
--- a/tests/kms_chv_cursor_fail.c
+++ b/tests/kms_chv_cursor_fail.c
@@ -60,15 +60,6 @@ enum {
EDGE_BOTTOM = 0x8,
};
-static void cursor_disable(data_t *data)
-{
- igt_output_t *output = data->output;
- igt_plane_t *cursor;
-
- cursor = igt_output_get_plane_type(output, DRM_PLANE_TYPE_CURSOR);
- igt_plane_set_fb(cursor, NULL);
-}
-
static void create_cursor_fb(data_t *data, int cur_w, int cur_h)
{
cairo_t *cr;
@@ -123,7 +114,7 @@ static void test_edge_pos(data_t *data, int sx, int ex, int y, bool swap_axis)
dx = (ex - sx)/XSTEP;
- igt_pipe_crc_start(data->pipe_crc);
+ igt_pipe_crc_drain(data->pipe_crc);
i = 0;
@@ -154,7 +145,6 @@ static void test_edge_pos(data_t *data, int sx, int ex, int y, bool swap_axis)
}
n = igt_pipe_crc_get_crcs(data->pipe_crc, NCRC, &crc);
- igt_pipe_crc_stop(data->pipe_crc);
if (!data->colored) {
igt_debug("Checking CRCs: ");
@@ -225,15 +215,27 @@ static void test_edges(data_t *data, unsigned int edges)
}
}
+static void cleanup_crtc(data_t *data)
+{
+ igt_display_t *display = &data->display;
+
+ igt_display_reset(display);
+ igt_pipe_crc_free(data->pipe_crc);
+ data->pipe_crc = NULL;
+
+ igt_remove_fb(data->drm_fd, &data->primary_fb);
+}
+
static void prepare_crtc(data_t *data)
{
drmModeModeInfo *mode;
igt_display_t *display = &data->display;
igt_plane_t *primary;
+ cleanup_crtc(data);
+
/* select the pipe we want to use */
igt_output_set_pipe(data->output, data->pipe);
- cursor_disable(data);
mode = igt_output_get_mode(data->output);
igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
@@ -250,37 +252,12 @@ static void prepare_crtc(data_t *data)
data->jump_y = (mode->vdisplay - data->curh) / 2;
/* create the pipe_crc object for this pipe */
- if (data->pipe_crc)
- igt_pipe_crc_free(data->pipe_crc);
-
data->pipe_crc = igt_pipe_crc_new_nonblock(data->drm_fd, data->pipe,
INTEL_PIPE_CRC_SOURCE_AUTO);
- /* make sure cursor is disabled */
- cursor_disable(data);
- igt_wait_for_vblank(data->drm_fd, data->pipe);
-
/* get reference crc w/o cursor */
- igt_pipe_crc_collect_crc(data->pipe_crc, &data->ref_crc);
- igt_pipe_crc_collect_crc(data->pipe_crc, &data->ref_crc);
- igt_pipe_crc_collect_crc(data->pipe_crc, &data->ref_crc);
-}
-
-static void cleanup_crtc(data_t *data)
-{
- igt_display_t *display = &data->display;
- igt_plane_t *primary;
-
- igt_pipe_crc_free(data->pipe_crc);
- data->pipe_crc = NULL;
-
- igt_remove_fb(data->drm_fd, &data->primary_fb);
-
- primary = igt_output_get_plane_type(data->output, DRM_PLANE_TYPE_PRIMARY);
- igt_plane_set_fb(primary, NULL);
-
- igt_output_set_pipe(data->output, PIPE_ANY);
- igt_display_commit(display);
+ igt_pipe_crc_start(data->pipe_crc);
+ igt_assert(igt_pipe_crc_get_single(data->pipe_crc, &data->ref_crc));
}
static void test_crtc(data_t *data, unsigned int edges)
@@ -288,6 +265,8 @@ static void test_crtc(data_t *data, unsigned int edges)
igt_display_t *display = &data->display;
int valid_tests = 0;
+ cleanup_crtc(data);
+
create_cursor_fb(data, data->curw, data->curh);
for_each_valid_output_on_pipe(display, data->pipe, data->output) {
@@ -306,9 +285,6 @@ static void test_crtc(data_t *data, unsigned int edges)
igt_subtest_name(),
kmstest_pipe_name(data->pipe),
igt_output_name(data->output));
-
- /* cleanup what prepare_crtc() has done */
- cleanup_crtc(data);
}
igt_remove_fb(data->drm_fd, &data->fb);
--
2.16.1
More information about the igt-dev
mailing list