[igt-dev] [PATCH i-g-t 17/20] tests/psr: Prepare for using timestamps.
Dhinakaran Pandiyan
dhinakaran.pandiyan at intel.com
Wed Apr 11 02:37:29 UTC 2018
Wrap some functions, move condition checks etc to make it easy to add
timestamp support.
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan at intel.com>
---
tests/kms_psr_sink_crc.c | 86 +++++++++++++++++++++++++++++++-----------------
1 file changed, 55 insertions(+), 31 deletions(-)
diff --git a/tests/kms_psr_sink_crc.c b/tests/kms_psr_sink_crc.c
index 3e06e14e..043b9e38 100644
--- a/tests/kms_psr_sink_crc.c
+++ b/tests/kms_psr_sink_crc.c
@@ -223,11 +223,8 @@ static bool wait_psr_entry(data_t *data)
return false;
}
-static void get_sink_crc(data_t *data, char *crc)
+static void __get_sink_crc(data_t *data, char *crc)
{
- if (igt_interactive_debug)
- return;
-
igt_require_f(igt_sysfs_read(data->debugfs_fd, "i915_sink_crc_eDP1",
crc, CRC_LEN) == CRC_LEN,
"Sink CRC is unreliable on this machine. Try manual debug with --interactive-debug=no-crc\n");
@@ -237,22 +234,53 @@ static void get_sink_crc(data_t *data, char *crc)
igt_assert(strncmp(crc, CRC_BLACK, CRC_LEN));
}
-static bool is_green(char *crc)
+static bool __is_green(data_t *data, char *out_crc)
{
const char *mask = "0000FFFF0000";
- uint32_t *p = (uint32_t *)crc, *mask_p = (uint32_t *)mask;
- if (igt_interactive_debug)
- return false;
+ uint32_t *p, *mask_p = (uint32_t *)mask;
+ char _crc[CRC_LEN], *crc;
+
+ crc = out_crc ? out_crc : _crc;
+ __get_sink_crc(data, crc);
+ p = (uint32_t *)crc;
/* Check R and B components are 0 and G is non-zero */
- return *p == *mask_p && *(p + 2) == *(mask_p + 2) &&
- (*(p + 1) & *(mask_p + 1)) != 0;
+ return *p == *mask_p &&
+ *(p + 2) == *(mask_p + 2) &&
+ *(p + 1) & *(mask_p + 1);
}
-static void assert_or_manual(bool condition, const char *expected)
+static void is_green_crc(data_t *data, char *out_crc)
{
- igt_debug_manual_check("no-crc", expected);
- igt_assert(igt_interactive_debug || condition);
+ if (!data->with_sink_crc)
+ return;
+
+ igt_assert(__is_green(data, out_crc));
+}
+
+static void is_not_green_crc(data_t *data, char *out_crc)
+{
+ if (!data->with_sink_crc)
+ return;
+
+ igt_fail_on(__is_green(data, out_crc));
+}
+
+static void is_not_equal_crc(data_t *data, const char *ref_crc)
+{
+ char crc[CRC_LEN];
+
+ if (!data->with_sink_crc)
+ return;
+
+ __get_sink_crc(data, crc);
+ igt_assert_f(strncmp(ref_crc, crc, CRC_LEN), "screen update failed\n");
+}
+
+static void manual(const char *expected)
+{
+ if (igt_interactive_debug)
+ igt_debug_manual_check("no-crc", expected);
}
static bool drrs_disabled(data_t *data)
@@ -270,21 +298,20 @@ static void run_test(data_t *data)
igt_plane_t *test_plane = data->test_plane;
void *ptr;
char ref_crc[CRC_LEN];
- char crc[CRC_LEN];
const char *expected = "";
- if (!igt_interactive_debug)
- igt_require_f(data->with_sink_crc,
- "Enable sink CRC with --sink-crc\n");
+ igt_require_f(igt_interactive_debug || data->with_sink_crc,
+ "Enable interactive debug with --interactive-debug or "
+ "enable sink crc with --sink-crc\n");
/* Confirm that screen became Green */
- get_sink_crc(data, ref_crc);
- assert_or_manual(is_green(ref_crc), "screen GREEN");
+ manual("screen GREEN");
+ is_green_crc(data, NULL);
/* Confirm screen stays Green after PSR got active */
igt_assert(wait_psr_entry(data));
- get_sink_crc(data, ref_crc);
- assert_or_manual(is_green(ref_crc), "screen GREEN");
+ manual("screen GREEN");
+ is_green_crc(data, NULL);
/* Setting a secondary fb/plane */
igt_plane_set_fb(test_plane, &data->fb_white);
@@ -292,20 +319,17 @@ static void run_test(data_t *data)
/* Confirm it is not Green anymore */
igt_assert(wait_psr_entry(data));
- get_sink_crc(data, ref_crc);
- if (test_plane->type == DRM_PLANE_TYPE_PRIMARY)
- assert_or_manual(!is_green(ref_crc), "screen WHITE");
- else
- assert_or_manual(!is_green(ref_crc), "GREEN background with WHITE box");
+ manual(test_plane->type == DRM_PLANE_TYPE_PRIMARY ?
+ "screen WHITE" : "WHITE box on GREEN");
+ is_not_green_crc(data, ref_crc);
switch (data->op) {
case PAGE_FLIP:
/* Only in use when testing primary plane */
igt_assert(drmModePageFlip(data->drm_fd, data->crtc_id,
data->fb_green.fb_id, 0, NULL) == 0);
- get_sink_crc(data, crc);
- assert_or_manual(is_green(crc), "screen GREEN");
- expected = "still GREEN";
+ is_green_crc(data, NULL);
+ expected = "screen GREEN";
break;
case MMAP_GTT:
ptr = gem_mmap__gtt(data->drm_fd, handle, data->mod_size,
@@ -347,8 +371,8 @@ static void run_test(data_t *data)
expected = "screen GREEN";
break;
}
- get_sink_crc(data, crc);
- assert_or_manual(strncmp(ref_crc, crc, CRC_LEN) != 0, expected);
+ manual(expected);
+ is_not_equal_crc(data, ref_crc);
}
static void test_cleanup(data_t *data) {
--
2.14.1
More information about the igt-dev
mailing list