[Intel-gfx] [PATCH i-g-t 1/5] tests/kms_plane_multiple: Add TEST_ONLY flag

Mika Kahola mika.kahola at intel.com
Fri Dec 30 12:00:37 UTC 2016


Add TEST_ONLY flag to test atomic modesetting commits without
actual real-life commit.

Signed-off-by: Mika Kahola <mika.kahola at intel.com>
---
 tests/kms_plane_multiple.c | 79 ++++++++++++++++++++++++++++------------------
 1 file changed, 49 insertions(+), 30 deletions(-)

diff --git a/tests/kms_plane_multiple.c b/tests/kms_plane_multiple.c
index 5e12be4..1a77a38 100644
--- a/tests/kms_plane_multiple.c
+++ b/tests/kms_plane_multiple.c
@@ -61,10 +61,12 @@ struct {
 	int iterations;
 	bool user_seed;
 	int seed;
+	bool test_only;
 } opt = {
 	.iterations = 64,
 	.user_seed = false,
 	.seed = 1,
+	.test_only = false,
 };
 
 static inline uint32_t pipe_select(int pipe)
@@ -228,7 +230,7 @@ prepare_planes(data_t *data, enum pipe pipe, color_t *color,
 static void
 test_atomic_plane_position_with_output(data_t *data, enum pipe pipe,
 				       igt_output_t *output, int max_planes,
-				       uint64_t tiling)
+				       uint64_t tiling, bool test_only)
 {
 	char buf[256];
 	struct drm_event *e = (void *)buf;
@@ -240,6 +242,12 @@ test_atomic_plane_position_with_output(data_t *data, enum pipe pipe,
 	int iterations = opt.iterations < 1 ? 1 : opt.iterations;
 	bool loop_forever;
 	char info[256];
+	int flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
+
+	if (test_only)
+		flags |= DRM_MODE_ATOMIC_TEST_ONLY;
+	else
+		flags |= DRM_MODE_PAGE_FLIP_EVENT;
 
 	if (opt.iterations == LOOP_FOREVER) {
 		loop_forever = true;
@@ -256,8 +264,9 @@ test_atomic_plane_position_with_output(data_t *data, enum pipe pipe,
 
 	test_init(data, pipe);
 
-	test_grab_crc(data, output, pipe, true, &blue, tiling,
-		      &test.reference_crc);
+	if (!test_only)
+		test_grab_crc(data, output, pipe, true, &blue, tiling,
+			      &test.reference_crc);
 
 	i = 0;
 	while (i < iterations || loop_forever) {
@@ -265,24 +274,27 @@ test_atomic_plane_position_with_output(data_t *data, enum pipe pipe,
 
 		vblank_start = get_vblank(data->display.drm_fd, pipe, DRM_VBLANK_NEXTONMISS);
 
-		igt_display_commit_atomic(&data->display,
-					  DRM_MODE_PAGE_FLIP_EVENT,
-					  &data->display);
+		ret = igt_display_try_commit_atomic(&data->display,
+						    flags,
+						    &data->display);
+		igt_assert(ret != -EINVAL);
 
-		igt_set_timeout(1, "Stuck on page flip");
+		if (!test_only) {
+			igt_set_timeout(1, "Stuck on page flip");
 
-		ret = read(data->display.drm_fd, buf, sizeof(buf));
-		igt_assert(ret >= 0);
+			ret = read(data->display.drm_fd, buf, sizeof(buf));
+			igt_assert(ret >= 0);
 
-		igt_assert_eq(get_vblank(data->display.drm_fd, pipe, 0), vblank_start + 1);
-		igt_assert_eq(e->type, DRM_EVENT_FLIP_COMPLETE);
-		igt_reset_timeout();
+			igt_assert_eq(get_vblank(data->display.drm_fd, pipe, 0), vblank_start + 1);
+			igt_assert_eq(e->type, DRM_EVENT_FLIP_COMPLETE);
+			igt_reset_timeout();
 
-		n = igt_pipe_crc_get_crcs(data->pipe_crc, MAX_CRCS, &crc);
+			n = igt_pipe_crc_get_crcs(data->pipe_crc, MAX_CRCS, &crc);
 
-		igt_assert_eq(n, MAX_CRCS);
+			igt_assert_eq(n, MAX_CRCS);
 
-		igt_assert_crc_equal(&test.reference_crc, crc);
+			igt_assert_crc_equal(&test.reference_crc, crc);
+		}
 
 		i++;
 	}
@@ -345,7 +357,7 @@ test_legacy_plane_position_with_output(data_t *data, enum pipe pipe,
 
 static void
 test_plane_position(data_t *data, enum pipe pipe, bool atomic, int max_planes,
-		    uint64_t tiling)
+		    uint64_t tiling, bool test_only)
 {
 	igt_output_t *output;
 	int connected_outs;
@@ -372,7 +384,8 @@ test_plane_position(data_t *data, enum pipe pipe, bool atomic, int max_planes,
 			test_atomic_plane_position_with_output(data, pipe,
 							       output,
 							       max_planes,
-							       tiling);
+							       tiling,
+							       test_only);
 		else
 			test_legacy_plane_position_with_output(data, pipe,
 							       output,
@@ -387,54 +400,55 @@ test_plane_position(data_t *data, enum pipe pipe, bool atomic, int max_planes,
 }
 
 static void
-run_tests_for_pipe_plane(data_t *data, enum pipe pipe, int max_planes)
+run_tests_for_pipe_plane(data_t *data, enum pipe pipe, int max_planes,
+			 bool test_only)
 {
 	igt_subtest_f("legacy-pipe-%s-tiling-none-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, false, max_planes,
-				    LOCAL_DRM_FORMAT_MOD_NONE);
+				    LOCAL_DRM_FORMAT_MOD_NONE, test_only);
 
 	igt_subtest_f("atomic-pipe-%s-tiling-none-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, true, max_planes,
-				    LOCAL_I915_FORMAT_MOD_X_TILED);
+				    LOCAL_I915_FORMAT_MOD_X_TILED, test_only);
 
 	igt_subtest_f("legacy-pipe-%s-tiling-x-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, false, max_planes,
-				    LOCAL_I915_FORMAT_MOD_X_TILED);
+				    LOCAL_I915_FORMAT_MOD_X_TILED, test_only);
 
 	igt_subtest_f("atomic-pipe-%s-tiling-x-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, true, max_planes,
-				    LOCAL_I915_FORMAT_MOD_X_TILED);
+				    LOCAL_I915_FORMAT_MOD_X_TILED, test_only);
 
 	igt_subtest_f("legacy-pipe-%s-tiling-y-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, false, max_planes,
-				    LOCAL_I915_FORMAT_MOD_Y_TILED);
+				    LOCAL_I915_FORMAT_MOD_Y_TILED, test_only);
 
 	igt_subtest_f("atomic-pipe-%s-tiling-y-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, true, max_planes,
-				    LOCAL_I915_FORMAT_MOD_Y_TILED);
+				    LOCAL_I915_FORMAT_MOD_Y_TILED, test_only);
 
 	igt_subtest_f("legacy-pipe-%s-tiling-yf-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, false, max_planes,
-				    LOCAL_I915_FORMAT_MOD_Yf_TILED);
+				    LOCAL_I915_FORMAT_MOD_Yf_TILED, test_only);
 
 	igt_subtest_f("atomic-pipe-%s-tiling-yf-planes-%d",
 		      kmstest_pipe_name(pipe), max_planes)
 		test_plane_position(data, pipe, true, max_planes,
-				    LOCAL_I915_FORMAT_MOD_Yf_TILED);
+				    LOCAL_I915_FORMAT_MOD_Yf_TILED, test_only);
 }
 
 static void
-run_tests_for_pipe(data_t *data, enum pipe pipe)
+run_tests_for_pipe(data_t *data, enum pipe pipe, bool test_only)
 {
 	for (int planes = IGT_PLANE_PRIMARY; planes < IGT_MAX_PLANES; planes++)
-		run_tests_for_pipe_plane(data, pipe, planes);
+		run_tests_for_pipe_plane(data, pipe, planes, test_only);
 }
 
 static data_t data;
@@ -455,6 +469,9 @@ static int opt_handler(int option, int option_index, void *input)
 		opt.user_seed = true;
 		opt.seed = strtol(optarg, NULL, 0);
 		break;
+	case 't':
+		opt.test_only = true;
+		break;
 	default:
 		igt_assert(false);
 	}
@@ -464,13 +481,15 @@ static int opt_handler(int option, int option_index, void *input)
 
 const char *help_str =
 	"  --iterations Number of iterations for test coverage. -1 loop forever, default 64 iterations\n"
-	"  --seed       Seed for random number generator\n";
+	"  --seed       Seed for random number generator\n"
+	"  --test-only  test only atomic commit\n";
 
 int main(int argc, char *argv[])
 {
 	struct option long_options[] = {
 		{ "iterations", required_argument, NULL, 'i'},
 		{ "seed",    required_argument, NULL, 's'},
+		{ "test-only", no_argument, NULL, 't'},
 		{ 0, 0, 0, 0 }
 	};
 
@@ -489,7 +508,7 @@ int main(int argc, char *argv[])
 	}
 
 	for (int pipe = 0; pipe < I915_MAX_PIPES; pipe++)
-		run_tests_for_pipe(&data, pipe);
+		run_tests_for_pipe(&data, pipe, opt.test_only);
 
 	igt_fixture {
 		igt_display_fini(&data.display);
-- 
2.7.4



More information about the Intel-gfx mailing list