[PATCH i-g-t] tests/kms_async_flips: Fix for HRR panels

Murthy, Arun R arun.r.murthy at intel.com
Fri Jun 13 07:18:18 UTC 2025


> -----Original Message-----
> From: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
> Sent: Thursday, June 12, 2025 11:48 AM
> To: igt-dev at lists.freedesktop.org
> Cc: B S, Karthik <karthik.b.s at intel.com>; Murthy, Arun R
> <arun.r.murthy at intel.com>; Borah, Chaitanya Kumar
> <chaitanya.kumar.borah at intel.com>; Reddy Guddati, Santhosh
> <santhosh.reddy.guddati at intel.com>
> Subject: [PATCH i-g-t] tests/kms_async_flips: Fix for HRR panels
> 
> Current logic in the test is too strict for high refresh panels, It expects the flips
> per frame to be 5x times the refresh rate which is not ideal for high refresh like
> 240 , 360 Hz.
> 
> Introduce func to determine min flips per frame depending on refresh rate of
> the panel.
> 
> Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
> ---
>  tests/kms_async_flips.c | 24 +++++++++++++++++++++---
>  1 file changed, 21 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c index
> 97128cfad..5669d450e 100644
> --- a/tests/kms_async_flips.c
> +++ b/tests/kms_async_flips.c
> @@ -139,6 +139,18 @@ typedef struct {
>  	bool linear_modifier;
>  } data_t;
> 
> +static int min_flips_per_frame(unsigned int refresh_rate) {
> +	if (refresh_rate >= 480)
> +		return 1;
> +	else if (refresh_rate >= 240)
> +		return 2;
> +	else if (refresh_rate >= 144)
> +		return 3;
> +	else
> +		return MIN_FLIPS_PER_FRAME;
> +}
> +
How did we derive at these values, 1, 2 or 3?

Thanks and Regards,
Arun R Murthy
--------------------

>  static void flip_handler(int fd_, unsigned int sequence, unsigned int tv_sec,
>  			 unsigned int tv_usec, void *_data)
>  {
> @@ -377,6 +389,9 @@ static void test_async_flip(data_t *data)
>  	long long int fps;
>  	struct timeval start, end, diff;
>  	int suspend_time = RUN_TIME / 2;
> +	int min_flips;
> +
> +	min_flips = min_flips_per_frame(data->refresh_rate);
> 
>  	igt_display_commit2(&data->display, data->display.is_atomic ?
> COMMIT_ATOMIC : COMMIT_LEGACY);
> 
> @@ -421,10 +436,10 @@ static void test_async_flip(data_t *data)
>  		timersub(&end, &start, &diff);
> 
>  		if (data->alternate_sync_async) {
> -			igt_assert_f(data->flip_interval < 1000.0 / (data-
> >refresh_rate * MIN_FLIPS_PER_FRAME),
> +			igt_assert_f(data->flip_interval < 1000.0 / (data-
> >refresh_rate *
> +min_flips),
>  				     "Flip interval not significantly smaller than
> vblank interval\n"
>  				     "Flip interval: %lfms, Refresh Rate = %dHz,
> Threshold = %d\n",
> -				     data->flip_interval, data->refresh_rate,
> MIN_FLIPS_PER_FRAME);
> +				     data->flip_interval, data->refresh_rate,
> min_flips);
>  		}
> 
>  		if (data->suspend_resume && diff.tv_sec == suspend_time) {
> @@ -712,9 +727,12 @@ static void test_crc(data_t *data)
>  	unsigned int start;
>  	int ret, width, height;
>  	drmModeModeInfoPtr mode;
> +	int min_flips;
> 
>  	igt_display_commit2(&data->display, data->display.is_atomic ?
> COMMIT_ATOMIC : COMMIT_LEGACY);
> 
> +	min_flips = min_flips_per_frame(data->refresh_rate);
> +
>  	/* make things faster by using a smallish mode */
>  	mode = &data->output->config.connector->modes[0];
>  	width = mode->hdisplay;
> @@ -763,7 +781,7 @@ static void test_crc(data_t *data)
>  	igt_pipe_crc_free(data->pipe_crc);
> 
>  	/* make sure we got at a reasonable number of async flips done */
> -	igt_assert_lt(data->frame_count * 2, data->flip_count);
> +	igt_assert_lt(data->frame_count * min_flips, data->flip_count);
>  }
> 
>  static void run_test(data_t *data, void (*test)(data_t *))
> --
> 2.34.1



More information about the igt-dev mailing list