[igt-dev] [PATCH i-g-t 1/4] tests/kms_cursor_crc: wait for cursor only when needed

Jessica Zhang quic_jesszhan at quicinc.com
Wed Sep 28 22:29:08 UTC 2022



On 9/27/2022 12:11 PM, Juha-Pekka Heikkila wrote:
> moved cursor vblank waits out from sw tests and wait only when
> disabling cursor. With this need to wait few frames less than
> currently, this seems to shave off around 1s per subtest.
> 
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>

Reviewed-by: Jessica Zhang <quic_jesszhan at quicinc.com>

> ---
>   tests/kms_cursor_crc.c | 19 +++++++++++--------
>   1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
> index 7c1f74be5..f9a1f8689 100644
> --- a/tests/kms_cursor_crc.c
> +++ b/tests/kms_cursor_crc.c
> @@ -72,6 +72,7 @@ typedef struct {
>   	cairo_surface_t *surface;
>   	uint32_t devid;
>   	double alpha;
> +	int vblank_wait_count; /* because of msm */
>   } data_t;
>   
>   #define TEST_DPMS (1<<0)
> @@ -124,6 +125,12 @@ static void cursor_disable(data_t *data)
>   {
>   	igt_plane_set_fb(data->cursor, NULL);
>   	igt_plane_set_position(data->cursor, 0, 0);
> +	igt_display_commit(&data->display);
> +
> +	/* do this wait here so it will not need to be added everywhere */
> +	igt_wait_for_vblank_count(data->drm_fd,
> +				  data->display.pipes[data->pipe].crtc_offset,
> +				  data->vblank_wait_count);
>   }
>   
>   static bool chv_cursor_broken(data_t *data, int x)
> @@ -185,7 +192,6 @@ static void do_single_test(data_t *data, int x, int y, bool hw_test,
>   	igt_pipe_crc_t *pipe_crc = data->pipe_crc;
>   	igt_crc_t crc;
>   	int ret = 0, swbufidx;
> -	int vblank_wait_count = is_msm_device(data->drm_fd) ? 2 : 1;
>   
>   	igt_print_activity();
>   
> @@ -204,7 +210,8 @@ static void do_single_test(data_t *data, int x, int y, bool hw_test,
>   
>   		/* Extra vblank wait is because nonblocking cursor ioctl */
>   		igt_wait_for_vblank_count(data->drm_fd,
> -				display->pipes[data->pipe].crtc_offset, vblank_wait_count);
> +					  display->pipes[data->pipe].crtc_offset,
> +					  data->vblank_wait_count);
>   
>   		igt_pipe_crc_get_current(data->drm_fd, pipe_crc, hwcrc);
>   
> @@ -242,11 +249,7 @@ static void do_single_test(data_t *data, int x, int y, bool hw_test,
>   
>   		restore_image(data, swbufidx, &((cursorarea){x, y, data->curw, data->curh}));
>   		igt_plane_set_fb(data->primary, &data->primary_fb[swbufidx]);
> -
>   		igt_display_commit(display);
> -		igt_wait_for_vblank_count(data->drm_fd,
> -				display->pipes[data->pipe].crtc_offset, vblank_wait_count);
> -
>   		igt_pipe_crc_get_current(data->drm_fd, pipe_crc, &crc);
>   		igt_assert_crc_equal(&crc, hwcrc);
>   	}
> @@ -264,9 +267,7 @@ static void do_fail_test(data_t *data, int x, int y, int expect)
>   	igt_plane_set_position(data->cursor, x, y);
>   	ret = igt_display_try_commit2(display, COMMIT_LEGACY);
>   
> -	igt_plane_set_position(data->cursor, 0, 0);
>   	cursor_disable(data);
> -	igt_display_commit(display);
>   
>   	igt_assert_eq(ret, expect);
>   }
> @@ -895,6 +896,8 @@ igt_main
>   		kmstest_set_vt_graphics_mode();
>   
>   		igt_require_pipe_crc(data.drm_fd);
> +
> +		data.vblank_wait_count = is_msm_device(data.drm_fd) ? 2 : 1;
>   	}
>   
>   	data.cursor_max_w = cursor_width;
> -- 
> 2.37.3
> 


More information about the igt-dev mailing list