diff --git a/tests/drm-smoke-test.c b/tests/drm-smoke-test.c index 4c5b6a59..859c9739 100644 --- a/tests/drm-smoke-test.c +++ b/tests/drm-smoke-test.c @@ -43,7 +43,6 @@ fixture_setup(struct weston_test_harness *harness) DECLARE_FIXTURE_SETUP(fixture_setup); TEST(drm_smoke) { - struct client *client; struct buffer *buffer; struct wl_surface *surface; @@ -70,3 +69,29 @@ TEST(drm_smoke) { client_destroy(client); } + +TEST(drm_screenshot_no_damage) { + struct client *client; + int i; + bool ret; + + client = create_client_and_test_surface(0, 0, 200, 200); + assert(client); + + /* + * DRM-backend has an optimization to not even call the renderer if + * there is no damage to be repainted on the primary plane occupied by + * renderer's buffer. However, renderer must be called for a screenshot + * to complete. + * + * Therefore, if there is no damage, it is possible that screenshots + * might get stuck. This test makes sure they run regardless. + */ + for (i = 0; i < 5; i++) { + ret = verify_screen_content(client, "drm_screenshot_no_damage", + 0, NULL, i); + assert(ret); + } + + client_destroy(client); +} diff --git a/tests/reference/drm_screenshot_no_damage-00.png b/tests/reference/drm_screenshot_no_damage-00.png new file mode 100644 index 00000000..9b6824ec Binary files /dev/null and b/tests/reference/drm_screenshot_no_damage-00.png differ