[PATCH i-g-t v1 2/2] tests/kms_vrr: Add DRRS verification in seamless RR test

B, Jeevan jeevan.b at intel.com
Mon Feb 3 06:49:14 UTC 2025


> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Naladala
> Ramanaidu
> Sent: Friday, January 31, 2025 5:23 AM
> To: igt-dev at lists.freedesktop.org
> Cc: Golani, Mitulkumar Ajitkumar <mitulkumar.ajitkumar.golani at intel.com>;
> Sharma, Swati2 <swati2.sharma at intel.com>; Naladala, Ramanaidu
> <ramanaidu.naladala at intel.com>
> Subject: [PATCH i-g-t v1 2/2] tests/kms_vrr: Add DRRS verification in seamless
> RR test
> 
> Add a check to see if DRRS has switched to a lower refresh rate when the
> display is idle.
> 
> Signed-off-by: Naladala Ramanaidu <ramanaidu.naladala at intel.com>
> ---
>  tests/kms_vrr.c | 43 +++++++++++++++++++++++++++++++++++++------
>  1 file changed, 37 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c index fac7cb4f7..731f0c77a
> 100644
> --- a/tests/kms_vrr.c
> +++ b/tests/kms_vrr.c
> @@ -707,6 +707,12 @@ test_seamless_rr_basic(data_t *data, enum pipe
> pipe, igt_output_t *output, uint3
>  	vtest_ns_t vtest_ns;
>  	uint64_t rate[] = {0};
>  	bool vrr = !!(flags & TEST_SEAMLESS_VRR);
> +	uint64_t last_vb_event_us, vb_event_us;
> +	uint64_t diff_us[5];
> +	uint64_t result_us, min_rate_us;
> +	uint64_t threshold = 1000;
> +	bool drrs_flag;
> +	int i;
> 
>  	igt_info("Use HIGH_RR Mode as default (VRR: %s): ", vrr ? "ON" :
> "OFF");
>  	kmstest_dump_mode(&data->switch_modes[HIGH_RR_MODE]);
> @@ -717,6 +723,7 @@ test_seamless_rr_basic(data_t *data, enum pipe
> pipe, igt_output_t *output, uint3
>  	if (vrr)
>  		set_vrr_on_pipe(data, pipe, false, true);
>  	else {
> +		set_vrr_on_pipe(data, pipe, false, false);
>  		/*
>  		 * Sink with DRRS and VRR can be in downclock mode.
>  		 * so switch to High clock mode as test preparation @@ -
> 749,12 +756,36 @@ test_seamless_rr_basic(data_t *data, enum pipe pipe,
> igt_output_t *output, uint3
>  	igt_output_override_mode(output, &data-
> >switch_modes[HIGH_RR_MODE]);
>  	igt_assert(igt_display_try_commit_atomic(&data->display, 0, NULL)
> == 0);
> 
> -	rate[0] = vtest_ns.rate_ns;
> -	result = flip_and_measure(data, output, pipe, rate, 1, data-
> >duration_ns);
> -	igt_assert_f(vrr ? (result > 75) : (result < 10),
> -		     "Refresh rate (%u Hz) %"PRIu64"ns: Target VRR %s
> threshold %s, result was %u%%\n",
> -		     ((data->range.max + data->range.min) / 2), rate[0],
> -		     vrr ? "on" : "off", vrr ? "not reached" : "exceeded", result);
We have the handling already done 

if (vrr)
                set_vrr_on_pipe(data, pipe, false, true);
        else {
                /*
                 * Sink with DRRS and VRR can be in downclock mode.
                 * so switch to High clock mode as test preparation
                 */
                igt_output_override_mode(output, &data->switch_modes[HIGH_RR_MODE]);
                igt_assert(igt_display_try_commit_atomic(&data->display, DRM_MODE_PAGE_FLIP_EVENT, NULL) == 0);
        }

Shouldn't this already handle the DRRS case ?? 
If not, I think we should add the handling part here. Correct if I am wrong. 

Thanks 
Jeevan B 
> +	if (vrr) {
> +		rate[0] = vtest_ns.rate_ns;
> +		result = flip_and_measure(data, output, pipe, rate, 1, data-
> >duration_ns);
> +		igt_assert_f(vrr ? (result > 75) : (result < 10),
> +			     "Refresh rate (%u Hz) %"PRIu64"ns: Target VRR %s
> threshold %s, result was %u%%\n",
> +			     ((data->range.max + data->range.min) / 2), rate[0],
> +			     vrr ? "on" : "off", vrr ? "not reached" : "exceeded",
> result);
> +	} else {
> +		min_rate_us = (vtest_ns.min/1000);
> +
> +		sleep(5);
> +
> +		last_vb_event_us = vb_event_us = wait_for_vblank(data,
> pipe);
> +
> +		for (i = 0; i < 5; i++) {
> +			vb_event_us = wait_for_vblank(data, pipe);
> +			diff_us[i] = vb_event_us - last_vb_event_us;
> +			last_vb_event_us = vb_event_us;
> +		}
> +
> +		for (i = 0; i < 5; i++)
> +			result_us += diff_us[i];
> +
> +		result_us = (result_us/5);
> +
> +		drrs_flag = (llabs((long long)(result_us - min_rate_us)) <=
> +threshold);
> +
> +		igt_assert_f(drrs_flag, "DRRS not switch to lower RR\n");
> +		igt_info("DRRS switch to lower RR\n");
> +	}
>  }
> 
>  static void
> --
> 2.25.1



More information about the igt-dev mailing list