[mutter] monitor-unit-tests: Check monitor modes
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-unit-tests: Check monitor modes
- Date: Wed, 25 Jan 2017 08:35:25 +0000 (UTC)
commit 63ed1341653c686cc1d4480ebd0206f8a1f45a10
Author: Jonas Ådahl <jadahl gmail com>
Date: Wed Dec 14 17:23:44 2016 +0800
monitor-unit-tests: Check monitor modes
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/tests/monitor-unit-tests.c | 208 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 208 insertions(+), 0 deletions(-)
---
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index dd70703..1c07e3f 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -113,10 +113,25 @@ typedef struct _MonitorTestCaseSetup
int n_crtcs;
} MonitorTestCaseSetup;
+typedef struct _MonitorTestCaseMonitorCrtcMode
+{
+ int output;
+ int crtc_mode;
+} MetaTestCaseMonitorCrtcMode;
+
+typedef struct _MonitorTestCaseMonitorMode
+{
+ int width;
+ int height;
+ MetaTestCaseMonitorCrtcMode crtc_modes[MAX_N_CRTCS];
+} MetaMonitorTestCaseMonitorMode;
+
typedef struct _MonitorTestCaseMonitor
{
long outputs[MAX_N_OUTPUTS];
int n_outputs;
+ MetaMonitorTestCaseMonitorMode modes[MAX_N_MODES];
+ int n_modes;
int width_mm;
int height_mm;
} MonitorTestCaseMonitor;
@@ -195,12 +210,38 @@ static MonitorTestCase initial_test_case = {
{
.outputs = { 0 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ }
+ }
+ }
+ },
+ .n_modes = 1,
.width_mm = 222,
.height_mm = 125
},
{
.outputs = { 1 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 1,
+ .crtc_mode = 0
+ }
+ }
+ }
+ },
+ .n_modes = 1,
.width_mm = 220,
.height_mm = 124
}
@@ -241,6 +282,33 @@ output_from_winsys_id (MetaMonitorManager *monitor_manager,
return NULL;
}
+typedef struct _CheckMonitorModeData
+{
+ MetaMonitorManager *monitor_manager;
+ MetaTestCaseMonitorCrtcMode *expect_crtc_mode_iter;
+} CheckMonitorModeData;
+
+static void
+check_monitor_mode (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorCrtcMode *monitor_crtc_mode,
+ gpointer user_data)
+{
+ CheckMonitorModeData *data = user_data;
+ MetaMonitorManager *monitor_manager = data->monitor_manager;
+ MetaOutput *output;
+ MetaCrtcMode *crtc_mode;
+
+ output = output_from_winsys_id (monitor_manager,
+ data->expect_crtc_mode_iter->output);
+ crtc_mode = &monitor_manager->modes[data->expect_crtc_mode_iter->crtc_mode];
+
+ g_assert (monitor_crtc_mode->output == output);
+ g_assert (monitor_crtc_mode->crtc_mode == crtc_mode);
+
+ data->expect_crtc_mode_iter++;
+}
+
static void
check_monitor_configuration (MonitorTestCase *test_case)
{
@@ -274,6 +342,8 @@ check_monitor_configuration (MonitorTestCase *test_case)
GList *l_output;
int j;
int width_mm, height_mm;
+ GList *modes;
+ GList *l_mode;
outputs = meta_monitor_get_outputs (monitor);
@@ -292,6 +362,29 @@ check_monitor_configuration (MonitorTestCase *test_case)
meta_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
g_assert (width_mm == test_case->expect.monitors[i].width_mm);
g_assert (height_mm == test_case->expect.monitors[i].height_mm);
+
+ modes = meta_monitor_get_modes (monitor);
+ for (l_mode = modes, j = 0; l_mode; l_mode = l_mode->next, j++)
+ {
+ MetaMonitorMode *mode = l_mode->data;
+ int width;
+ int height;
+ CheckMonitorModeData data;
+
+ meta_monitor_mode_get_resolution (mode, &width, &height);
+
+ g_assert (width == test_case->expect.monitors[i].modes[j].width);
+ g_assert (height == test_case->expect.monitors[i].modes[j].height);
+
+ data = (CheckMonitorModeData) {
+ .monitor_manager = monitor_manager,
+ .expect_crtc_mode_iter =
+ test_case->expect.monitors[i].modes[j].crtc_modes
+ };
+ meta_monitor_mode_foreach_crtc (monitor, mode,
+ check_monitor_mode,
+ &data);
+ }
}
n_logical_monitors =
@@ -488,6 +581,19 @@ meta_test_monitor_one_disconnected_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ }
+ }
+ }
+ },
+ .n_modes = 1,
.width_mm = 222,
.height_mm = 125
}
@@ -551,12 +657,38 @@ meta_test_monitor_one_off_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ }
+ }
+ }
+ },
+ .n_modes = 1,
.width_mm = 222,
.height_mm = 125
},
{
.outputs = { 1 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 1,
+ .crtc_mode = 0
+ }
+ }
+ }
+ },
+ .n_modes = 1,
.width_mm = 224,
.height_mm = 126
}
@@ -633,6 +765,39 @@ meta_test_monitor_preferred_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 800,
+ .height = 600,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ }
+ }
+ },
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 1
+ }
+ }
+ },
+ {
+ .width = 1280,
+ .height = 720,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 2
+ }
+ }
+ }
+ },
+ .n_modes = 3,
.width_mm = 222,
.height_mm = 125
}
@@ -728,6 +893,23 @@ meta_test_monitor_tiled_linear_config (void)
{
.outputs = { 0, 1 },
.n_outputs = 2,
+ .modes = {
+ {
+ .width = 800,
+ .height = 600,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ },
+ {
+ .output = 1,
+ .crtc_mode = 0
+ }
+ }
+ },
+ },
+ .n_modes = 1,
.width_mm = 222,
.height_mm = 125,
}
@@ -814,12 +996,38 @@ meta_test_monitor_hidpi_linear_config (void)
{
.outputs = { 0 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1280,
+ .height = 720,
+ .crtc_modes = {
+ {
+ .output = 0,
+ .crtc_mode = 0
+ }
+ }
+ },
+ },
+ .n_modes = 1,
.width_mm = 150,
.height_mm = 85
},
{
.outputs = { 1 },
.n_outputs = 1,
+ .modes = {
+ {
+ .width = 1024,
+ .height = 768,
+ .crtc_modes = {
+ {
+ .output = 1,
+ .crtc_mode = 1
+ }
+ }
+ },
+ },
+ .n_modes = 1,
.width_mm = 222,
.height_mm = 125
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]