Mir

Merge lp:~vanvugt/mir/generalise-android-DisplayBuffer-transform into lp:mir

Proposed by Daniel van Vugt
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 4139
Proposed branch: lp:~vanvugt/mir/generalise-android-DisplayBuffer-transform
Merge into: lp:mir
Prerequisite: lp:~vanvugt/mir/simplify-android-DisplayBuffer-view-area
Diff against target: 294 lines (+36/-33)
8 files modified
src/platforms/android/server/configurable_display_buffer.h (+1/-1)
src/platforms/android/server/display.cpp (+6/-3)
src/platforms/android/server/display_buffer.cpp (+6/-6)
src/platforms/android/server/display_buffer.h (+2/-3)
src/platforms/android/server/display_group.cpp (+2/-2)
src/platforms/android/server/display_group.h (+2/-1)
tests/unit-tests/platforms/android/server/test_display_buffer.cpp (+16/-16)
tests/unit-tests/platforms/android/server/test_display_group.cpp (+1/-1)
To merge this branch: bzr merge lp:~vanvugt/mir/generalise-android-DisplayBuffer-transform
Reviewer Review Type Date Requested Status
Kevin DuBois (community) Approve
Mir CI Bot continuous-integration Approve
Review via email: mp+321157@code.launchpad.net

Commit message

Generalise android's DisplayBuffer transformation passing.

Description of the change

Another precursor to LP: #1639226.

Manual testing completed on krillin.

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4123
https://mir-jenkins.ubuntu.com/job/mir-ci/3264/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4398
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4487
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4477
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4477
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4477
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4430/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4430/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4430/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4430/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4430/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4430
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4430/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3264/rebuild

review: Approve (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

FAILED: Continuous integration, rev:4124
https://mir-jenkins.ubuntu.com/job/mir-ci/3270/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4409/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4501
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4491
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4491
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4491
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4441
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4441/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4441
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4441/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4441
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4441/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4441/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4441/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4441
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4441/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4441
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4441/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3270/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4125
https://mir-jenkins.ubuntu.com/job/mir-ci/3274/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4414
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4506
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4496
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4496
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4496
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4446/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4446/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4446/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4446/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4446/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4446
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4446/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ci/3274/rebuild

review: Approve (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

lgtm

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/platforms/android/server/configurable_display_buffer.h'
2--- src/platforms/android/server/configurable_display_buffer.h 2017-03-29 05:03:21 +0000
3+++ src/platforms/android/server/configurable_display_buffer.h 2017-03-29 05:03:21 +0000
4@@ -32,7 +32,7 @@
5 class ConfigurableDisplayBuffer : public graphics::DisplayBuffer
6 {
7 public:
8- virtual void configure(MirPowerMode power_mode, MirOrientation orientation, geometry::Rectangle const&) = 0;
9+ virtual void configure(MirPowerMode power_mode, glm::mat2 const& transform, geometry::Rectangle const&) = 0;
10 virtual DisplayContents contents() = 0;
11 virtual MirPowerMode power_mode() const = 0;
12 };
13
14=== modified file 'src/platforms/android/server/display.cpp'
15--- src/platforms/android/server/display.cpp 2017-03-29 05:03:21 +0000
16+++ src/platforms/android/server/display.cpp 2017-03-29 05:03:21 +0000
17@@ -22,6 +22,7 @@
18 #include "mir/graphics/display_report.h"
19 #include "mir/graphics/display_buffer.h"
20 #include "mir/graphics/egl_resources.h"
21+#include "mir/graphics/transformation.h"
22 #include "display.h"
23 #include "virtual_output.h"
24 #include "display_component_factory.h"
25@@ -132,7 +133,7 @@
26 native_window,
27 gl_context,
28 *gl_program_factory,
29- config.orientation,
30+ mg::transformation(config.orientation),
31 config.extents(),
32 overlay_option));
33 }
34@@ -397,15 +398,17 @@
35 config[output.id].scale = output.scale;
36 config[output.id].top_left = output.top_left;
37
38+ auto const& transform = mg::transformation(output.orientation);
39+
40 if (config.primary().id == output.id)
41 {
42 power_mode(mga::DisplayName::primary, *hwc_config, config.primary(), output.power_mode);
43- displays.configure(mga::DisplayName::primary, output.power_mode, output.orientation, output.extents());
44+ displays.configure(mga::DisplayName::primary, output.power_mode, transform, output.extents());
45 }
46 else if (config.external().id == output.id && config.external().connected)
47 {
48 power_mode(mga::DisplayName::external, *hwc_config, config.external(), output.power_mode);
49- displays.configure(mga::DisplayName::external, output.power_mode, output.orientation, output.extents());
50+ displays.configure(mga::DisplayName::external, output.power_mode, transform, output.extents());
51 }
52 });
53 }
54
55=== modified file 'src/platforms/android/server/display_buffer.cpp'
56--- src/platforms/android/server/display_buffer.cpp 2017-03-29 05:03:21 +0000
57+++ src/platforms/android/server/display_buffer.cpp 2017-03-29 05:03:21 +0000
58@@ -40,7 +40,7 @@
59 std::shared_ptr<ANativeWindow> const& native_window,
60 mga::GLContext const& shared_gl_context,
61 mgl::ProgramFactory const& program_factory,
62- MirOrientation orientation,
63+ glm::mat2 const& transform,
64 geom::Rectangle area,
65 mga::OverlayOptimization overlay_option)
66 : display_name(display_name),
67@@ -51,8 +51,7 @@
68 gl_context{shared_gl_context, fb_bundle, native_window},
69 overlay_program{program_factory, gl_context, geom::Rectangle{{0,0},fb_bundle->fb_size()}},
70 overlay_enabled{overlay_option == mga::OverlayOptimization::enabled},
71- orientation_{orientation},
72- transform{mg::transformation(orientation)},
73+ transform{transform},
74 area{area},
75 power_mode_{mir_power_mode_on}
76 {
77@@ -107,14 +106,15 @@
78 return transform;
79 }
80
81-void mga::DisplayBuffer::configure(MirPowerMode power_mode, MirOrientation orientation, geom::Rectangle const& a)
82+void mga::DisplayBuffer::configure(MirPowerMode power_mode,
83+ glm::mat2 const& trans,
84+ geom::Rectangle const& a)
85 {
86 power_mode_ = power_mode;
87 area = a;
88 if (power_mode_ != mir_power_mode_on)
89 display_device->content_cleared();
90- orientation_ = orientation;
91- transform = mg::transformation(orientation_);
92+ transform = trans;
93 }
94
95 mga::DisplayContents mga::DisplayBuffer::contents()
96
97=== modified file 'src/platforms/android/server/display_buffer.h'
98--- src/platforms/android/server/display_buffer.h 2017-03-29 05:03:21 +0000
99+++ src/platforms/android/server/display_buffer.h 2017-03-29 05:03:21 +0000
100@@ -55,7 +55,7 @@
101 std::shared_ptr<ANativeWindow> const& native_window,
102 GLContext const& shared_gl_context,
103 gl::ProgramFactory const& program_factory,
104- MirOrientation orientation,
105+ glm::mat2 const& transform,
106 geometry::Rectangle area,
107 OverlayOptimization overlay_option);
108
109@@ -69,7 +69,7 @@
110 glm::mat2 transformation() const override;
111 NativeDisplayBuffer* native_display_buffer() override;
112
113- void configure(MirPowerMode power_mode, MirOrientation orientation, geometry::Rectangle const&) override;
114+ void configure(MirPowerMode power_mode, glm::mat2 const& trans, geometry::Rectangle const&) override;
115 DisplayContents contents() override;
116 MirPowerMode power_mode() const override;
117 private:
118@@ -81,7 +81,6 @@
119 FramebufferGLContext gl_context;
120 HWCFallbackGLRenderer overlay_program;
121 bool overlay_enabled;
122- MirOrientation orientation_;
123 glm::mat2 transform;
124 geometry::Rectangle area;
125 MirPowerMode power_mode_;
126
127=== modified file 'src/platforms/android/server/display_group.cpp'
128--- src/platforms/android/server/display_group.cpp 2017-03-29 05:03:21 +0000
129+++ src/platforms/android/server/display_group.cpp 2017-03-29 05:03:21 +0000
130@@ -75,12 +75,12 @@
131 }
132
133 void mga::DisplayGroup::configure(
134- DisplayName name, MirPowerMode mode, MirOrientation orientation, geom::Rectangle const& view_area)
135+ DisplayName name, MirPowerMode mode, glm::mat2 const& transform, geom::Rectangle const& view_area)
136 {
137 std::unique_lock<decltype(guard)> lk(guard);
138 auto it = dbs.find(name);
139 if (it != dbs.end())
140- it->second->configure(mode, orientation, view_area);
141+ it->second->configure(mode, transform, view_area);
142 }
143
144 void mga::DisplayGroup::post()
145
146=== modified file 'src/platforms/android/server/display_group.h'
147--- src/platforms/android/server/display_group.h 2017-03-29 05:03:21 +0000
148+++ src/platforms/android/server/display_group.h 2017-03-29 05:03:21 +0000
149@@ -23,6 +23,7 @@
150 #include "mir/graphics/display.h"
151 #include "mir/geometry/displacement.h"
152 #include "display_name.h"
153+#include <glm/glm.hpp>
154 #include <map>
155 #include <mutex>
156
157@@ -53,7 +54,7 @@
158
159 void add(DisplayName name, std::unique_ptr<ConfigurableDisplayBuffer> buffer);
160 void remove(DisplayName name);
161- void configure(DisplayName name, MirPowerMode, MirOrientation, geometry::Rectangle const&);
162+ void configure(DisplayName name, MirPowerMode, glm::mat2 const&, geometry::Rectangle const&);
163 bool display_present(DisplayName name) const;
164
165 private:
166
167=== modified file 'tests/unit-tests/platforms/android/server/test_display_buffer.cpp'
168--- tests/unit-tests/platforms/android/server/test_display_buffer.cpp 2017-03-29 05:03:21 +0000
169+++ tests/unit-tests/platforms/android/server/test_display_buffer.cpp 2017-03-29 05:03:21 +0000
170@@ -82,7 +82,7 @@
171 new mga::LayerList(std::make_shared<mga::IntegerSourceCrop>(), {}, top_left)};
172 std::shared_ptr<mtd::MockFBBundle> mock_fb_bundle{
173 std::make_shared<testing::NiceMock<mtd::MockFBBundle>>(display_size)};
174- MirOrientation orientation{mir_orientation_normal};
175+ glm::mat2 const transformation;
176 mga::DisplayBuffer db{
177 mga::DisplayName::primary,
178 std::unique_ptr<mga::LayerList>(
179@@ -92,7 +92,7 @@
180 native_window,
181 *gl_context,
182 stub_program_factory,
183- orientation,
184+ transformation,
185 area,
186 mga::OverlayOptimization::enabled};
187
188@@ -129,7 +129,7 @@
189 area.size.width.as_int()}};
190 EXPECT_EQ(display_size, db.view_area().size);
191 EXPECT_EQ(db.transformation(), rotate_none);
192- db.configure(mir_power_mode_on, mir_orientation_inverted, area);
193+ db.configure(mir_power_mode_on, rotate_inverted, area);
194
195 /*
196 * Note that it's the output that transposes its extents() dimensions
197@@ -142,11 +142,11 @@
198
199 EXPECT_EQ(display_size, db.view_area().size);
200 EXPECT_EQ(db.transformation(), rotate_inverted);
201- db.configure(mir_power_mode_on, mir_orientation_left, transposed);
202+ db.configure(mir_power_mode_on, rotate_left, transposed);
203
204 EXPECT_EQ(transposed, db.view_area());
205 EXPECT_EQ(db.transformation(), rotate_left);
206- db.configure(mir_power_mode_on, mir_orientation_right, transposed);
207+ db.configure(mir_power_mode_on, rotate_right, transposed);
208
209 EXPECT_EQ(transposed, db.view_area());
210 EXPECT_EQ(db.transformation(), rotate_right);
211@@ -190,7 +190,7 @@
212 native_window,
213 *gl_context,
214 stub_program_factory,
215- orientation,
216+ transformation,
217 area,
218 mga::OverlayOptimization::enabled};
219 }
220@@ -219,7 +219,7 @@
221 native_window,
222 *gl_context,
223 stub_program_factory,
224- orientation,
225+ transformation,
226 area,
227 mga::OverlayOptimization::enabled);
228 }, std::runtime_error);
229@@ -234,7 +234,7 @@
230 native_window,
231 *gl_context,
232 stub_program_factory,
233- orientation,
234+ transformation,
235 area,
236 mga::OverlayOptimization::enabled);
237 }, std::runtime_error);
238@@ -280,10 +280,10 @@
239 {
240 EXPECT_CALL(*mock_display_device, content_cleared())
241 .Times(3);
242- db.configure(mir_power_mode_off, mir_orientation_normal, area);
243- db.configure(mir_power_mode_suspend, mir_orientation_normal, area);
244- db.configure(mir_power_mode_standby, mir_orientation_normal, area);
245- db.configure(mir_power_mode_on, mir_orientation_normal, area);
246+ db.configure(mir_power_mode_off, {}, area);
247+ db.configure(mir_power_mode_suspend, {}, area);
248+ db.configure(mir_power_mode_standby, {}, area);
249+ db.configure(mir_power_mode_on, {}, area);
250 }
251
252 TEST_F(DisplayBuffer, reject_list_if_option_disabled)
253@@ -302,7 +302,7 @@
254 native_window,
255 *gl_context,
256 stub_program_factory,
257- orientation,
258+ transformation,
259 area,
260 mga::OverlayOptimization::disabled);
261
262@@ -355,7 +355,7 @@
263 geom::Point const offset_top_left_point = top_left_point + offset;
264
265 EXPECT_THAT(db.view_area().top_left, Eq(top_left_point));
266- db.configure(mir_power_mode_on, orientation,
267+ db.configure(mir_power_mode_on, transformation,
268 {offset_top_left_point, area.size});
269 EXPECT_THAT(db.view_area().top_left, Eq(offset_top_left_point));
270 }
271@@ -371,8 +371,8 @@
272 std::make_shared<mtd::StubRenderable>(
273 std::make_shared<mtd::StubBuffer>(std::make_shared<mtd::StubAndroidNativeBuffer>()))};
274
275- db.configure(mir_power_mode_on, mir_orientation_inverted, area);
276+ db.configure(mir_power_mode_on, rotate_inverted, area);
277 EXPECT_FALSE(db.overlay(renderlist));
278- db.configure(mir_power_mode_on, mir_orientation_normal, area);
279+ db.configure(mir_power_mode_on, rotate_none, area);
280 EXPECT_TRUE(db.overlay(renderlist));
281 }
282
283=== modified file 'tests/unit-tests/platforms/android/server/test_display_group.cpp'
284--- tests/unit-tests/platforms/android/server/test_display_group.cpp 2017-03-29 05:03:21 +0000
285+++ tests/unit-tests/platforms/android/server/test_display_group.cpp 2017-03-29 05:03:21 +0000
286@@ -38,7 +38,7 @@
287 bool overlay(mg::RenderableList const&) override { return false; }
288 glm::mat2 transformation() const override { return {}; }
289 mg::NativeDisplayBuffer* native_display_buffer() override { return this; }
290- void configure(MirPowerMode, MirOrientation, mir::geometry::Rectangle const&) override {}
291+ void configure(MirPowerMode, glm::mat2 const&, mir::geometry::Rectangle const&) override {}
292 mga::DisplayContents contents() override
293 {
294 return mga::DisplayContents{mga::DisplayName::primary, list, offset, context, compositor};

Subscribers

People subscribed via source and target branches