[PATCH i-g-t] tests/intel/kms_pm_backlight: Detect flickering with brightness change

Santhosh Reddy Guddati santhosh.reddy.guddati at intel.com
Tue Sep 10 03:46:53 UTC 2024


New 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.

v2: fix subject, use igt_assert_f (Kamil)
v4: Remove unnecessary debug logs and test name (Thasleem)
V5: fix subject description,rename test name and
keep all brightness tests together. (Swathi)

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

diff --git a/tests/intel/kms_pm_backlight.c b/tests/intel/kms_pm_backlight.c
index 140a95bcc..481e60f77 100644
--- a/tests/intel/kms_pm_backlight.c
+++ b/tests/intel/kms_pm_backlight.c
@@ -56,6 +56,10 @@
  * SUBTEST: basic-brightness
  * Description: Test the basic brightness.
  *
+ * SUBTEST: basic-crc-brightness
+ * Description: Test the brightness change with crc.
+ * Functionality: backlight, crc
+ *
  * SUBTEST: fade
  * Description: Test basic fade.
  *
@@ -66,6 +70,7 @@
  * SUBTEST: fade-with-suspend
  * Description: Test the fade with suspend.
  * Functionality: backlight, suspend
+ *
  */
 
 struct context {
@@ -257,6 +262,34 @@ 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;
+	igt_pipe_crc_t *ref_crc;
+	bool crc_ok;
+
+	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_pipe_crc_collect_crc(ref_crc, &out_crc_before);
+
+		igt_assert_eq(backlight_write(brightness, "brightness", context), 0);
+
+		igt_pipe_crc_collect_crc(ref_crc, &out_crc_after);
+
+		/* compare the crc values before and after changing brightness */
+		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;
@@ -273,6 +306,7 @@ igt_main
 		int flags;
 	} tests[] = {
 		{ "basic-brightness", "test the basic brightness.", test_brightness, TEST_NONE },
+		{ "basic-crc-brightness", "test the brightness change with CRC.", test_brightness_crc, TEST_NONE },
 		{ "bad-brightness", "test the bad brightness.", test_bad_brightness, TEST_NONE },
 		{ "fade", "test basic fade.", test_fade, TEST_NONE },
 		{ "fade-with-dpms", "test the fade with DPMS.", test_fade, TEST_DPMS },
@@ -290,6 +324,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