[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