[igt-dev] [PATCH] tests/kms_vrr: Update condition checks for flipline test

Bhanuprakash Modem bhanuprakash.modem at intel.com
Tue Dec 15 15:19:24 UTC 2020


This patch includes below updates
* For Flipline test: if refresh_rate <= Vrr_min then
	- Expected returned refresh rate would be vrr_max
	- At least 35% of the flips should be in threshold
* Update "igt_display_commit_atomic" with "igt_display_commit2"
* Add few debug prints

Cc: Manasi Navare <manasi.d.navare at intel.com>
Cc: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
---
 tests/kms_vrr.c | 49 +++++++++++++++++++++----------------------------
 1 file changed, 21 insertions(+), 28 deletions(-)

diff --git a/tests/kms_vrr.c b/tests/kms_vrr.c
index ac42165b..4d6ec097 100644
--- a/tests/kms_vrr.c
+++ b/tests/kms_vrr.c
@@ -170,7 +170,7 @@ static void set_vrr_on_pipe(data_t *data, enum pipe pipe, bool enabled)
 {
 	igt_pipe_set_prop_value(&data->display, pipe, IGT_CRTC_VRR_ENABLED,
 				enabled);
-	igt_display_commit_atomic(&data->display, 0, NULL);
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
 }
 
 /* Prepare the display for testing on the given pipe. */
@@ -208,8 +208,7 @@ static void prepare_test(data_t *data, igt_output_t *output, enum pipe pipe)
 	 */
 	igt_pipe_set_prop_value(&data->display, pipe, IGT_CRTC_VRR_ENABLED, 0);
 
-	igt_display_commit_atomic(&data->display,
-				  DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
 }
 
 /* Waits for the vblank interval. Returns the vblank timestamp in ns. */
@@ -291,11 +290,9 @@ flip_and_measure(data_t *data, igt_output_t *output, enum pipe pipe,
 		 * difference between 144Hz and 143Hz which should give this
 		 * enough accuracy for most use cases.
 		 */
-		if ((rate_ns <= vtest_ns.min) && (rate_ns >= vtest_ns.max))
+		if ((rate_ns < vtest_ns.min) && (rate_ns >= vtest_ns.max))
 			diff_ns = rate_ns - (event_ns - last_event_ns);
-		else if (rate_ns > vtest_ns.min)
-			diff_ns = vtest_ns.min - (event_ns - last_event_ns);
-		else if (rate_ns < vtest_ns.max)
+		else
 			diff_ns = vtest_ns.max - (event_ns - last_event_ns);
 
 		if (llabs(diff_ns) < 50000ll)
@@ -320,8 +317,8 @@ flip_and_measure(data_t *data, igt_output_t *output, enum pipe pipe,
 		while (get_time_ns() < target_ns);
 	}
 
-	igt_info("Completed %u flips, %u were in threshold for %"PRIu64"ns.\n",
-		 total_flip, total_pass, rate_ns);
+	igt_info("Completed %u flips, %u were in threshold for (%llu) %"PRIu64"ns.\n",
+		 total_flip, total_pass, (NSECS_PER_SEC/rate_ns), rate_ns);
 
 	return total_flip ? ((total_pass * 100) / total_flip) : 0;
 }
@@ -335,8 +332,8 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
 	range_t range = get_vrr_range(data, output);
 	uint64_t rate = vtest_ns.mid;
 
-	igt_info("VRR Test execution on %s, PIPE_%s\n",
-		 output->name, kmstest_pipe_name(pipe));
+	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);
 
 	prepare_test(data, output, pipe);
 
@@ -367,46 +364,42 @@ test_basic(data_t *data, enum pipe pipe, igt_output_t *output, uint32_t flags)
 	 * decision boundary.
 	 *
 	 * Example: if range is 40 - 60Hz and
-	 * if refresh_rate > 60Hz:
+	 * if refresh_rate > 60Hz or <= 40Hz:
 	 *      Flip should happen at the flipline boundary & returned refresh rate
 	 *      would be 60Hz.
 	 * if refresh_rate is 50Hz:
 	 *      Flip will happen right away so returned refresh rate is 50Hz.
-	 * if refresh_rate < 40Hz:
-	 *      Flip should happen at the vmax so the returned refresh rate
-	 *      would be 40Hz.
 	 */
 	if (flags & TEST_FLIPLINE) {
-		rate = rate_from_refresh(range.min - 5);
+		rate = rate_from_refresh(range.max + 5);
 		result = flip_and_measure(data, output, pipe, rate, TEST_DURATION_NS);
 		igt_assert_f(result > 75,
-			     "Refresh rate %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
-			     rate, result);
+			     "Refresh rate (%u) %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
+			     (range.max + 5), rate, result);
 
-		rate = rate_from_refresh(range.max + 5);
+		rate = rate_from_refresh(range.min - 5);
 		result = flip_and_measure(data, output, pipe, rate, TEST_DURATION_NS);
-		igt_assert_f(result > 75,
-			     "Refresh rate %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
-			     rate, result);
+		igt_assert_f(result > 35,
+			     "Refresh rate (%u) %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
+			     (range.min - 5), rate, result);
 	}
 
 	rate = vtest_ns.mid;
 	result = flip_and_measure(data, output, pipe, rate, TEST_DURATION_NS);
 	igt_assert_f(result > 75,
-		     "Refresh rate %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
-		     rate, result);
+		     "Refresh rate (%u) %"PRIu64"ns: Target VRR on threshold not reached, result was %u%%\n",
+		     ((range.max + range.min) / 2), rate, result);
 
 	set_vrr_on_pipe(data, pipe, 0);
 	result = flip_and_measure(data, output, pipe, rate, TEST_DURATION_NS);
 	igt_assert_f(result < 10,
-		     "Refresh rate %"PRIu64"ns: Target VRR off threshold exceeded, result was %u%%\n",
-		     rate, result);
+		     "Refresh rate (%u) %"PRIu64"ns: Target VRR off threshold exceeded, result was %u%%\n",
+		     ((range.max + range.min) / 2), rate, result);
 
 	/* Clean-up */
 	igt_plane_set_fb(data->primary, NULL);
 	igt_output_set_pipe(output, PIPE_NONE);
-	igt_display_commit_atomic(&data->display,
-				  DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
 
 	igt_remove_fb(data->drm_fd, &data->fb1);
 	igt_remove_fb(data->drm_fd, &data->fb0);
-- 
2.20.1



More information about the igt-dev mailing list