Mir

Merge lp:~vanvugt/mir/set-logical-size into lp:mir

Proposed by Daniel van Vugt
Status: Superseded
Proposed branch: lp:~vanvugt/mir/set-logical-size
Merge into: lp:mir
Diff against target: 779 lines (+247/-20)
28 files modified
include/client/mir_toolkit/mir_display_configuration.h (+14/-0)
include/platform/mir/graphics/display_configuration.h (+12/-0)
src/client/display_configuration_api.cpp (+13/-0)
src/client/symbols.map (+6/-1)
src/platform/graphics/display_configuration.cpp (+35/-3)
src/platform/graphics/overlapping_output_grouping.cpp (+2/-2)
src/platform/symbols.map (+7/-0)
src/platforms/android/server/display.cpp (+2/-2)
src/platforms/android/server/display_configuration.cpp (+1/-0)
src/platforms/android/server/fb_device.cpp (+1/-0)
src/platforms/android/server/hwc_blanking_control.cpp (+1/-0)
src/platforms/eglstream-kms/server/display.cpp (+1/-1)
src/platforms/mesa/server/kms/display.cpp (+5/-9)
src/platforms/mesa/server/x11/graphics/display.cpp (+3/-1)
src/platforms/mesa/server/x11/graphics/display_configuration.cpp (+1/-0)
src/server/frontend/session_mediator.cpp (+6/-0)
src/server/graphics/nested/nested_display_configuration.cpp (+3/-1)
src/server/graphics/offscreen/display_configuration.cpp (+1/-0)
tests/acceptance-tests/test_latency.cpp (+1/-0)
tests/acceptance-tests/test_new_display_configuration.cpp (+55/-0)
tests/mir_test/display_config_matchers.cpp (+3/-0)
tests/mir_test_doubles/stub_display_configuration.cpp (+4/-0)
tests/unit-tests/graphics/test_default_display_configuration_policy.cpp (+1/-0)
tests/unit-tests/graphics/test_display_configuration.cpp (+48/-0)
tests/unit-tests/graphics/test_overlapping_output_grouping.cpp (+1/-0)
tests/unit-tests/platforms/mesa/kms/test_cursor.cpp (+3/-0)
tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp (+9/-0)
tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp (+8/-0)
To merge this branch: bzr merge lp:~vanvugt/mir/set-logical-size
Reviewer Review Type Date Requested Status
Mir development team Pending
Review via email: mp+322511@code.launchpad.net

This proposal has been superseded by a proposal from 2017-04-13.

Commit message

Add the ability to set the logical size/resolution of an output,
independently of its physical resolution.

That's another big step in LP: #1639226, almost done.

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/client/mir_toolkit/mir_display_configuration.h'
--- include/client/mir_toolkit/mir_display_configuration.h 2017-02-17 08:46:05 +0000
+++ include/client/mir_toolkit/mir_display_configuration.h 2017-04-13 08:26:06 +0000
@@ -333,6 +333,20 @@
333unsigned int mir_output_get_logical_height(MirOutput const* output);333unsigned int mir_output_get_logical_height(MirOutput const* output);
334334
335/**335/**
336 * Set the logical size of the virtual display space occupied by an output.
337 * By default this is the dimensions of the output's current mode, but you
338 * can now set it to an arbitrary size and the compositor will scale
339 * accordingly.
340 *
341 * \param [in] output The output to modify
342 * \param [in] w The width in logical view area pixels, or zero to
343 * revert to the current display mode dimensions.
344 * \param [in] h The height in logical view area pixels, or zero to
345 * revert to the current display mode dimensions.
346 */
347void mir_output_set_logical_size(MirOutput* output, unsigned w, unsigned h);
348
349/**
336 * Set the coordinates of the top-left point of the output in the virtual350 * Set the coordinates of the top-left point of the output in the virtual
337 * display space.351 * display space.
338 *352 *
339353
=== modified file 'include/platform/mir/graphics/display_configuration.h'
--- include/platform/mir/graphics/display_configuration.h 2017-01-18 02:29:37 +0000
+++ include/platform/mir/graphics/display_configuration.h 2017-04-13 08:26:06 +0000
@@ -24,8 +24,11 @@
24#include "mir/geometry/rectangle.h"24#include "mir/geometry/rectangle.h"
25#include "mir/geometry/point.h"25#include "mir/geometry/point.h"
26#include "mir/graphics/gamma_curves.h"26#include "mir/graphics/gamma_curves.h"
27#include "mir/optional_value.h"
27#include "mir_toolkit/common.h"28#include "mir_toolkit/common.h"
2829
30#include <glm/glm.hpp>
31
29#include <functional>32#include <functional>
30#include <vector>33#include <vector>
31#include <memory>34#include <memory>
@@ -130,10 +133,18 @@
130 /** EDID of the display, if non-empty */133 /** EDID of the display, if non-empty */
131 std::vector<uint8_t> edid;134 std::vector<uint8_t> edid;
132135
136 mir::optional_value<geometry::Size> custom_logical_size;
137
133 /** The logical rectangle occupied by the output, based on its position,138 /** The logical rectangle occupied by the output, based on its position,
134 current mode and orientation (rotation) */139 current mode and orientation (rotation) */
135 geometry::Rectangle extents() const;140 geometry::Rectangle extents() const;
136 bool valid() const;141 bool valid() const;
142
143 /**
144 * The transformation required to map this output's logical view area
145 * (returned by extents()) on to the output's current mode.
146 */
147 glm::mat2 transformation() const;
137};148};
138149
139/**150/**
@@ -162,6 +173,7 @@
162 GammaCurves& gamma;173 GammaCurves& gamma;
163 MirOutputGammaSupported const& gamma_supported;174 MirOutputGammaSupported const& gamma_supported;
164 std::vector<uint8_t const> const& edid;175 std::vector<uint8_t const> const& edid;
176 mir::optional_value<geometry::Size>& custom_logical_size;
165177
166 UserDisplayConfigurationOutput(DisplayConfigurationOutput& master);178 UserDisplayConfigurationOutput(DisplayConfigurationOutput& master);
167 geometry::Rectangle extents() const;179 geometry::Rectangle extents() const;
168180
=== modified file 'src/client/display_configuration_api.cpp'
--- src/client/display_configuration_api.cpp 2017-02-17 08:46:05 +0000
+++ src/client/display_configuration_api.cpp 2017-04-13 08:26:06 +0000
@@ -261,6 +261,19 @@
261 return output->logical_height();261 return output->logical_height();
262}262}
263263
264void mir_output_set_logical_size(MirOutput* output, unsigned w, unsigned h)
265{
266 if (w)
267 output->set_logical_width(w);
268 else
269 output->clear_logical_width();
270
271 if (h)
272 output->set_logical_height(h);
273 else
274 output->clear_logical_height();
275}
276
264void mir_output_set_position(MirOutput* output, int x, int y)277void mir_output_set_position(MirOutput* output, int x, int y)
265{278{
266 output->set_position_x(x);279 output->set_position_x(x);
267280
=== modified file 'src/client/symbols.map'
--- src/client/symbols.map 2017-04-13 04:26:20 +0000
+++ src/client/symbols.map 2017-04-13 08:26:06 +0000
@@ -579,7 +579,7 @@
579 };579 };
580} MIR_CLIENT_DETAIL_0.26.1;580} MIR_CLIENT_DETAIL_0.26.1;
581581
582MIR_CLIENT_0.27 { # New functions in Mir 0.27 or 1.0582MIR_CLIENT_0.27 { # New functions in Mir 0.27
583 global:583 global:
584 mir_connection_apply_session_input_config;584 mir_connection_apply_session_input_config;
585 mir_connection_set_base_input_config;585 mir_connection_set_base_input_config;
@@ -611,3 +611,8 @@
611 mir_touchscreen_config_set_mapping_mode;611 mir_touchscreen_config_set_mapping_mode;
612 mir_touchscreen_config_set_output_id;612 mir_touchscreen_config_set_output_id;
613} MIR_CLIENT_0.26.1;613} MIR_CLIENT_0.26.1;
614
615MIR_CLIENT_0.28 { # New functions in Mir 0.28
616 global:
617 mir_output_set_logical_size;
618} MIR_CLIENT_0.27;
614619
=== modified file 'src/platform/graphics/display_configuration.cpp'
--- src/platform/graphics/display_configuration.cpp 2017-01-18 02:29:37 +0000
+++ src/platform/graphics/display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -18,6 +18,7 @@
1818
19#include "mir/graphics/display_configuration.h"19#include "mir/graphics/display_configuration.h"
20#include "mir/output_type_names.h"20#include "mir/output_type_names.h"
21#include "mir/graphics/transformation.h"
2122
22#include <ostream>23#include <ostream>
23#include <algorithm>24#include <algorithm>
@@ -243,7 +244,28 @@
243244
244mir::geometry::Rectangle mg::DisplayConfigurationOutput::extents() const245mir::geometry::Rectangle mg::DisplayConfigurationOutput::extents() const
245{246{
246 return extents_of(modes, current_mode_index, orientation, top_left);247 return custom_logical_size.is_set() ?
248 mir::geometry::Rectangle(top_left, custom_logical_size.value()) :
249 extents_of(modes, current_mode_index, orientation, top_left);
250}
251
252glm::mat2 mg::DisplayConfigurationOutput::transformation() const
253{
254 auto rot = mg::transformation(orientation);
255
256 if (!custom_logical_size.is_set())
257 return rot;
258
259 auto const& physical_size = extents_of(modes, current_mode_index,
260 orientation, top_left).size;
261 auto const& logical_size = custom_logical_size.value();
262
263 float scale_x = static_cast<float>(physical_size.width.as_int()) /
264 logical_size.width.as_int();
265 float scale_y = static_cast<float>(physical_size.height.as_int()) /
266 logical_size.height.as_int();
267
268 return glm::mat2(scale_x, 0, 0, scale_y) * rot;
247}269}
248270
249bool mg::DisplayConfigurationOutput::valid() const271bool mg::DisplayConfigurationOutput::valid() const
@@ -260,6 +282,13 @@
260 if (current_mode_index >= nmodes)282 if (current_mode_index >= nmodes)
261 return false;283 return false;
262284
285 if (custom_logical_size.is_set())
286 {
287 auto const& logical_size = custom_logical_size.value();
288 if (!logical_size.width.as_int() || !logical_size.height.as_int())
289 return false;
290 }
291
263 return true;292 return true;
264}293}
265294
@@ -297,13 +326,16 @@
297 subpixel_arrangement(master.subpixel_arrangement),326 subpixel_arrangement(master.subpixel_arrangement),
298 gamma(master.gamma),327 gamma(master.gamma),
299 gamma_supported(master.gamma_supported),328 gamma_supported(master.gamma_supported),
300 edid(*reinterpret_cast<std::vector<uint8_t const>*>(&master.edid))329 edid(*reinterpret_cast<std::vector<uint8_t const>*>(&master.edid)),
330 custom_logical_size(master.custom_logical_size)
301{331{
302}332}
303333
304mir::geometry::Rectangle mg::UserDisplayConfigurationOutput::extents() const334mir::geometry::Rectangle mg::UserDisplayConfigurationOutput::extents() const
305{335{
306 return extents_of(modes, current_mode_index, orientation, top_left);336 return custom_logical_size.is_set() ?
337 mir::geometry::Rectangle(top_left, custom_logical_size.value()) :
338 extents_of(modes, current_mode_index, orientation, top_left);
307}339}
308340
309341
310342
=== modified file 'src/platform/graphics/overlapping_output_grouping.cpp'
--- src/platform/graphics/overlapping_output_grouping.cpp 2015-02-22 07:46:25 +0000
+++ src/platform/graphics/overlapping_output_grouping.cpp 2017-04-13 08:26:06 +0000
@@ -112,11 +112,11 @@
112 {112 {
113 /*113 /*
114 * Prevent grouping of outputs when they have differing114 * Prevent grouping of outputs when they have differing
115 * orientations. It's safer to assume the hardware can't115 * transformations. It's safer to assume the hardware can't
116 * handle it for now... until proven otherwise.116 * handle it for now... until proven otherwise.
117 */117 */
118 if (conf_o.extents().overlaps(rect_output) &&118 if (conf_o.extents().overlaps(rect_output) &&
119 conf_o.orientation == conf_output.orientation)119 conf_o.transformation() == conf_output.transformation())
120 found_overlap = true;120 found_overlap = true;
121 });121 });
122122
123123
=== modified file 'src/platform/symbols.map'
--- src/platform/symbols.map 2017-04-05 03:11:28 +0000
+++ src/platform/symbols.map 2017-04-13 08:26:06 +0000
@@ -159,3 +159,10 @@
159 };159 };
160 local: *;160 local: *;
161};161};
162
163MIRPLATFORM_0.28 {
164 global:
165 extern "C++" {
166 mir::graphics::DisplayConfigurationOutput::transformation*;
167 };
168} MIRPLATFORM_0.27;
162169
=== modified file 'src/platforms/android/server/display.cpp'
--- src/platforms/android/server/display.cpp 2017-04-05 03:11:28 +0000
+++ src/platforms/android/server/display.cpp 2017-04-13 08:26:06 +0000
@@ -133,7 +133,7 @@
133 native_window,133 native_window,
134 gl_context,134 gl_context,
135 *gl_program_factory,135 *gl_program_factory,
136 mg::transformation(config.orientation),136 config.transformation(),
137 config.extents(),137 config.extents(),
138 overlay_option));138 overlay_option));
139}139}
@@ -398,7 +398,7 @@
398 config[output.id].scale = output.scale;398 config[output.id].scale = output.scale;
399 config[output.id].top_left = output.top_left;399 config[output.id].top_left = output.top_left;
400400
401 auto const& transform = mg::transformation(output.orientation);401 auto const& transform = output.transformation();
402402
403 if (config.primary().id == output.id)403 if (config.primary().id == output.id)
404 {404 {
405405
=== modified file 'src/platforms/android/server/display_configuration.cpp'
--- src/platforms/android/server/display_configuration.cpp 2017-01-18 02:29:37 +0000
+++ src/platforms/android/server/display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -69,6 +69,7 @@
69 subpixel_arrangement,69 subpixel_arrangement,
70 {},70 {},
71 mir_output_gamma_unsupported,71 mir_output_gamma_unsupported,
72 {},
72 {}73 {}
73 };74 };
74}75}
7576
=== modified file 'src/platforms/android/server/fb_device.cpp'
--- src/platforms/android/server/fb_device.cpp 2017-01-18 02:29:37 +0000
+++ src/platforms/android/server/fb_device.cpp 2017-04-13 08:26:06 +0000
@@ -92,6 +92,7 @@
92 mir_subpixel_arrangement_unknown,92 mir_subpixel_arrangement_unknown,
93 {},93 {},
94 mir_output_gamma_unsupported,94 mir_output_gamma_unsupported,
95 {},
95 {}96 {}
96 };97 };
97}98}
9899
=== modified file 'src/platforms/android/server/hwc_blanking_control.cpp'
--- src/platforms/android/server/hwc_blanking_control.cpp 2017-01-18 02:29:37 +0000
+++ src/platforms/android/server/hwc_blanking_control.cpp 2017-04-13 08:26:06 +0000
@@ -179,6 +179,7 @@
179 mir_subpixel_arrangement_unknown,179 mir_subpixel_arrangement_unknown,
180 {},180 {},
181 mir_output_gamma_unsupported,181 mir_output_gamma_unsupported,
182 {},
182 {}183 {}
183 };184 };
184}185}
185186
=== modified file 'src/platforms/eglstream-kms/server/display.cpp'
--- src/platforms/eglstream-kms/server/display.cpp 2017-04-05 03:11:28 +0000
+++ src/platforms/eglstream-kms/server/display.cpp 2017-04-13 08:26:06 +0000
@@ -126,7 +126,7 @@
126 ctx{create_context(dpy, config, ctx)},126 ctx{create_context(dpy, config, ctx)},
127 layer{output.output_layer()},127 layer{output.output_layer()},
128 view_area_{output.extents()},128 view_area_{output.extents()},
129 transform{mg::transformation(output.orientation)}129 transform{output.transformation()}
130 {130 {
131 EGLint const stream_attribs[] = {131 EGLint const stream_attribs[] = {
132 EGL_STREAM_FIFO_LENGTH_KHR, 1,132 EGL_STREAM_FIFO_LENGTH_KHR, 1,
133133
=== modified file 'src/platforms/mesa/server/kms/display.cpp'
--- src/platforms/mesa/server/kms/display.cpp 2017-04-05 03:11:28 +0000
+++ src/platforms/mesa/server/kms/display.cpp 2017-04-13 08:26:06 +0000
@@ -521,7 +521,7 @@
521 auto bounding_rect = group.bounding_rectangle();521 auto bounding_rect = group.bounding_rectangle();
522 // Each vector<KMSOutput> is a single GPU memory domain522 // Each vector<KMSOutput> is a single GPU memory domain
523 std::vector<std::vector<std::shared_ptr<KMSOutput>>> kms_output_groups;523 std::vector<std::vector<std::shared_ptr<KMSOutput>>> kms_output_groups;
524 MirOrientation orientation = mir_orientation_normal;524 glm::mat2 transformation;
525525
526 group.for_each_output(526 group.for_each_output(
527 [&](DisplayConfigurationOutput const& conf_output)527 [&](DisplayConfigurationOutput const& conf_output)
@@ -539,16 +539,12 @@
539 }539 }
540540
541 /*541 /*
542 * Presently OverlappingOutputGroup guarantees all grouped542 * Presently OverlappingOutputGroup guarantees all grouped
543 * outputs have the same orientation.543 * outputs have the same transformation.
544 */544 */
545 orientation = conf_output.orientation;545 transformation = conf_output.transformation();
546 });546 });
547547
548 // TODO in future outputs should emit transformation instead of
549 // orientation
550 auto const transformation = mg::transformation(orientation);
551
552 if (comp)548 if (comp)
553 {549 {
554 display_buffers[group_idx++]->set_transformation(transformation,550 display_buffers[group_idx++]->set_transformation(transformation,
555551
=== modified file 'src/platforms/mesa/server/x11/graphics/display.cpp'
--- src/platforms/mesa/server/x11/graphics/display.cpp 2017-04-05 03:11:28 +0000
+++ src/platforms/mesa/server/x11/graphics/display.cpp 2017-04-13 08:26:06 +0000
@@ -289,12 +289,14 @@
289 std::logic_error("Invalid or inconsistent display configuration"));289 std::logic_error("Invalid or inconsistent display configuration"));
290 }290 }
291291
292 glm::mat2 trans;
292 MirOrientation o = mir_orientation_normal;293 MirOrientation o = mir_orientation_normal;
293 float new_scale = scale;294 float new_scale = scale;
294 geom::Rectangle logical_area;295 geom::Rectangle logical_area;
295296
296 new_configuration.for_each_output([&](DisplayConfigurationOutput const& conf_output)297 new_configuration.for_each_output([&](DisplayConfigurationOutput const& conf_output)
297 {298 {
299 trans = conf_output.transformation();
298 o = conf_output.orientation;300 o = conf_output.orientation;
299 new_scale = conf_output.scale;301 new_scale = conf_output.scale;
300 logical_area = conf_output.extents();302 logical_area = conf_output.extents();
@@ -302,7 +304,7 @@
302304
303 orientation = o;305 orientation = o;
304 display_buffer->set_view_area(logical_area);306 display_buffer->set_view_area(logical_area);
305 display_buffer->set_transformation(mg::transformation(orientation));307 display_buffer->set_transformation(trans);
306 scale = new_scale;308 scale = new_scale;
307}309}
308310
309311
=== modified file 'src/platforms/mesa/server/x11/graphics/display_configuration.cpp'
--- src/platforms/mesa/server/x11/graphics/display_configuration.cpp 2017-01-18 02:29:37 +0000
+++ src/platforms/mesa/server/x11/graphics/display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -48,6 +48,7 @@
48 mir_subpixel_arrangement_unknown,48 mir_subpixel_arrangement_unknown,
49 {},49 {},
50 mir_output_gamma_unsupported,50 mir_output_gamma_unsupported,
51 {},
51 {}},52 {}},
52 card{mg::DisplayConfigurationCardId{0}, 1}53 card{mg::DisplayConfigurationCardId{0}, 1}
53{54{
5455
=== modified file 'src/server/frontend/session_mediator.cpp'
--- src/server/frontend/session_mediator.cpp 2017-04-13 04:26:20 +0000
+++ src/server/frontend/session_mediator.cpp 2017-04-13 08:26:06 +0000
@@ -1273,6 +1273,12 @@
1273 dest.gamma = {convert_string_to_gamma_curve(src.gamma_red()),1273 dest.gamma = {convert_string_to_gamma_curve(src.gamma_red()),
1274 convert_string_to_gamma_curve(src.gamma_green()),1274 convert_string_to_gamma_curve(src.gamma_green()),
1275 convert_string_to_gamma_curve(src.gamma_blue())};1275 convert_string_to_gamma_curve(src.gamma_blue())};
1276
1277 if (src.has_logical_width() && src.has_logical_height())
1278 {
1279 dest.custom_logical_size = {src.logical_width(),
1280 src.logical_height()};
1281 }
1276 });1282 });
12771283
1278 return config;1284 return config;
12791285
=== modified file 'src/server/graphics/nested/nested_display_configuration.cpp'
--- src/server/graphics/nested/nested_display_configuration.cpp 2017-03-13 09:09:22 +0000
+++ src/server/graphics/nested/nested_display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -133,7 +133,9 @@
133 local_config.subpixel_arrangement,133 local_config.subpixel_arrangement,
134 local_config.gamma,134 local_config.gamma,
135 local_config.gamma_supported,135 local_config.gamma_supported,
136 std::move(edid)136 std::move(edid),
137 geometry::Size{mir_output_get_logical_width(output),
138 mir_output_get_logical_height(output)}
137 };139 };
138}140}
139141
140142
=== modified file 'src/server/graphics/offscreen/display_configuration.cpp'
--- src/server/graphics/offscreen/display_configuration.cpp 2017-03-09 12:47:27 +0000
+++ src/server/graphics/offscreen/display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -40,6 +40,7 @@
40 mir_subpixel_arrangement_unknown,40 mir_subpixel_arrangement_unknown,
41 {},41 {},
42 mir_output_gamma_unsupported,42 mir_output_gamma_unsupported,
43 {},
43 {}},44 {}},
44 card{mg::DisplayConfigurationCardId{0}, 1}45 card{mg::DisplayConfigurationCardId{0}, 1}
45{46{
4647
=== modified file 'tests/acceptance-tests/test_latency.cpp'
--- tests/acceptance-tests/test_latency.cpp 2017-04-11 14:13:20 +0000
+++ tests/acceptance-tests/test_latency.cpp 2017-04-13 08:26:06 +0000
@@ -255,6 +255,7 @@
255 mir_subpixel_arrangement_unknown,255 mir_subpixel_arrangement_unknown,
256 {},256 {},
257 mir_output_gamma_unsupported,257 mir_output_gamma_unsupported,
258 {},
258 {}259 {}
259 };260 };
260 outputs.push_back(output);261 outputs.push_back(output);
261262
=== modified file 'tests/acceptance-tests/test_new_display_configuration.cpp'
--- tests/acceptance-tests/test_new_display_configuration.cpp 2017-04-13 04:26:20 +0000
+++ tests/acceptance-tests/test_new_display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -934,6 +934,61 @@
934 client.disconnect();934 client.disconnect();
935}935}
936936
937TEST_F(DisplayConfigurationTest, client_can_set_logical_size)
938{
939 DisplayClient client{new_connection()};
940
941 client.connect();
942
943 auto client_config = client.get_base_config();
944 int num_outputs = mir_display_config_get_num_outputs(client_config.get());
945
946 for (int i = 0; i < num_outputs; ++i)
947 {
948 auto output =
949 mir_display_config_get_mutable_output(client_config.get(), i);
950 mir_output_set_logical_size(output, (i+1)*123, (i+3)*345);
951 }
952
953 DisplayConfigMatchingContext context;
954 context.matcher = [c = client_config.get()](MirDisplayConfig* conf)
955 {
956 EXPECT_THAT(conf, mt::DisplayConfigMatches(c));
957 };
958
959 mir_connection_set_display_config_change_callback(
960 client.connection,
961 &new_display_config_matches,
962 &context);
963
964 mir_connection_preview_base_display_configuration(client.connection,
965 client_config.get(), 10);
966
967 EXPECT_TRUE(context.done.wait_for(std::chrono::seconds(30)));
968
969 mir_connection_confirm_base_display_configuration(client.connection,
970 client_config.get());
971
972 std::shared_ptr<mg::DisplayConfiguration> current_config =
973 server.the_display()->configuration();
974
975 int j = 0;
976 current_config->for_each_output(
977 [&j](mg::UserDisplayConfigurationOutput& output) mutable
978 {
979 ASSERT_TRUE(output.custom_logical_size.is_set());
980 auto const& size = output.custom_logical_size.value();
981 int w = size.width.as_int();
982 int h = size.height.as_int();
983 EXPECT_EQ((j+1)*123, w);
984 EXPECT_EQ((j+3)*345, h);
985 ++j;
986 });
987
988 EXPECT_TRUE(j);
989
990 client.disconnect();
991}
937992
938TEST_F(DisplayConfigurationTest, client_sees_server_set_form_factor)993TEST_F(DisplayConfigurationTest, client_sees_server_set_form_factor)
939{994{
940995
=== modified file 'tests/mir_test/display_config_matchers.cpp'
--- tests/mir_test/display_config_matchers.cpp 2017-01-27 04:57:53 +0000
+++ tests/mir_test/display_config_matchers.cpp 2017-04-13 08:26:06 +0000
@@ -75,6 +75,7 @@
75 mir_subpixel_arrangement_unknown,75 mir_subpixel_arrangement_unknown,
76 {},76 {},
77 mir_output_gamma_unsupported,77 mir_output_gamma_unsupported,
78 {},
78 {}79 {}
79 };80 };
8081
@@ -134,6 +135,7 @@
134 mir_subpixel_arrangement_unknown,135 mir_subpixel_arrangement_unknown,
135 {},136 {},
136 mir_output_gamma_unsupported,137 mir_output_gamma_unsupported,
138 {},
137 {}139 {}
138 };140 };
139141
@@ -192,6 +194,7 @@
192 mir_subpixel_arrangement_unknown,194 mir_subpixel_arrangement_unknown,
193 {},195 {},
194 mir_output_gamma_unsupported,196 mir_output_gamma_unsupported,
197 {},
195 {}198 {}
196 };199 };
197200
198201
=== modified file 'tests/mir_test_doubles/stub_display_configuration.cpp'
--- tests/mir_test_doubles/stub_display_configuration.cpp 2017-01-18 02:29:37 +0000
+++ tests/mir_test_doubles/stub_display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -93,6 +93,7 @@
93 subpixel_arrangement,93 subpixel_arrangement,
94 {},94 {},
95 mir_output_gamma_unsupported,95 mir_output_gamma_unsupported,
96 {},
96 {}97 {}
97 }98 }
98{99{
@@ -122,6 +123,7 @@
122 mir_subpixel_arrangement_unknown,123 mir_subpixel_arrangement_unknown,
123 {},124 {},
124 mir_output_gamma_unsupported,125 mir_output_gamma_unsupported,
126 {},
125 {}127 {}
126 }128 }
127{129{
@@ -225,6 +227,7 @@
225 mir_subpixel_arrangement_unknown,227 mir_subpixel_arrangement_unknown,
226 {},228 {},
227 mir_output_gamma_unsupported,229 mir_output_gamma_unsupported,
230 {},
228 {}231 {}
229 };232 };
230233
@@ -252,6 +255,7 @@
252 mir_subpixel_arrangement_unknown,255 mir_subpixel_arrangement_unknown,
253 {},256 {},
254 mir_output_gamma_unsupported,257 mir_output_gamma_unsupported,
258 {},
255 {}259 {}
256 };260 };
257261
258262
=== modified file 'tests/unit-tests/graphics/test_default_display_configuration_policy.cpp'
--- tests/unit-tests/graphics/test_default_display_configuration_policy.cpp 2017-01-30 05:18:36 +0000
+++ tests/unit-tests/graphics/test_default_display_configuration_policy.cpp 2017-04-13 08:26:06 +0000
@@ -65,6 +65,7 @@
65 mir_subpixel_arrangement_unknown,65 mir_subpixel_arrangement_unknown,
66 {},66 {},
67 mir_output_gamma_unsupported,67 mir_output_gamma_unsupported,
68 {},
68 {}69 {}
69 };70 };
70}71}
7172
=== modified file 'tests/unit-tests/graphics/test_display_configuration.cpp'
--- tests/unit-tests/graphics/test_display_configuration.cpp 2017-01-18 02:29:37 +0000
+++ tests/unit-tests/graphics/test_display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -53,6 +53,7 @@
53 mir_subpixel_arrangement_unknown,53 mir_subpixel_arrangement_unknown,
54 {},54 {},
55 mir_output_gamma_unsupported,55 mir_output_gamma_unsupported,
56 {},
56 {}57 {}
57};58};
5859
@@ -286,6 +287,36 @@
286 EXPECT_EQ(out.modes[out.current_mode_index].size, out.extents().size);287 EXPECT_EQ(out.modes[out.current_mode_index].size, out.extents().size);
287}288}
288289
290TEST(DisplayConfiguration, output_extents_are_customizable)
291{
292 mg::DisplayConfigurationOutput out = tmpl_output;
293
294 geom::Size const custom_size{1234, 9876};
295 out.custom_logical_size = custom_size;
296
297 EXPECT_EQ(custom_size, out.extents().size);
298}
299
300TEST(DisplayConfiguration, custom_size_causes_scaling)
301{
302 mg::DisplayConfigurationOutput out = tmpl_output;
303
304 auto const& physical_size = out.modes[out.current_mode_index].size;
305
306 geom::Size const logical_size{1234, 9876};
307 out.custom_logical_size = logical_size;
308
309 auto const& observed = out.transformation();
310 glm::mat2 const expected{static_cast<float>(physical_size.width.as_int()) /
311 logical_size.width.as_int(),
312 0,
313 0,
314 static_cast<float>(physical_size.height.as_int()) /
315 logical_size.height.as_int()};
316
317 EXPECT_EQ(expected, observed);
318}
319
289TEST(DisplayConfiguration, output_extents_rotates_with_orientation)320TEST(DisplayConfiguration, output_extents_rotates_with_orientation)
290{321{
291 mg::DisplayConfigurationOutput out = tmpl_output;322 mg::DisplayConfigurationOutput out = tmpl_output;
@@ -329,6 +360,23 @@
329 EXPECT_FALSE(out.valid());360 EXPECT_FALSE(out.valid());
330}361}
331362
363TEST(DisplayConfiguration, only_nonzero_custom_sizes_are_valid)
364{
365 mg::DisplayConfigurationOutput out = tmpl_output;
366
367 out.custom_logical_size = {12, 34};
368 EXPECT_TRUE(out.valid());
369
370 out.custom_logical_size = {0, 56};
371 EXPECT_FALSE(out.valid());
372
373 out.custom_logical_size = {78, 0};
374 EXPECT_FALSE(out.valid());
375
376 out.custom_logical_size = {0, 0};
377 EXPECT_FALSE(out.valid());
378}
379
332TEST(DisplayConfiguration, unsupported_format_invalid)380TEST(DisplayConfiguration, unsupported_format_invalid)
333{381{
334 mg::DisplayConfigurationOutput out = tmpl_output;382 mg::DisplayConfigurationOutput out = tmpl_output;
335383
=== modified file 'tests/unit-tests/graphics/test_overlapping_output_grouping.cpp'
--- tests/unit-tests/graphics/test_overlapping_output_grouping.cpp 2017-01-18 02:29:37 +0000
+++ tests/unit-tests/graphics/test_overlapping_output_grouping.cpp 2017-04-13 08:26:06 +0000
@@ -100,6 +100,7 @@
100 mir_subpixel_arrangement_unknown,100 mir_subpixel_arrangement_unknown,
101 {},101 {},
102 mir_output_gamma_unsupported,102 mir_output_gamma_unsupported,
103 {},
103 {}104 {}
104 };105 };
105106
106107
=== modified file 'tests/unit-tests/platforms/mesa/kms/test_cursor.cpp'
--- tests/unit-tests/platforms/mesa/kms/test_cursor.cpp 2017-03-10 10:20:24 +0000
+++ tests/unit-tests/platforms/mesa/kms/test_cursor.cpp 2017-04-13 08:26:06 +0000
@@ -121,6 +121,7 @@
121 mir_subpixel_arrangement_unknown,121 mir_subpixel_arrangement_unknown,
122 {},122 {},
123 mir_output_gamma_unsupported,123 mir_output_gamma_unsupported,
124 {},
124 {}125 {}
125 },126 },
126 {127 {
@@ -146,6 +147,7 @@
146 mir_subpixel_arrangement_unknown,147 mir_subpixel_arrangement_unknown,
147 {},148 {},
148 mir_output_gamma_unsupported,149 mir_output_gamma_unsupported,
150 {},
149 {}151 {}
150 },152 },
151 {153 {
@@ -171,6 +173,7 @@
171 mir_subpixel_arrangement_unknown,173 mir_subpixel_arrangement_unknown,
172 {},174 {},
173 mir_output_gamma_unsupported,175 mir_output_gamma_unsupported,
176 {},
174 {}177 {}
175 }}}178 }}}
176 {179 {
177180
=== modified file 'tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp'
--- tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp 2017-04-05 03:11:28 +0000
+++ tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp 2017-04-13 08:26:06 +0000
@@ -300,6 +300,7 @@
300 mir_subpixel_arrangement_unknown,300 mir_subpixel_arrangement_unknown,
301 {},301 {},
302 mir_output_gamma_unsupported,302 mir_output_gamma_unsupported,
303 {},
303 {}304 {}
304 },305 },
305 {306 {
@@ -322,6 +323,7 @@
322 mir_subpixel_arrangement_unknown,323 mir_subpixel_arrangement_unknown,
323 {},324 {},
324 mir_output_gamma_unsupported,325 mir_output_gamma_unsupported,
326 {},
325 {}327 {}
326 },328 },
327 {329 {
@@ -344,6 +346,7 @@
344 mir_subpixel_arrangement_unknown,346 mir_subpixel_arrangement_unknown,
345 {},347 {},
346 mir_output_gamma_unsupported,348 mir_output_gamma_unsupported,
349 {},
347 {}350 {}
348 }351 }
349 };352 };
@@ -577,6 +580,7 @@
577 mir_subpixel_arrangement_unknown,580 mir_subpixel_arrangement_unknown,
578 {},581 {},
579 mir_output_gamma_unsupported,582 mir_output_gamma_unsupported,
583 {},
580 {}584 {}
581 },585 },
582 {586 {
@@ -599,6 +603,7 @@
599 mir_subpixel_arrangement_unknown,603 mir_subpixel_arrangement_unknown,
600 {},604 {},
601 mir_output_gamma_unsupported,605 mir_output_gamma_unsupported,
606 {},
602 {}607 {}
603 },608 },
604 };609 };
@@ -625,6 +630,7 @@
625 mir_subpixel_arrangement_unknown,630 mir_subpixel_arrangement_unknown,
626 {},631 {},
627 mir_output_gamma_unsupported,632 mir_output_gamma_unsupported,
633 {},
628 {}634 {}
629 },635 },
630 {636 {
@@ -647,6 +653,7 @@
647 mir_subpixel_arrangement_unknown,653 mir_subpixel_arrangement_unknown,
648 {},654 {},
649 mir_output_gamma_unsupported,655 mir_output_gamma_unsupported,
656 {},
650 {}657 {}
651 },658 },
652 };659 };
@@ -794,6 +801,7 @@
794 mir_subpixel_arrangement_unknown,801 mir_subpixel_arrangement_unknown,
795 {},802 {},
796 mir_output_gamma_unsupported,803 mir_output_gamma_unsupported,
804 {},
797 {}805 {}
798 },806 },
799 };807 };
@@ -822,6 +830,7 @@
822 mir_subpixel_arrangement_unknown,830 mir_subpixel_arrangement_unknown,
823 {},831 {},
824 mir_output_gamma_unsupported,832 mir_output_gamma_unsupported,
833 {},
825 {}834 {}
826 },835 },
827 };836 };
828837
=== modified file 'tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp'
--- tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp 2017-02-17 07:35:08 +0000
+++ tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp 2017-04-13 08:26:06 +0000
@@ -83,6 +83,10 @@
83 output->set_edid(valid_edid, sizeof(valid_edid));83 output->set_edid(valid_edid, sizeof(valid_edid));
84 output->set_subpixel_arrangement(mir_subpixel_arrangement_horizontal_rgb);84 output->set_subpixel_arrangement(mir_subpixel_arrangement_horizontal_rgb);
8585
86 auto const& current_mode = output->mode(output->current_mode());
87 output->set_logical_width(current_mode.horizontal_resolution());
88 output->set_logical_height(current_mode.vertical_resolution());
89
86 return std::make_shared<MirDisplayConfig>(conf);90 return std::make_shared<MirDisplayConfig>(conf);
87}91}
8892
@@ -123,6 +127,10 @@
123 output->set_orientation(mir_orientation_normal);127 output->set_orientation(mir_orientation_normal);
124 output->set_edid(valid_edid, sizeof(valid_edid));128 output->set_edid(valid_edid, sizeof(valid_edid));
125 output->set_subpixel_arrangement(mir_subpixel_arrangement_horizontal_rgb);129 output->set_subpixel_arrangement(mir_subpixel_arrangement_horizontal_rgb);
130
131 auto const& current_mode = output->mode(output->current_mode());
132 output->set_logical_width(current_mode.horizontal_resolution());
133 output->set_logical_height(current_mode.vertical_resolution());
126 }134 }
127135
128 return std::make_shared<MirDisplayConfig>(conf);136 return std::make_shared<MirDisplayConfig>(conf);

Subscribers

People subscribed via source and target branches