[PATCH i-g-t] tests/km_pm_brightness: check for flickers while adjusting the brightness

Santhosh Reddy Guddati santhosh.reddy.guddati at intel.com
Wed Jul 10 10:54:22 UTC 2024


The test is added to check for flickers on the panel while
changing brightness.

If there is any flicker observed on the panel while changing
the brightness then crc will change.This patch set is trying
to address the flickers observed using crc when brightness
is being changed.

Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
---
 tests/intel/kms_pm_backlight.c | 43 ++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/tests/intel/kms_pm_backlight.c b/tests/intel/kms_pm_backlight.c
index 8672afa7a..a7e8431e5 100644
--- a/tests/intel/kms_pm_backlight.c
+++ b/tests/intel/kms_pm_backlight.c
@@ -64,6 +64,10 @@
  * SUBTEST: fade-with-suspend
  * Description: Test the fade with suspend.
  * Functionality: backlight, suspend
+ *
+ * SUBTEST: brightness-crc-change
+ * Description: Test the brightness change with CRC.
+ * Functionality: backlight, CRC
  */
 
 struct context {
@@ -255,6 +259,43 @@ static void test_setup(igt_display_t display, igt_output_t *output)
 	}
 }
 
+static void test_brightness_crc(struct context *context)
+{
+	int min = 0;
+	int max = context->max;
+	int step = (max - min) / 10;
+	int brightness;
+	igt_crc_t out_crc_before, out_crc_after;
+	igt_display_t *display = context->output->display;
+	char *crc_str;
+	igt_pipe_crc_t *ref_crc;
+	bool crc_ok;
+
+	// Get the CRC before changing brightness
+	ref_crc = igt_pipe_crc_new(display->drm_fd, context->output->config.pipe, IGT_PIPE_CRC_SOURCE_AUTO);
+	igt_assert(ref_crc);
+
+	for (brightness = min; brightness <= max; brightness += step) {
+		igt_info("Brightness: %d\n", brightness);
+
+		igt_pipe_crc_collect_crc(ref_crc, &out_crc_before);
+		crc_str = igt_crc_to_string(&out_crc_before);
+		igt_debug("CRC before write: %s\n", crc_str);
+
+		igt_assert_eq(backlight_write(brightness, "brightness", context), 0);
+		igt_debug("Brightness after write: %d\n", brightness);
+
+		igt_pipe_crc_collect_crc(ref_crc, &out_crc_after);
+		crc_str = igt_crc_to_string(&out_crc_after);
+		igt_debug("CRC after write: %s\n", crc_str);
+
+		// Compare the CRC values
+		crc_ok = igt_check_crc_equal(&out_crc_before, &out_crc_after);
+		igt_debug("brightness: %d flicker: %s\n", brightness, crc_ok ? "none" : "detected");
+		igt_assert_f(crc_ok, "Flicker observed for brightness %d\n", brightness);
+	}
+}
+
 igt_main
 {
 	int fd;
@@ -275,6 +316,7 @@ igt_main
 		{ "fade", "test basic fade.", test_fade, TEST_NONE },
 		{ "fade-with-dpms", "test the fade with DPMS.", test_fade, TEST_DPMS },
 		{ "fade-with-suspend", "test the fade with suspend.", test_fade, TEST_SUSPEND },
+		{ "brightness-crc-change", "test the brightness change with CRC.", test_brightness_crc, TEST_NONE },
 	};
 
 	igt_fixture {
@@ -288,6 +330,7 @@ igt_main
 		 */
 		kmstest_set_vt_graphics_mode();
 		igt_display_require(&display, drm_open_driver(DRIVER_INTEL | DRIVER_XE));
+		igt_require_pipe_crc(display.drm_fd);
 
 		for_each_connected_output(&display, output) {
 			if (output->config.connector->connector_type != DRM_MODE_CONNECTOR_eDP)
-- 
2.34.1



More information about the igt-dev mailing list