[Intel-gfx] [PATCH 10/12] tests/kms_psr_sink_crc: Check color ref CRC

Daniel Vetter daniel at ffwll.ch
Thu Sep 4 10:58:08 CEST 2014


On Wed, Sep 03, 2014 at 09:30:04PM -0400, Rodrigo Vivi wrote:
> Black screen is forbidden on this test. So let's fail if sink crc shows
> it is back.
> 
> Also there are many cases where we know for shure it should be all green,
> so let's check for them.
> 
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> ---
>  tests/kms_psr_sink_crc.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tests/kms_psr_sink_crc.c b/tests/kms_psr_sink_crc.c
> index 27f3df9..45d2dd9 100644
> --- a/tests/kms_psr_sink_crc.c
> +++ b/tests/kms_psr_sink_crc.c
> @@ -35,6 +35,9 @@
>  #include "igt_debugfs.h"
>  #include "igt_kms.h"
>  
> +#define CRC_BLACK "000000000000"
> +#define CRC_GREEN "0000c1010000"
> +
>  #define DEBUG_CRC 0
>  
>  /* This is usefull to debug and know what should be expected */
> @@ -259,6 +262,9 @@ static void get_sink_crc(data_t *data, char *crc) {
>  	 * Now give a time for human eyes
>  	 */
>  	usleep(300000);
> +
> +	/* Black screen is always invalid */
> +	igt_assert(strcmp(crc, CRC_BLACK) != 0);
>  }
>  
>  static void test_crc(data_t *data)
> @@ -272,6 +278,15 @@ static void test_crc(data_t *data)
>  	igt_plane_set_fb(data->primary, &data->fb_green);
>  	igt_display_commit(&data->display);
>  
> +	/* Confirm that screen became Green */
> +	get_sink_crc(data, ref_crc);
> +	igt_assert(strcmp(ref_crc, CRC_GREEN) == 0);
> +
> +	/* Confirm screen stays Green after PSR got active */
> +	igt_assert(wait_psr_entry(data, 10));
> +	get_sink_crc(data, ref_crc);
> +	igt_assert(strcmp(ref_crc, CRC_GREEN) == 0);
> +
>  	/* Setting a secondary fb/plane */
>  	switch (data->test_plane) {
>  	case PRIMARY: default: test_plane = data->primary; break;
> @@ -281,14 +296,18 @@ static void test_crc(data_t *data)
>  	igt_plane_set_fb(test_plane, &data->fb_white);
>  	igt_display_commit(&data->display);
>  
> +	/* Confirm it is not Green anymore */
>  	igt_assert(wait_psr_entry(data, 10));
>  	get_sink_crc(data, ref_crc);
> +	igt_assert(strcmp(ref_crc, CRC_GREEN) != 0);

This is a bit risky, especially when you use pure colors instead of mixing
them. With just one color channel changing you only have 256 different CRC
values, which means collisions are rather likely. Which means spurious
test failures no one understands on odd machines.

The solution is to draw the screen again in software, i.e. disable all
spritres/cursors and draw boxes where the cursor/sprite should be. Fairly
simple using the igt/cairo helpers.

But we can do that as a fixup patch to avoid too much hassle, so better to
get these here in first imo.
-Daniel

>  
>  	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);
> +		igt_assert(strcmp(crc, CRC_GREEN) == 0);
>  		break;
>  	case MMAP_GTT:
>  		ptr = gem_mmap__gtt(data->drm_fd, handle, 4096, PROT_WRITE);
> -- 
> 1.9.3
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch



More information about the Intel-gfx mailing list