From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wout2-smtp.messagingengine.com (wout2-smtp.messagingengine.com [64.147.123.25]) by gabe.freedesktop.org (Postfix) with ESMTPS id B528B10EB22 for ; Mon, 28 Mar 2022 14:55:33 +0000 (UTC) From: Maxime Ripard To: igt-dev@lists.freedesktop.org, Petri Latvala , Arkadiusz Hiler Date: Mon, 28 Mar 2022 16:55:07 +0200 Message-Id: <20220328145509.2331195-7-maxime@cerno.tech> In-Reply-To: <20220328145509.2331195-1-maxime@cerno.tech> References: <20220328145509.2331195-1-maxime@cerno.tech> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t v2 6/8] tests/kms_writeback: Dump the frames if the don't match List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pekka Paalanen , Maxime Ripard Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: The writeback tests will make sure the reference and captured frames match. If they don't however, we don't get anything but their hash which isn't really helpful. Add a function similar to chamelium_assert_crc_eq_or_dump() to dump the PNG and raw buffers of those two frames if they don't match and frame dumping has been enabled. Signed-off-by: Maxime Ripard --- tests/kms_writeback.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/tests/kms_writeback.c b/tests/kms_writeback.c index faa790cc0f72..2366692865b7 100644 --- a/tests/kms_writeback.c +++ b/tests/kms_writeback.c @@ -256,6 +256,39 @@ static void get_and_wait_out_fence(igt_output_t *output) output->writeback_out_fence_fd = -1; } +static void writeback_assert_crtc_eq_or_dump(igt_crc_t *reference_crc, + igt_fb_t *reference_fb, + igt_crc_t *capture_crc, + igt_fb_t *capture_fb) +{ + bool eq; + + eq = igt_check_crc_equal(reference_crc, capture_crc); + if (!eq) { + cairo_surface_t *reference, *capture; + char *reference_suffix, *capture_suffix; + + reference = igt_get_cairo_surface(reference_fb->fd, reference_fb); + igt_assert(reference); + + capture = igt_get_cairo_surface(capture_fb->fd, capture_fb); + igt_assert(capture); + + reference_suffix = igt_crc_to_string_extended(reference_crc, '-', 2); + capture_suffix = igt_crc_to_string_extended(capture_crc, '-', 2); + + /* Write reference and capture frames to png. */ + igt_write_compared_frames(reference, capture, + reference_suffix, + capture_suffix); + + free(reference_suffix); + free(capture_suffix); + } + + igt_assert(eq); +} + static void writeback_sequence(igt_output_t *output, igt_plane_t *plane, igt_fb_t *in_fb, igt_fb_t *out_fbs[], int n_commits) { @@ -303,7 +336,8 @@ static void writeback_sequence(igt_output_t *output, igt_plane_t *plane, if (out_fbs[i]) { igt_crc_t out_after; igt_fb_get_fnv1a_crc(out_fbs[i], &out_after); - igt_assert_crc_equal(&out_expected, &out_after); + writeback_assert_crtc_eq_or_dump(&out_expected, in_fb, + &out_after, out_fbs[i]); /* And clear it, for the next time */ fill_fb(out_fbs[i], clear_color); -- 2.35.1