From: Sean Paul <sean@poorly.run>
To: igt-dev@lists.freedesktop.org
Cc: Sean Paul <seanpaul@chromium.org>
Subject: [igt-dev] [PATCH v2 7/8] tests/kms_vrr: Allow for multiple rates in a test
Date: Mon, 23 Oct 2023 20:56:37 +0000 [thread overview]
Message-ID: <20231023205910.3556533-8-sean@poorly.run> (raw)
In-Reply-To: <20231023205910.3556533-1-sean@poorly.run>
From: Sean Paul <seanpaul@chromium.org>
Instead of passing just one rate into flip_and_measure, pass in an array
to allow for tests which vary the refresh rate from one frame to the
next. Currently the test will just cycle through the rates in order per
frame.
Just framework, no changes to any tests.
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Changes in v2:
- Added to the set
---
tests/kms_vrr.c | 43 ++++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
index 57bd87ddf..b986087f0 100644
--- a/tests/kms_vrr.c
+++ b/tests/kms_vrr.c
@@ -375,7 +375,7 @@ do_flip(data_t *data, igt_fb_t *fb)
*/
static uint32_t
flip_and_measure(data_t *data, igt_output_t *output, enum pipe pipe,
- uint64_t rate_ns, uint64_t duration_ns)
+ uint64_t *rates_ns, int num_rates, uint64_t duration_ns)
{
uint64_t start_ns, last_event_ns, target_ns;
uint32_t total_flip = 0, total_pass = 0;
@@ -387,9 +387,10 @@ flip_and_measure(data_t *data, igt_output_t *output, enum pipe pipe,
start_ns = last_event_ns = target_ns = get_kernel_event_ns(data,
DRM_EVENT_FLIP_COMPLETE);
- for (;;) {
+ for (int i = 0;;++i) {
uint64_t event_ns, wait_ns;
int64_t diff_ns;
+ uint64_t rate_ns = rates_ns[i % num_rates];
front = !front;
do_flip(data, front ? &data->fb[1] : &data->fb[0]);
@@ -440,8 +441,12 @@ flip_and_measure(data_t *data, igt_output_t *output, enum pipe pipe,
while (get_time_ns() < target_ns - 10);
}
- igt_info("Completed %u flips, %u were in threshold for (%llu Hz) %"PRIu64"ns.\n",
- total_flip, total_pass, (NSECS_PER_SEC/rate_ns), rate_ns);
+ igt_info("Completed %u flips, %u were in threshold for [", total_flip, total_pass);
+ for (int i = 0; i < num_rates; ++i) {
+ igt_info("(%llu Hz) %"PRIu64"ns%s", (NSECS_PER_SEC/rates_ns[i]), rates_ns[i],
+ i < num_rates - 1 ? "," : "");
+ }
+ igt_info("]\n");
return total_flip ? ((total_pass * 100) / total_flip) : 0;
}
@@ -453,12 +458,12 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
uint32_t result;
vtest_ns_t vtest_ns;
range_t range;
- uint64_t rate;
+ uint64_t rate[] = {0};
prepare_test(data, output, pipe);
range = data->range;
vtest_ns = data->vtest_ns;
- rate = vtest_ns.rate_ns;
+ rate[0] = vtest_ns.rate_ns;
igt_info("VRR Test execution on %s, PIPE_%s with VRR range: (%u-%u) Hz\n",
output->name, kmstest_pipe_name(pipe), range.min, range.max);
@@ -470,7 +475,7 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
* This is to make sure we were actually in the middle of
* active flipping before doing the DPMS/suspend steps.
*/
- flip_and_measure(data, output, pipe, rate, 250000000ull);
+ flip_and_measure(data, output, pipe, rate, 1, 250000000ull);
if (flags & TEST_DPMS) {
kmstest_set_connector_dpms(output->display->drm_fd,
@@ -501,27 +506,27 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
* next Vmin.
*/
if (flags & TEST_FLIPLINE) {
- rate = rate_from_refresh(range.max + 5);
- result = flip_and_measure(data, output, pipe, rate, data->duration_ns);
+ rate[0] = rate_from_refresh(range.max + 5);
+ result = flip_and_measure(data, output, pipe, rate, 1, data->duration_ns);
igt_assert_f(result > 75,
"Refresh rate (%u Hz) %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
- (range.max + 5), rate, result);
+ (range.max + 5), rate[0], result);
}
if (flags & ~TEST_NEGATIVE) {
- rate = vtest_ns.rate_ns;
- result = flip_and_measure(data, output, pipe, rate, data->duration_ns);
+ rate[0] = vtest_ns.rate_ns;
+ result = flip_and_measure(data, output, pipe, rate, 1, data->duration_ns);
igt_assert_f(result > 75,
"Refresh rate (%u Hz) %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
- ((range.max + range.min) / 2), rate, result);
+ ((range.max + range.min) / 2), rate[0], result);
}
if (flags & TEST_FLIPLINE) {
- rate = rate_from_refresh(range.min - 5);
- result = flip_and_measure(data, output, pipe, rate, data->duration_ns);
+ rate[0] = rate_from_refresh(range.min - 5);
+ result = flip_and_measure(data, output, pipe, rate, 1, data->duration_ns);
igt_assert_f(result < 50,
"Refresh rate (%u Hz) %"PRIu64"ns: Target VRR on threshold exceeded, result was %u%%\n",
- (range.min - 5), rate, result);
+ (range.min - 5), rate[0], result);
}
/*
@@ -530,11 +535,11 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
* a VRR capable panel.
*/
set_vrr_on_pipe(data, pipe, (flags & TEST_NEGATIVE)? true : false);
- rate = vtest_ns.rate_ns;
- result = flip_and_measure(data, output, pipe, rate, data->duration_ns);
+ rate[0] = vtest_ns.rate_ns;
+ result = flip_and_measure(data, output, pipe, rate, 1, data->duration_ns);
igt_assert_f(result < 10,
"Refresh rate (%u Hz) %"PRIu64"ns: Target VRR %s threshold exceeded, result was %u%%\n",
- ((range.max + range.min) / 2), rate, (flags & TEST_NEGATIVE)? "on" : "off", result);
+ ((range.max + range.min) / 2), rate[0], (flags & TEST_NEGATIVE)? "on" : "off", result);
/* Clean-up */
igt_plane_set_fb(data->primary, NULL);
--
Sean Paul, Software Engineer, Google / Chromium OS
next prev parent reply other threads:[~2023-10-23 20:59 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-23 20:56 [igt-dev] [PATCH v2 0/8] tests/kms_vrr: Modify kms_vrr to allow flicker profiling Sean Paul
2023-10-23 20:56 ` [igt-dev] [PATCH v2 1/8] tests/kms_vrr: Move fb0 and fb1 to an array Sean Paul
2023-10-23 20:56 ` [igt-dev] [PATCH v2 2/8] tests/kms_vrr: Move vtest_ns into data_t Sean Paul
2023-10-23 20:56 ` [igt-dev] [PATCH v2 3/8] tests/kms_vrr: Allow test rate to be altered from the command line Sean Paul
2023-10-23 20:56 ` [igt-dev] [PATCH v2 4/8] tests/kms_vrr: Allow test duration to be specified " Sean Paul
2023-11-16 8:25 ` Modem, Bhanuprakash
2023-10-23 20:56 ` [igt-dev] [PATCH v2 5/8] tests/kms_vrr: Change the pattern displayed in the test Sean Paul
2023-11-16 8:25 ` Modem, Bhanuprakash
2023-12-18 4:36 ` Modem, Bhanuprakash
2023-12-18 4:36 ` Modem, Bhanuprakash
2023-10-23 20:56 ` [igt-dev] [PATCH v2 6/8] tests/kms_vrr: Add ability to flip static image for flicker profiling Sean Paul
2023-11-16 8:24 ` Modem, Bhanuprakash
2023-10-23 20:56 ` Sean Paul [this message]
2023-11-16 8:24 ` [igt-dev] [PATCH v2 7/8] tests/kms_vrr: Allow for multiple rates in a test Modem, Bhanuprakash
2023-10-23 20:56 ` [igt-dev] [PATCH v2 8/8] tests/kms_vrr: Add a max/min test to oscillate between rates Sean Paul
2023-11-16 8:24 ` Modem, Bhanuprakash
2023-10-24 7:42 ` [igt-dev] ✗ Fi.CI.BUILD: failure for tests/kms_vrr: Modify kms_vrr to allow flicker profiling Patchwork
2023-10-24 7:45 ` [igt-dev] ✗ GitLab.Pipeline: warning " Patchwork
2023-11-14 16:19 ` [igt-dev] [PATCH v2 0/8] " Sean Paul
2023-12-14 6:41 ` Modem, Bhanuprakash
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231023205910.3556533-8-sean@poorly.run \
--to=sean@poorly.run \
--cc=igt-dev@lists.freedesktop.org \
--cc=seanpaul@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox