summaryrefslogtreecommitdiff
path: root/tests/kms_concurrent.c
diff options
context:
space:
mode:
authorMohammed Khajapasha <mohammed.khajapasha@intel.com>2020-01-24 11:40:24 +0530
committerJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>2020-01-28 16:35:40 +0200
commit991fd07bcd7add7a5beca2c95b72a994e62fbb75 (patch)
tree5bf82a27fcba9eaf5363f3dd14d7131a9761a782 /tests/kms_concurrent.c
parent9b8b789ef15f8b5abdfbe2684cae234164254cda (diff)
tests/kms_concurrent: Move simultaneously allowed planes to main thread
High resolution consumes more bandwidth so if amount of max planes is calculated during low resolution switch back to high resolution will immediately fail with bandwidth problem. To avoid bandwidth exceed,move the simultaneously allowed planes to before switching to low resolution mode in main thread. Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@intel.com> Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Diffstat (limited to 'tests/kms_concurrent.c')
-rw-r--r--tests/kms_concurrent.c65
1 files changed, 30 insertions, 35 deletions
diff --git a/tests/kms_concurrent.c b/tests/kms_concurrent.c
index a0280d15..14ca5fab 100644
--- a/tests/kms_concurrent.c
+++ b/tests/kms_concurrent.c
@@ -57,33 +57,11 @@ struct {
static void test_init(data_t *data, enum pipe pipe, int n_planes,
igt_output_t *output)
{
- drmModeModeInfo *mode;
- igt_plane_t *primary;
- int ret;
-
data->plane = calloc(n_planes, sizeof(*data->plane));
igt_assert_f(data->plane != NULL, "Failed to allocate memory for planes\n");
data->fb = calloc(n_planes, sizeof(struct igt_fb));
igt_assert_f(data->fb != NULL, "Failed to allocate memory for FBs\n");
-
- igt_output_set_pipe(output, pipe);
-
- primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
- data->plane[primary->index] = primary;
-
- mode = igt_output_get_mode(output);
-
- igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
- DRM_FORMAT_XRGB8888,
- LOCAL_I915_FORMAT_MOD_X_TILED,
- 0.0f, 0.0f, 1.0f,
- &data->fb[primary->index]);
-
- igt_plane_set_fb(data->plane[primary->index], &data->fb[primary->index]);
-
- ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
- igt_skip_on(ret != 0);
}
static void test_fini(data_t *data, enum pipe pipe, int n_planes,
@@ -184,7 +162,6 @@ prepare_planes(data_t *data, enum pipe pipe, int max_planes,
y[primary->index] = 0;
for (i = 0; i < max_planes; i++) {
igt_plane_t *plane = igt_output_get_plane(output, i);
- int ret;
if (plane->type == DRM_PLANE_TYPE_PRIMARY)
continue;
@@ -207,18 +184,7 @@ prepare_planes(data_t *data, enum pipe pipe, int max_planes,
igt_plane_set_position(data->plane[i], x[i], y[i]);
igt_plane_set_fb(data->plane[i], &data->fb[i]);
-
- ret = igt_display_try_commit_atomic(&data->display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
- if (ret) {
- igt_plane_set_fb(data->plane[i], NULL);
- igt_remove_fb(data->drm_fd, &data->fb[i]);
- data->plane[i] = NULL;
- break;
- }
}
- max_planes = i;
-
- igt_assert_lt(0, max_planes);
/* primary plane */
data->plane[primary->index] = primary;
@@ -282,10 +248,39 @@ test_resolution_with_output(data_t *data, enum pipe pipe, igt_output_t *output)
const drmModeModeInfo *mode_hi, *mode_lo;
int iterations = opt.iterations < 1 ? 1 : opt.iterations;
bool loop_forever = opt.iterations == LOOP_FOREVER ? true : false;
- int i;
+ int i, c, ret;
+ int max_planes = data->display.pipes[pipe].n_planes;
+ igt_plane_t *primary;
+ drmModeModeInfo *mode;
i = 0;
while (i < iterations || loop_forever) {
+ igt_output_set_pipe(output, pipe);
+ for (c = 0; c < max_planes; c++) {
+ igt_plane_t *plane = igt_output_get_plane(output, c);
+
+ if (plane->type != DRM_PLANE_TYPE_PRIMARY)
+ continue;
+ primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+ data->plane[primary->index] = primary;
+ mode = igt_output_get_mode(output);
+ igt_create_color_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ LOCAL_I915_FORMAT_MOD_X_TILED,
+ 0.0f, 0.0f, 1.0f,
+ &data->fb[primary->index]);
+ igt_plane_set_fb(data->plane[primary->index], &data->fb[primary->index]);
+ ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+ if (ret) {
+ igt_plane_set_fb(data->plane[i], NULL);
+ igt_remove_fb(data->drm_fd, &data->fb[i]);
+ data->plane[i] = NULL;
+ break;
+ }
+ }
+ max_planes = c;
+ igt_assert_lt(0, max_planes);
+
mode_hi = igt_output_get_mode(output);
mode_lo = get_lowres_mode(data, mode_hi, output);