Merge lp:~kdub/mir/no-display-attribs into lp:mir
- no-display-attribs
- Merge into development-branch
Status: | Merged |
---|---|
Approved by: | Alan Griffiths |
Approved revision: | no longer in the source branch. |
Merged at revision: | 2446 |
Proposed branch: | lp:~kdub/mir/no-display-attribs |
Merge into: | lp:mir |
Diff against target: |
979 lines (+239/-201) 18 files modified
src/platforms/android/server/display.cpp (+12/-14) src/platforms/android/server/display.h (+0/-2) src/platforms/android/server/display_component_factory.h (+2/-2) src/platforms/android/server/display_configuration.cpp (+8/-54) src/platforms/android/server/display_configuration.h (+2/-2) src/platforms/android/server/fb_device.cpp (+19/-11) src/platforms/android/server/fb_device.h (+1/-1) src/platforms/android/server/hal_component_factory.cpp (+8/-5) src/platforms/android/server/hal_component_factory.h (+4/-1) src/platforms/android/server/hwc_blanking_control.cpp (+49/-10) src/platforms/android/server/hwc_configuration.h (+2/-13) tests/include/mir_test_doubles/stub_display_builder.h (+13/-14) tests/include/mir_test_doubles/stub_display_configuration.h (+32/-0) tests/unit-tests/graphics/android/test_display.cpp (+38/-36) tests/unit-tests/graphics/android/test_display_hotplug.cpp (+6/-5) tests/unit-tests/graphics/android/test_fb_device.cpp (+3/-13) tests/unit-tests/graphics/android/test_hwc_configuration.cpp (+20/-18) tests/unit-tests/graphics/android/test_output_builder.cpp (+20/-0) |
To merge this branch: | bzr merge lp:~kdub/mir/no-display-attribs |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot (community) | continuous-integration | Approve | |
Alexandros Frantzis (community) | Approve | ||
Alan Griffiths | Approve | ||
Review via email: mp+253853@code.launchpad.net |
Commit message
android: remove the DisplayAttribs struct, which was just a subset of the information contained in DisplayConfigur
Description of the change
android: remove the DisplayAttribs struct, which was just a subset of the information contained in DisplayConfigur
Alan Griffiths (alan-griffiths) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2415
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2416
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Kevin DuBois (kdub) wrote : | # |
> 646 - EXPECT_
> 647 + EXPECT_
>
> Why? It isn't clear to me why this expectation changes as a result of changing
> the way data is held.
Launchpad lost my comment yesterday...
It is a correction of incorrect behavior. The external monitor was always reported as not used (even when on and used), which I noticed while going through and fixing things up to remove the DisplayAttribs struct.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2417
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Alan Griffiths (alan-griffiths) wrote : | # |
> > 646 - EXPECT_
> > 647 + EXPECT_
> >
> > Why? It isn't clear to me why this expectation changes as a result of
> changing
> > the way data is held.
>
> Launchpad lost my comment yesterday...
> It is a correction of incorrect behavior. The external monitor was always
> reported as not used (even when on and used), which I noticed while going
> through and fixing things up to remove the DisplayAttribs struct.
OK
Kevin DuBois (kdub) wrote : | # |
failure was in nested server+clang, not related
Alan Griffiths (alan-griffiths) wrote : | # |
lp:1430000 strikes again.
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:2417
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Alexandros Frantzis (afrantzis) wrote : | # |
Looks good.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
Kevin DuBois (kdub) wrote : | # |
mako failed to restart:
subprocess.
run 1280 seemed to pass, retriggering
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Autolanding.
More details in the following jenkins job:
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
Alan Griffiths (alan-griffiths) wrote : | # |
PS Jenkins bot (ps-jenkins) : | # |
Preview Diff
1 | === modified file 'src/platforms/android/server/display.cpp' |
2 | --- src/platforms/android/server/display.cpp 2015-03-24 16:02:48 +0000 |
3 | +++ src/platforms/android/server/display.cpp 2015-03-24 19:59:11 +0000 |
4 | @@ -107,14 +107,14 @@ |
5 | std::shared_ptr<mga::DisplayDevice> const& display_device, |
6 | mga::DisplayName name, |
7 | mga::DisplayComponentFactory& display_buffer_builder, |
8 | - mga::DisplayAttribs const& attribs, |
9 | + mg::DisplayConfigurationOutput const& config, |
10 | std::shared_ptr<mg::GLProgramFactory> const& gl_program_factory, |
11 | mga::PbufferGLContext const& gl_context, |
12 | mga::OverlayOptimization overlay_option) |
13 | { |
14 | - std::shared_ptr<mga::FramebufferBundle> fbs{display_buffer_builder.create_framebuffers(attribs)}; |
15 | + std::shared_ptr<mga::FramebufferBundle> fbs{display_buffer_builder.create_framebuffers(config)}; |
16 | auto cache = std::make_shared<mga::InterpreterCache>(); |
17 | - auto interpreter = std::make_shared<mga::ServerRenderWindow>(fbs, attribs.display_format, cache); |
18 | + auto interpreter = std::make_shared<mga::ServerRenderWindow>(fbs, config.current_format, cache); |
19 | auto native_window = std::make_shared<mga::MirNativeWindow>(interpreter); |
20 | return std::unique_ptr<mga::ConfigurableDisplayBuffer>(new mga::DisplayBuffer( |
21 | name, |
22 | @@ -141,12 +141,10 @@ |
23 | hotplug_subscription{hwc_config->subscribe_to_config_changes( |
24 | std::bind(&mga::Display::on_hotplug, this), |
25 | std::bind(&mga::Display::on_vsync, this, std::placeholders::_1))}, |
26 | - primary_attribs(hwc_config->active_attribs_for(mga::DisplayName::primary)), |
27 | - external_attribs(hwc_config->active_attribs_for(mga::DisplayName::external)), |
28 | config( |
29 | - primary_attribs, |
30 | + hwc_config->active_config_for(mga::DisplayName::primary), |
31 | mir_power_mode_off, |
32 | - external_attribs, |
33 | + hwc_config->active_config_for(mga::DisplayName::external), |
34 | mir_power_mode_off), |
35 | gl_context{config.primary().current_format, *gl_config, *display_report}, |
36 | display_device(display_buffer_builder->create_display_device()), |
37 | @@ -158,7 +156,7 @@ |
38 | display_device, |
39 | mga::DisplayName::primary, |
40 | *display_buffer_builder, |
41 | - primary_attribs, |
42 | + config.primary(), |
43 | gl_program_factory, |
44 | gl_context, |
45 | overlay_option)) |
46 | @@ -173,7 +171,7 @@ |
47 | display_device, |
48 | mga::DisplayName::external, |
49 | *display_buffer_builder, |
50 | - external_attribs, |
51 | + config.external(), |
52 | gl_program_factory, |
53 | gl_context, |
54 | mga::OverlayOptimization::disabled)); |
55 | @@ -196,16 +194,16 @@ |
56 | { |
57 | if (configuration_dirty) |
58 | { |
59 | - external_attribs = hwc_config->active_attribs_for(mga::DisplayName::external); |
60 | - if (external_attribs.connected) |
61 | + auto external_config = hwc_config->active_config_for(mga::DisplayName::external); |
62 | + if (external_config.connected) |
63 | power_mode(mga::DisplayName::external, *hwc_config, config.external(), mir_power_mode_on); |
64 | else |
65 | config.external().power_mode = mir_power_mode_off; |
66 | |
67 | config = mga::DisplayConfiguration( |
68 | - hwc_config->active_attribs_for(mga::DisplayName::primary), |
69 | + hwc_config->active_config_for(mga::DisplayName::primary), |
70 | config.primary().power_mode, |
71 | - external_attribs, |
72 | + std::move(external_config), |
73 | config.external().power_mode); |
74 | configuration_dirty = false; |
75 | } |
76 | @@ -221,7 +219,7 @@ |
77 | display_device, |
78 | mga::DisplayName::external, |
79 | *display_buffer_builder, |
80 | - external_attribs, |
81 | + config.external(), |
82 | gl_program_factory, |
83 | gl_context, |
84 | mga::OverlayOptimization::disabled)); |
85 | |
86 | === modified file 'src/platforms/android/server/display.h' |
87 | --- src/platforms/android/server/display.h 2015-03-24 16:02:48 +0000 |
88 | +++ src/platforms/android/server/display.h 2015-03-24 19:59:11 +0000 |
89 | @@ -88,8 +88,6 @@ |
90 | bool mutable configuration_dirty{false}; |
91 | std::unique_ptr<HwcConfiguration> const hwc_config; |
92 | ConfigChangeSubscription const hotplug_subscription; |
93 | - DisplayAttribs const primary_attribs; //TODO: could be removed, really only useful in construction |
94 | - DisplayAttribs mutable external_attribs; //TODO: could be removed, really only useful in construction |
95 | DisplayConfiguration mutable config; |
96 | PbufferGLContext gl_context; |
97 | std::shared_ptr<DisplayDevice> display_device; |
98 | |
99 | === modified file 'src/platforms/android/server/display_component_factory.h' |
100 | --- src/platforms/android/server/display_component_factory.h 2015-02-02 12:18:18 +0000 |
101 | +++ src/platforms/android/server/display_component_factory.h 2015-03-24 19:59:11 +0000 |
102 | @@ -27,10 +27,10 @@ |
103 | { |
104 | namespace graphics |
105 | { |
106 | +class DisplayConfigurationOutput; |
107 | namespace android |
108 | { |
109 | class HwcConfiguration; |
110 | -class DisplayAttribs; |
111 | |
112 | //TODO: this name needs improvement. |
113 | class DisplayComponentFactory |
114 | @@ -38,7 +38,7 @@ |
115 | public: |
116 | virtual ~DisplayComponentFactory() = default; |
117 | |
118 | - virtual std::unique_ptr<FramebufferBundle> create_framebuffers(DisplayAttribs const&) = 0; |
119 | + virtual std::unique_ptr<FramebufferBundle> create_framebuffers(DisplayConfigurationOutput const&) = 0; |
120 | virtual std::unique_ptr<DisplayDevice> create_display_device() = 0; |
121 | virtual std::unique_ptr<HwcConfiguration> create_hwc_configuration() = 0; |
122 | virtual std::unique_ptr<LayerList> create_layer_list() = 0; |
123 | |
124 | === modified file 'src/platforms/android/server/display_configuration.cpp' |
125 | --- src/platforms/android/server/display_configuration.cpp 2015-03-24 16:02:48 +0000 |
126 | +++ src/platforms/android/server/display_configuration.cpp 2015-03-24 19:59:11 +0000 |
127 | @@ -25,67 +25,21 @@ |
128 | { |
129 | int const primary_id{0}; |
130 | int const external_id{1}; |
131 | -geom::Point const origin{0,0}; |
132 | -size_t const preferred_format_index{0}; |
133 | -size_t const preferred_mode_index{0}; |
134 | - |
135 | -mg::DisplayConfigurationOutput external_output( |
136 | - mga::DisplayAttribs const& external_attribs, |
137 | - MirPowerMode external_mode) |
138 | -{ |
139 | - std::vector<mg::DisplayConfigurationMode> external_modes; |
140 | - if (external_attribs.connected) |
141 | - { |
142 | - external_modes.emplace_back( |
143 | - mg::DisplayConfigurationMode{external_attribs.pixel_size, external_attribs.vrefresh_hz}); |
144 | - } |
145 | - |
146 | - bool used{false}; |
147 | - return { |
148 | - mg::DisplayConfigurationOutputId{external_id}, |
149 | - mg::DisplayConfigurationCardId{0}, |
150 | - mg::DisplayConfigurationOutputType::displayport, |
151 | - {external_attribs.display_format}, |
152 | - external_modes, |
153 | - preferred_mode_index, |
154 | - external_attribs.mm_size, |
155 | - external_attribs.connected, |
156 | - used, |
157 | - origin, |
158 | - preferred_format_index, |
159 | - external_attribs.display_format, |
160 | - external_mode, |
161 | - mir_orientation_normal |
162 | - }; |
163 | -} |
164 | } |
165 | |
166 | mga::DisplayConfiguration::DisplayConfiguration( |
167 | - mga::DisplayAttribs const& primary_attribs, |
168 | + mg::DisplayConfigurationOutput primary_config, |
169 | MirPowerMode primary_mode, |
170 | - mga::DisplayAttribs const& external_attribs, |
171 | + mg::DisplayConfigurationOutput external_config, |
172 | MirPowerMode external_mode) : |
173 | - configurations{{ |
174 | - mg::DisplayConfigurationOutput{ |
175 | - mg::DisplayConfigurationOutputId{primary_id}, |
176 | - mg::DisplayConfigurationCardId{0}, |
177 | - mg::DisplayConfigurationOutputType::lvds, |
178 | - {primary_attribs.display_format}, |
179 | - {mg::DisplayConfigurationMode{primary_attribs.pixel_size, primary_attribs.vrefresh_hz}}, |
180 | - preferred_mode_index, |
181 | - primary_attribs.mm_size, |
182 | - primary_attribs.connected, |
183 | - true, |
184 | - origin, |
185 | - preferred_format_index, |
186 | - primary_attribs.display_format, |
187 | - primary_mode, |
188 | - mir_orientation_normal |
189 | - }, |
190 | - external_output(external_attribs, external_mode) |
191 | - }}, |
192 | + configurations{ |
193 | + {std::move(primary_config), |
194 | + std::move(external_config)} |
195 | + }, |
196 | card{mg::DisplayConfigurationCardId{0}, 1} |
197 | { |
198 | + primary().power_mode = primary_mode; |
199 | + external().power_mode = external_mode; |
200 | } |
201 | |
202 | mga::DisplayConfiguration::DisplayConfiguration(DisplayConfiguration const& other) : |
203 | |
204 | === modified file 'src/platforms/android/server/display_configuration.h' |
205 | --- src/platforms/android/server/display_configuration.h 2015-03-24 16:02:48 +0000 |
206 | +++ src/platforms/android/server/display_configuration.h 2015-03-24 19:59:11 +0000 |
207 | @@ -31,9 +31,9 @@ |
208 | class DisplayConfiguration : public graphics::DisplayConfiguration |
209 | { |
210 | public: |
211 | - DisplayConfiguration(DisplayAttribs const& primary, |
212 | + DisplayConfiguration(DisplayConfigurationOutput primary, |
213 | MirPowerMode primary_mode, |
214 | - DisplayAttribs const& external, |
215 | + DisplayConfigurationOutput external, |
216 | MirPowerMode external_mode); |
217 | |
218 | DisplayConfiguration(DisplayConfiguration const& other); |
219 | |
220 | === modified file 'src/platforms/android/server/fb_device.cpp' |
221 | --- src/platforms/android/server/fb_device.cpp 2015-03-24 16:02:48 +0000 |
222 | +++ src/platforms/android/server/fb_device.cpp 2015-03-24 19:59:11 +0000 |
223 | @@ -54,18 +54,26 @@ |
224 | fb_device->enableScreen(fb_device.get(), enable); |
225 | } |
226 | |
227 | -mga::DisplayAttribs mga::FbControl::active_attribs_for(DisplayName) |
228 | +mg::DisplayConfigurationOutput mga::FbControl::active_config_for(DisplayName) |
229 | { |
230 | - //guarantee always 2 fb's allocated |
231 | - auto fb_num = static_cast<unsigned int>(fb_device->numFramebuffers); |
232 | - fb_num = std::max(2u, fb_num); |
233 | - return mga::DisplayAttribs{ |
234 | - {fb_device->width, fb_device->height}, |
235 | - {0,0}, |
236 | - fb_device->fps, |
237 | - true, |
238 | - mga::to_mir_format(fb_device->format), |
239 | - fb_num}; |
240 | + return { |
241 | + mg::DisplayConfigurationOutputId{0}, |
242 | + mg::DisplayConfigurationCardId{0}, |
243 | + mg::DisplayConfigurationOutputType::lvds, |
244 | + std::vector<MirPixelFormat>{mga::to_mir_format(fb_device->format)}, |
245 | + std::vector<mg::DisplayConfigurationMode>{ |
246 | + mg::DisplayConfigurationMode{{fb_device->width, fb_device->height}, fb_device->fps} |
247 | + }, |
248 | + 0, |
249 | + {0,0}, |
250 | + true, |
251 | + false, |
252 | + {0,0}, |
253 | + 0, |
254 | + mir_pixel_format_abgr_8888, |
255 | + mir_power_mode_on, |
256 | + mir_orientation_normal |
257 | + }; |
258 | } |
259 | |
260 | mga::ConfigChangeSubscription mga::FbControl::subscribe_to_config_changes( |
261 | |
262 | === modified file 'src/platforms/android/server/fb_device.h' |
263 | --- src/platforms/android/server/fb_device.h 2015-03-24 16:02:48 +0000 |
264 | +++ src/platforms/android/server/fb_device.h 2015-03-24 19:59:11 +0000 |
265 | @@ -36,7 +36,7 @@ |
266 | public: |
267 | FbControl(std::shared_ptr<framebuffer_device_t> const& fbdev); |
268 | void power_mode(DisplayName, MirPowerMode) override; |
269 | - DisplayAttribs active_attribs_for(DisplayName) override; |
270 | + DisplayConfigurationOutput active_config_for(DisplayName) override; |
271 | ConfigChangeSubscription subscribe_to_config_changes( |
272 | std::function<void()> const& hotplug_cb, |
273 | std::function<void(DisplayName)> const& vsync_cb) override; |
274 | |
275 | === modified file 'src/platforms/android/server/hal_component_factory.cpp' |
276 | --- src/platforms/android/server/hal_component_factory.cpp 2015-03-18 19:38:43 +0000 |
277 | +++ src/platforms/android/server/hal_component_factory.cpp 2015-03-24 19:59:11 +0000 |
278 | @@ -47,7 +47,8 @@ |
279 | : buffer_allocator(buffer_allocator), |
280 | res_factory(res_factory), |
281 | hwc_report(hwc_report), |
282 | - force_backup_display(false) |
283 | + force_backup_display(false), |
284 | + num_framebuffers{quirks.num_framebuffers()} |
285 | { |
286 | try |
287 | { |
288 | @@ -60,16 +61,18 @@ |
289 | if (force_backup_display || hwc_version == mga::HwcVersion::hwc10) |
290 | { |
291 | fb_native = res_factory->create_fb_native_device(); |
292 | + //guarantee always 2 fb's allocated |
293 | + num_framebuffers = std::max(2u, static_cast<unsigned int>(fb_native->numFramebuffers)); |
294 | } |
295 | } |
296 | |
297 | -std::unique_ptr<mga::FramebufferBundle> mga::HalComponentFactory::create_framebuffers(mga::DisplayAttribs const& attribs) |
298 | +std::unique_ptr<mga::FramebufferBundle> mga::HalComponentFactory::create_framebuffers(mg::DisplayConfigurationOutput const& config) |
299 | { |
300 | return std::unique_ptr<mga::FramebufferBundle>(new mga::Framebuffers( |
301 | *buffer_allocator, |
302 | - attribs.pixel_size, |
303 | - attribs.display_format, |
304 | - attribs.num_framebuffers)); |
305 | + config.modes[config.current_mode_index].size, |
306 | + config.current_format, |
307 | + num_framebuffers)); |
308 | } |
309 | |
310 | std::unique_ptr<mga::LayerList> mga::HalComponentFactory::create_layer_list() |
311 | |
312 | === modified file 'src/platforms/android/server/hal_component_factory.h' |
313 | --- src/platforms/android/server/hal_component_factory.h 2015-02-02 12:18:18 +0000 |
314 | +++ src/platforms/android/server/hal_component_factory.h 2015-03-24 19:59:11 +0000 |
315 | @@ -21,6 +21,7 @@ |
316 | |
317 | #include "display_component_factory.h" |
318 | #include "display_resource_factory.h" |
319 | +#include "device_quirks.h" |
320 | |
321 | namespace mir |
322 | { |
323 | @@ -46,18 +47,20 @@ |
324 | std::shared_ptr<DisplayResourceFactory> const& res_factory, |
325 | std::shared_ptr<HwcReport> const& hwc_report); |
326 | |
327 | - std::unique_ptr<FramebufferBundle> create_framebuffers(DisplayAttribs const&) override; |
328 | + std::unique_ptr<FramebufferBundle> create_framebuffers(DisplayConfigurationOutput const&) override; |
329 | std::unique_ptr<DisplayDevice> create_display_device() override; |
330 | std::unique_ptr<HwcConfiguration> create_hwc_configuration() override; |
331 | std::unique_ptr<LayerList> create_layer_list() override; |
332 | |
333 | private: |
334 | + DeviceQuirks quirks{PropertiesOps{}}; |
335 | std::shared_ptr<GraphicBufferAllocator> const buffer_allocator; |
336 | std::shared_ptr<DisplayResourceFactory> const res_factory; |
337 | std::shared_ptr<HwcReport> const hwc_report; |
338 | |
339 | std::shared_ptr<FramebufferBundle> framebuffers; |
340 | bool force_backup_display; |
341 | + size_t num_framebuffers; |
342 | |
343 | std::shared_ptr<HwcWrapper> hwc_wrapper; |
344 | std::shared_ptr<framebuffer_device_t> fb_native; |
345 | |
346 | === modified file 'src/platforms/android/server/hwc_blanking_control.cpp' |
347 | --- src/platforms/android/server/hwc_blanking_control.cpp 2015-03-24 16:02:48 +0000 |
348 | +++ src/platforms/android/server/hwc_blanking_control.cpp 2015-03-24 19:59:11 +0000 |
349 | @@ -27,6 +27,7 @@ |
350 | #include <stdexcept> |
351 | #include <chrono> |
352 | |
353 | +namespace mg = mir::graphics; |
354 | namespace mga = mir::graphics::android; |
355 | namespace geom = mir::geometry; |
356 | |
357 | @@ -111,9 +112,47 @@ |
358 | geom::Length length(pixel_num / dpi_inches, geom::Length::Units::inches); |
359 | return length.as(geom::Length::Units::millimetres); |
360 | } |
361 | -} |
362 | - |
363 | -mga::DisplayAttribs mga::HwcBlankingControl::active_attribs_for(DisplayName display_name) |
364 | + |
365 | +mg::DisplayConfigurationOutput populate_config( |
366 | + mga::DisplayName name, |
367 | + geom::Size pixel_size, |
368 | + double vrefresh_hz, |
369 | + geom::Size mm_size, |
370 | + MirPowerMode external_mode, |
371 | + MirPixelFormat display_format, |
372 | + bool connected) |
373 | +{ |
374 | + geom::Point const origin{0,0}; |
375 | + size_t const preferred_format_index{0}; |
376 | + size_t const preferred_mode_index{0}; |
377 | + std::vector<mg::DisplayConfigurationMode> external_modes; |
378 | + if (connected) |
379 | + external_modes.emplace_back(mg::DisplayConfigurationMode{pixel_size, vrefresh_hz}); |
380 | + |
381 | + auto type = mg::DisplayConfigurationOutputType::lvds; |
382 | + if (name == mga::DisplayName::external) |
383 | + type = mg::DisplayConfigurationOutputType::displayport; |
384 | + |
385 | + return { |
386 | + static_cast<mg::DisplayConfigurationOutputId>(name), |
387 | + mg::DisplayConfigurationCardId{0}, |
388 | + type, |
389 | + {display_format}, |
390 | + external_modes, |
391 | + preferred_mode_index, |
392 | + mm_size, |
393 | + connected, |
394 | + connected, |
395 | + origin, |
396 | + preferred_format_index, |
397 | + display_format, |
398 | + external_mode, |
399 | + mir_orientation_normal |
400 | + }; |
401 | +} |
402 | +} |
403 | + |
404 | +mg::DisplayConfigurationOutput mga::HwcBlankingControl::active_config_for(DisplayName display_name) |
405 | { |
406 | auto configs = hwc_device->display_configs(display_name); |
407 | if (configs.empty()) |
408 | @@ -121,7 +160,7 @@ |
409 | if (display_name == mga::DisplayName::primary) |
410 | BOOST_THROW_EXCEPTION(std::runtime_error("primary display disconnected")); |
411 | else |
412 | - return {{}, {}, 0.0, false, format, quirks.num_framebuffers()}; |
413 | + return populate_config(display_name, {0,0}, 0.0f, {0,0}, mir_power_mode_off, mir_pixel_format_invalid, false); |
414 | } |
415 | |
416 | /* note: some drivers (qcom msm8960) choke if this is not the same size array |
417 | @@ -145,17 +184,17 @@ |
418 | if (display_name == mga::DisplayName::primary) |
419 | BOOST_THROW_EXCEPTION(std::runtime_error("primary display disconnected")); |
420 | else |
421 | - return {{}, {}, 0.0, false, format, quirks.num_framebuffers()}; |
422 | + return populate_config(display_name, {0,0}, 0.0f, {0,0}, mir_power_mode_off, mir_pixel_format_invalid, false); |
423 | } |
424 | |
425 | - return { |
426 | + return populate_config( |
427 | + display_name, |
428 | {values[0], values[1]}, |
429 | + period_to_hz(std::chrono::nanoseconds{values[2]}), |
430 | {dpi_to_mm(values[3], values[0]), dpi_to_mm(values[4], values[1])}, |
431 | - period_to_hz(std::chrono::nanoseconds{values[2]}), |
432 | - true, |
433 | + mir_power_mode_off, |
434 | format, |
435 | - quirks.num_framebuffers() |
436 | - }; |
437 | + true); |
438 | } |
439 | |
440 | mga::ConfigChangeSubscription mga::HwcBlankingControl::subscribe_to_config_changes( |
441 | |
442 | === modified file 'src/platforms/android/server/hwc_configuration.h' |
443 | --- src/platforms/android/server/hwc_configuration.h 2015-03-24 16:02:48 +0000 |
444 | +++ src/platforms/android/server/hwc_configuration.h 2015-03-24 19:59:11 +0000 |
445 | @@ -22,7 +22,6 @@ |
446 | #include "mir/graphics/display_configuration.h" |
447 | #include "mir/geometry/size.h" |
448 | #include "display_name.h" |
449 | -#include "device_quirks.h" |
450 | #include <memory> |
451 | #include <functional> |
452 | |
453 | @@ -32,15 +31,6 @@ |
454 | { |
455 | namespace android |
456 | { |
457 | -struct DisplayAttribs |
458 | -{ |
459 | - geometry::Size pixel_size; |
460 | - geometry::Size mm_size; |
461 | - double vrefresh_hz; |
462 | - bool connected; |
463 | - MirPixelFormat display_format; |
464 | - size_t num_framebuffers; |
465 | -}; |
466 | |
467 | using ConfigChangeSubscription = std::shared_ptr<void>; |
468 | //interface adapting for the blanking interface differences between fb, HWC 1.0-1.3, and HWC 1.4+ |
469 | @@ -49,7 +39,7 @@ |
470 | public: |
471 | virtual ~HwcConfiguration() = default; |
472 | virtual void power_mode(DisplayName, MirPowerMode) = 0; |
473 | - virtual DisplayAttribs active_attribs_for(DisplayName) = 0; |
474 | + virtual DisplayConfigurationOutput active_config_for(DisplayName) = 0; |
475 | virtual ConfigChangeSubscription subscribe_to_config_changes( |
476 | std::function<void()> const& hotplug_cb, |
477 | std::function<void(DisplayName)> const& vsync_cb) = 0; |
478 | @@ -66,13 +56,12 @@ |
479 | public: |
480 | HwcBlankingControl(std::shared_ptr<HwcWrapper> const&); |
481 | void power_mode(DisplayName, MirPowerMode) override; |
482 | - DisplayAttribs active_attribs_for(DisplayName) override; |
483 | + DisplayConfigurationOutput active_config_for(DisplayName) override; |
484 | ConfigChangeSubscription subscribe_to_config_changes( |
485 | std::function<void()> const& hotplug_cb, |
486 | std::function<void(DisplayName)> const& vsync_cb) override; |
487 | |
488 | private: |
489 | - DeviceQuirks quirks{PropertiesOps{}}; |
490 | std::shared_ptr<HwcWrapper> const hwc_device; |
491 | bool off; |
492 | MirPixelFormat format; |
493 | |
494 | === modified file 'tests/include/mir_test_doubles/stub_display_builder.h' |
495 | --- tests/include/mir_test_doubles/stub_display_builder.h 2015-03-24 16:02:48 +0000 |
496 | +++ tests/include/mir_test_doubles/stub_display_builder.h 2015-03-24 19:59:11 +0000 |
497 | @@ -23,6 +23,7 @@ |
498 | #include "src/platforms/android/server/display_component_factory.h" |
499 | #include "src/platforms/android/server/configurable_display_buffer.h" |
500 | #include "src/platforms/android/server/hwc_configuration.h" |
501 | +#include "stub_display_configuration.h" |
502 | #include "mock_display_device.h" |
503 | #include <gmock/gmock.h> |
504 | |
505 | @@ -45,16 +46,15 @@ |
506 | MockHwcConfiguration() |
507 | { |
508 | using namespace testing; |
509 | + StubDisplayConfig config({{true, true}, {false, false}}); |
510 | ON_CALL(*this, subscribe_to_config_changes(_,_)).WillByDefault(Return(nullptr)); |
511 | - ON_CALL(*this, active_attribs_for(graphics::android::DisplayName::primary)) |
512 | - .WillByDefault(testing::Return(graphics::android::DisplayAttribs{ |
513 | - {0,0},{0,0}, 0.0, true, mir_pixel_format_abgr_8888, 2})); |
514 | - ON_CALL(*this, active_attribs_for(graphics::android::DisplayName::external)) |
515 | - .WillByDefault(testing::Return(graphics::android::DisplayAttribs{ |
516 | - {0,0},{0,0}, 0.0, false, mir_pixel_format_abgr_8888, 2})); |
517 | + ON_CALL(*this, active_config_for(graphics::android::DisplayName::primary)) |
518 | + .WillByDefault(testing::Return(config.outputs[0])); |
519 | + ON_CALL(*this, active_config_for(graphics::android::DisplayName::external)) |
520 | + .WillByDefault(testing::Return(config.outputs[1])); |
521 | } |
522 | MOCK_METHOD2(power_mode, void(graphics::android::DisplayName, MirPowerMode)); |
523 | - MOCK_METHOD1(active_attribs_for, graphics::android::DisplayAttribs(graphics::android::DisplayName)); |
524 | + MOCK_METHOD1(active_config_for, graphics::DisplayConfigurationOutput(graphics::android::DisplayName)); |
525 | MOCK_METHOD2(subscribe_to_config_changes, |
526 | graphics::android::ConfigChangeSubscription( |
527 | std::function<void()> const&, std::function<void(graphics::android::DisplayName)> const&)); |
528 | @@ -66,14 +66,13 @@ |
529 | { |
530 | } |
531 | |
532 | - graphics::android::DisplayAttribs active_attribs_for(graphics::android::DisplayName name) override |
533 | + graphics::DisplayConfigurationOutput active_config_for(graphics::android::DisplayName name) override |
534 | { |
535 | - if (name == graphics::android::DisplayName::external) |
536 | - return graphics::android::DisplayAttribs{{20,20}, {4,4}, 50.0f, false, mir_pixel_format_abgr_8888, 2}; |
537 | - else |
538 | - return graphics::android::DisplayAttribs{{20,20}, {4,4}, 350.0f, true, mir_pixel_format_abgr_8888, 2}; |
539 | + bool connected{name == graphics::android::DisplayName::primary}; |
540 | + auto config = StubDisplayConfig({{connected, connected}}).outputs[0]; |
541 | + config.id = static_cast<graphics::DisplayConfigurationOutputId>(name); |
542 | + return config; |
543 | } |
544 | - |
545 | |
546 | graphics::android::ConfigChangeSubscription subscribe_to_config_changes( |
547 | std::function<void()> const&, std::function<void(graphics::android::DisplayName)> const&) override |
548 | @@ -101,7 +100,7 @@ |
549 | new graphics::android::LayerList(std::make_shared<graphics::android::IntegerSourceCrop>(), {})); |
550 | } |
551 | |
552 | - std::unique_ptr<graphics::android::FramebufferBundle> create_framebuffers(graphics::android::DisplayAttribs const&) override |
553 | + std::unique_ptr<graphics::android::FramebufferBundle> create_framebuffers(graphics::DisplayConfigurationOutput const&) override |
554 | { |
555 | return std::unique_ptr<graphics::android::FramebufferBundle>(new StubFramebufferBundle()); |
556 | } |
557 | |
558 | === modified file 'tests/include/mir_test_doubles/stub_display_configuration.h' |
559 | --- tests/include/mir_test_doubles/stub_display_configuration.h 2015-03-24 16:02:48 +0000 |
560 | +++ tests/include/mir_test_doubles/stub_display_configuration.h 2015-03-24 19:59:11 +0000 |
561 | @@ -32,6 +32,36 @@ |
562 | namespace doubles |
563 | { |
564 | |
565 | +struct StubDisplayConfigurationOutput : public graphics::DisplayConfigurationOutput |
566 | +{ |
567 | + StubDisplayConfigurationOutput( |
568 | + geometry::Size px_size, geometry::Size mm_size, MirPixelFormat format, double vrefresh, bool connected) : |
569 | + StubDisplayConfigurationOutput(graphics::DisplayConfigurationOutputId{0}, px_size, mm_size, format, vrefresh, connected) |
570 | + { |
571 | + } |
572 | + |
573 | + StubDisplayConfigurationOutput(graphics::DisplayConfigurationOutputId id, |
574 | + geometry::Size px_size, geometry::Size mm_size, MirPixelFormat format, double vrefresh, bool connected) : |
575 | + DisplayConfigurationOutput{ |
576 | + id, |
577 | + graphics::DisplayConfigurationCardId{0}, |
578 | + graphics::DisplayConfigurationOutputType::lvds, |
579 | + {format}, |
580 | + {{px_size, vrefresh}}, |
581 | + 0, |
582 | + mm_size, |
583 | + connected, |
584 | + connected, |
585 | + {0,0}, |
586 | + 0, |
587 | + format, |
588 | + mir_power_mode_on, |
589 | + mir_orientation_normal |
590 | + } |
591 | + { |
592 | + } |
593 | +}; |
594 | + |
595 | class StubDisplayConfig : public graphics::DisplayConfiguration |
596 | { |
597 | public: |
598 | @@ -64,6 +94,8 @@ |
599 | { |
600 | outputs[i].connected = connected_used[i].first; |
601 | outputs[i].used = connected_used[i].second; |
602 | + outputs[i].current_format = mir_pixel_format_abgr_8888; |
603 | + outputs[i].id = graphics::DisplayConfigurationOutputId{static_cast<int>(i)}; |
604 | } |
605 | } |
606 | |
607 | |
608 | === modified file 'tests/unit-tests/graphics/android/test_display.cpp' |
609 | --- tests/unit-tests/graphics/android/test_display.cpp 2015-03-24 16:02:48 +0000 |
610 | +++ tests/unit-tests/graphics/android/test_display.cpp 2015-03-24 19:59:11 +0000 |
611 | @@ -30,6 +30,7 @@ |
612 | #include "mir_test_doubles/stub_gl_config.h" |
613 | #include "mir_test_doubles/mock_gl_config.h" |
614 | #include "mir_test_doubles/stub_gl_program_factory.h" |
615 | +#include "mir_test_doubles/stub_display_configuration.h" |
616 | #include "mir/graphics/android/mir_native_window.h" |
617 | #include "mir_test_doubles/stub_driver_interpreter.h" |
618 | |
619 | @@ -401,10 +402,12 @@ |
620 | |
621 | stub_db_factory->with_next_config([&](mtd::MockHwcConfiguration& mock_config) |
622 | { |
623 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::primary)) |
624 | - .WillByDefault(Return(mga::DisplayAttribs{pixel_size, physical_size, vrefresh, true, format, true})); |
625 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
626 | - .WillByDefault(Return(mga::DisplayAttribs{pixel_size, physical_size, vrefresh, false, format, true})); |
627 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::primary)) |
628 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
629 | + pixel_size, physical_size, format, vrefresh, true})); |
630 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
631 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
632 | + pixel_size, physical_size, format, vrefresh, false})); |
633 | }); |
634 | |
635 | mga::Display display( |
636 | @@ -448,12 +451,12 @@ |
637 | |
638 | stub_db_factory->with_next_config([&](mtd::MockHwcConfiguration& mock_config) |
639 | { |
640 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::primary)) |
641 | - .WillByDefault(Return( |
642 | - mga::DisplayAttribs{primary_pixel_size, primary_physical_size, primary_vrefresh, true, format, 2})); |
643 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
644 | - .WillByDefault(Return( |
645 | - mga::DisplayAttribs{external_pixel_size, external_physical_size, external_vrefresh, true, format, 2})); |
646 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::primary)) |
647 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
648 | + primary_pixel_size, primary_physical_size, format, primary_vrefresh, true})); |
649 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
650 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{mg::DisplayConfigurationOutputId{1}, |
651 | + external_pixel_size, external_physical_size, format, external_vrefresh, true})); |
652 | }); |
653 | |
654 | mga::Display display( |
655 | @@ -491,7 +494,7 @@ |
656 | EXPECT_EQ(mg::DisplayConfigurationOutputId{1}, outputs[1].id); |
657 | EXPECT_EQ(mg::DisplayConfigurationCardId{0}, outputs[1].card_id); |
658 | EXPECT_TRUE(outputs[1].connected); |
659 | - EXPECT_FALSE(outputs[1].used); |
660 | + EXPECT_TRUE(outputs[1].used); |
661 | EXPECT_EQ(origin, outputs[1].top_left); |
662 | EXPECT_EQ(0, outputs[1].current_mode_index); |
663 | EXPECT_EQ(external_physical_size, outputs[1].physical_size_mm); |
664 | @@ -575,34 +578,33 @@ |
665 | std::shared_ptr<void> subscription = std::make_shared<int>(3433); |
666 | std::function<void()> hotplug_fn = []{}; |
667 | |
668 | - mga::DisplayAttribs attribs1 |
669 | + mtd::StubDisplayConfigurationOutput attribs1 |
670 | { |
671 | {33, 32}, |
672 | {31, 35}, |
673 | + mir_pixel_format_abgr_8888, |
674 | 0.44, |
675 | true, |
676 | - mir_pixel_format_abgr_8888, |
677 | - 2 |
678 | }; |
679 | - mga::DisplayAttribs attribs2 |
680 | + mtd::StubDisplayConfigurationOutput attribs2 |
681 | { |
682 | {3, 3}, |
683 | {1, 5}, |
684 | + mir_pixel_format_abgr_8888, |
685 | 0.5544, |
686 | true, |
687 | - mir_pixel_format_abgr_8888, |
688 | - 2 |
689 | }; |
690 | |
691 | stub_db_factory->with_next_config([&](mtd::MockHwcConfiguration& mock_config) |
692 | { |
693 | EXPECT_CALL(mock_config, subscribe_to_config_changes(_,_)) |
694 | .WillOnce(DoAll(SaveArg<0>(&hotplug_fn), Return(subscription))); |
695 | - EXPECT_CALL(mock_config, active_attribs_for(mga::DisplayName::primary)) |
696 | + |
697 | + EXPECT_CALL(mock_config, active_config_for(mga::DisplayName::primary)) |
698 | .Times(2) |
699 | .WillOnce(testing::Return(attribs1)) |
700 | .WillOnce(testing::Return(attribs2)); |
701 | - EXPECT_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
702 | + EXPECT_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
703 | .Times(2) |
704 | .WillOnce(testing::Return(attribs1)) |
705 | .WillOnce(testing::Return(attribs2)); |
706 | @@ -617,14 +619,14 @@ |
707 | |
708 | auto config = display.configuration(); |
709 | config->for_each_output([&](mg::UserDisplayConfigurationOutput const& c){ |
710 | - EXPECT_THAT(c.modes[c.current_mode_index].size, Eq(attribs1.pixel_size)); |
711 | + EXPECT_THAT(c.modes[c.current_mode_index].size, Eq(attribs1.modes[attribs1.current_mode_index].size)); |
712 | }); |
713 | |
714 | hotplug_fn(); |
715 | config = display.configuration(); |
716 | config = display.configuration(); |
717 | config->for_each_output([&](mg::UserDisplayConfigurationOutput const& c){ |
718 | - EXPECT_THAT(c.modes[c.current_mode_index].size, Eq(attribs2.pixel_size)); |
719 | + EXPECT_THAT(c.modes[c.current_mode_index].size, Eq(attribs2.modes[attribs2.current_mode_index].size)); |
720 | }); |
721 | } |
722 | |
723 | @@ -635,15 +637,15 @@ |
724 | bool external_connected = true; |
725 | stub_db_factory->with_next_config([&](mtd::MockHwcConfiguration& mock_config) |
726 | { |
727 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::primary)) |
728 | - .WillByDefault(Return( |
729 | - mga::DisplayAttribs{{20,20}, {4,4}, 50.0f, true, mir_pixel_format_abgr_8888, 2})); |
730 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::primary)) |
731 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
732 | + mg::DisplayConfigurationOutputId{0}, {20,20}, {4,4}, mir_pixel_format_abgr_8888, 50.0f, true})); |
733 | |
734 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
735 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
736 | .WillByDefault(Invoke([&](mga::DisplayName) |
737 | { |
738 | - return mga::DisplayAttribs{ |
739 | - {20,20}, {4,4}, 50.0f, external_connected, mir_pixel_format_abgr_8888, 2}; |
740 | + return mtd::StubDisplayConfigurationOutput{mg::DisplayConfigurationOutputId{1}, |
741 | + {20,20}, {4,4}, mir_pixel_format_abgr_8888, 50.0f, external_connected}; |
742 | })); |
743 | EXPECT_CALL(mock_config, subscribe_to_config_changes(_,_)) |
744 | .WillOnce(DoAll(SaveArg<0>(&hotplug_fn), Return(std::make_shared<char>('2')))); |
745 | @@ -696,14 +698,14 @@ |
746 | { |
747 | EXPECT_CALL(mock_config, subscribe_to_config_changes(_,_)) |
748 | .WillOnce(DoAll(SaveArg<0>(&hotplug_fn), Return(std::make_shared<char>('2')))); |
749 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::primary)) |
750 | - .WillByDefault(Return( |
751 | - mga::DisplayAttribs{{20,20}, {4,4}, 50.0f, true, mir_pixel_format_abgr_8888, 2})); |
752 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
753 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::primary)) |
754 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
755 | + {20,20}, {4,4}, mir_pixel_format_abgr_8888, 50.0f, true})); |
756 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
757 | .WillByDefault(Invoke([&](mga::DisplayName) |
758 | { |
759 | - return mga::DisplayAttribs{ |
760 | - {20,20}, {4,4}, 50.0f, external_connected, mir_pixel_format_abgr_8888, 2}; |
761 | + return mtd::StubDisplayConfigurationOutput{ |
762 | + {20,20}, {4,4}, mir_pixel_format_abgr_8888, 50.0f, external_connected}; |
763 | })); |
764 | |
765 | |
766 | @@ -738,9 +740,9 @@ |
767 | using namespace testing; |
768 | stub_db_factory->with_next_config([&](mtd::MockHwcConfiguration& mock_config) |
769 | { |
770 | - ON_CALL(mock_config, active_attribs_for(mga::DisplayName::external)) |
771 | - .WillByDefault(Return(mga::DisplayAttribs{ |
772 | - {0,0},{0,0}, 0.0, true, mir_pixel_format_abgr_8888, 2})); |
773 | + ON_CALL(mock_config, active_config_for(mga::DisplayName::external)) |
774 | + .WillByDefault(Return(mtd::StubDisplayConfigurationOutput{ |
775 | + mg::DisplayConfigurationOutputId{1}, {0,0}, {0,0}, mir_pixel_format_abgr_8888, 0.0, true})); |
776 | EXPECT_CALL(mock_config, power_mode(mga::DisplayName::primary, _)) |
777 | .Times(AnyNumber()); |
778 | InSequence seq; |
779 | |
780 | === modified file 'tests/unit-tests/graphics/android/test_display_hotplug.cpp' |
781 | --- tests/unit-tests/graphics/android/test_display_hotplug.cpp 2015-03-24 16:02:48 +0000 |
782 | +++ tests/unit-tests/graphics/android/test_display_hotplug.cpp 2015-03-24 19:59:11 +0000 |
783 | @@ -26,6 +26,7 @@ |
784 | #include "mir_test_doubles/mock_display_device.h" |
785 | #include "mir_test_doubles/mock_framebuffer_bundle.h" |
786 | #include "mir_test_doubles/stub_gl_config.h" |
787 | +#include "mir_test_doubles/stub_display_configuration.h" |
788 | #include "mir_test_doubles/mock_egl.h" |
789 | #include "mir_test_doubles/mock_gl.h" |
790 | #include "mir_test/auto_unblock_thread.h" |
791 | @@ -42,9 +43,9 @@ |
792 | struct StubHwcConfig : public mga::HwcConfiguration |
793 | { |
794 | void power_mode(mga::DisplayName, MirPowerMode) override {} |
795 | - mga::DisplayAttribs active_attribs_for(mga::DisplayName) override |
796 | + mg::DisplayConfigurationOutput active_config_for(mga::DisplayName) override |
797 | { |
798 | - return mga::DisplayAttribs{{0,0}, {0,0}, 0.0, true, mir_pixel_format_abgr_8888, 2}; |
799 | + return mtd::StubDisplayConfig({{true,true}}).outputs[0]; |
800 | } |
801 | mga::ConfigChangeSubscription subscribe_to_config_changes( |
802 | std::function<void()> const& cb, std::function<void(mga::DisplayName)> const&) override |
803 | @@ -67,9 +68,9 @@ |
804 | { |
805 | wrapped.power_mode(d, m); |
806 | } |
807 | - mga::DisplayAttribs active_attribs_for(mga::DisplayName d) override |
808 | + mg::DisplayConfigurationOutput active_config_for(mga::DisplayName d) override |
809 | { |
810 | - return wrapped.active_attribs_for(d); |
811 | + return wrapped.active_config_for(d); |
812 | } |
813 | mga::ConfigChangeSubscription subscribe_to_config_changes( |
814 | std::function<void()> const& hotplug, std::function<void(mga::DisplayName)> const& vsync) override |
815 | @@ -81,7 +82,7 @@ |
816 | |
817 | struct StubOutputBuilder : public mga::DisplayComponentFactory |
818 | { |
819 | - std::unique_ptr<mga::FramebufferBundle> create_framebuffers(mga::DisplayAttribs const&) override |
820 | + std::unique_ptr<mga::FramebufferBundle> create_framebuffers(mg::DisplayConfigurationOutput const&) override |
821 | { |
822 | return std::unique_ptr<mga::FramebufferBundle>(new testing::NiceMock<mtd::MockFBBundle>()); |
823 | } |
824 | |
825 | === modified file 'tests/unit-tests/graphics/android/test_fb_device.cpp' |
826 | --- tests/unit-tests/graphics/android/test_fb_device.cpp 2015-03-24 16:02:48 +0000 |
827 | +++ tests/unit-tests/graphics/android/test_fb_device.cpp 2015-03-24 19:59:11 +0000 |
828 | @@ -139,17 +139,7 @@ |
829 | { |
830 | using namespace testing; |
831 | mga::FbControl fb_control(fb_hal_mock); |
832 | - auto attribs = fb_control.active_attribs_for(mga::DisplayName::primary); |
833 | - EXPECT_EQ(display_size, attribs.pixel_size); |
834 | - EXPECT_EQ(mir_pixel_format_abgr_8888, attribs.display_format); |
835 | - EXPECT_EQ(fbnum, attribs.num_framebuffers); |
836 | -} |
837 | - |
838 | -//some drivers incorrectly report 0 buffers available. request 2 fbs in this case. |
839 | -TEST_F(FBDevice, determine_fbnum_always_reports_2_minimum) |
840 | -{ |
841 | - auto slightly_malformed_fb_hal_mock = std::make_shared<mtd::MockFBHalDevice>( |
842 | - display_size.width.as_int(), display_size.height.as_int(), format, 0); |
843 | - mga::FbControl fb_control(slightly_malformed_fb_hal_mock); |
844 | - EXPECT_EQ(2u, fb_control.active_attribs_for(mga::DisplayName::primary).num_framebuffers); |
845 | + auto attribs = fb_control.active_config_for(mga::DisplayName::primary); |
846 | + EXPECT_EQ(display_size, attribs.modes[attribs.current_mode_index].size); |
847 | + EXPECT_EQ(mir_pixel_format_abgr_8888, attribs.current_format); |
848 | } |
849 | |
850 | === modified file 'tests/unit-tests/graphics/android/test_hwc_configuration.cpp' |
851 | --- tests/unit-tests/graphics/android/test_hwc_configuration.cpp 2015-03-24 16:02:48 +0000 |
852 | +++ tests/unit-tests/graphics/android/test_hwc_configuration.cpp 2015-03-24 19:59:11 +0000 |
853 | @@ -68,7 +68,7 @@ |
854 | .InSequence(seq); |
855 | |
856 | mga::HwcBlankingControl hwc_config{mock_hwc_wrapper}; |
857 | - EXPECT_EQ(mir_pixel_format_argb_8888, hwc_config.active_attribs_for(mga::DisplayName::primary).display_format); |
858 | + EXPECT_EQ(mir_pixel_format_argb_8888, hwc_config.active_config_for(mga::DisplayName::primary).current_format); |
859 | } |
860 | |
861 | //not all hwc implementations give a hint about their framebuffer formats in their configuration. |
862 | @@ -92,7 +92,7 @@ |
863 | .InSequence(seq); |
864 | |
865 | mga::HwcBlankingControl hwc_config{mock_hwc_wrapper}; |
866 | - EXPECT_EQ(mir_pixel_format_abgr_8888, hwc_config.active_attribs_for(mga::DisplayName::primary).display_format); |
867 | + EXPECT_EQ(mir_pixel_format_abgr_8888, hwc_config.active_config_for(mga::DisplayName::primary).current_format); |
868 | } |
869 | |
870 | TEST_F(HwcConfiguration, turns_screen_on) |
871 | @@ -173,11 +173,13 @@ |
872 | })); |
873 | |
874 | auto vrefresh_hz = 1000.0 / vrefresh_period.count(); |
875 | - auto attribs = config.active_attribs_for(display); |
876 | - EXPECT_THAT(attribs.pixel_size, Eq(px_size)); |
877 | - EXPECT_THAT(attribs.mm_size, Eq(mm_size)); |
878 | - EXPECT_THAT(attribs.vrefresh_hz, Eq(vrefresh_hz)); |
879 | + auto attribs = config.active_config_for(display); |
880 | + ASSERT_THAT(attribs.modes.size(), Eq(1)); |
881 | + EXPECT_THAT(attribs.modes[0].size, Eq(px_size)); |
882 | + EXPECT_THAT(attribs.modes[0].vrefresh_hz, Eq(vrefresh_hz)); |
883 | + EXPECT_THAT(attribs.physical_size_mm, Eq(mm_size)); |
884 | EXPECT_TRUE(attribs.connected); |
885 | + EXPECT_TRUE(attribs.used); |
886 | } |
887 | |
888 | //the primary display should not be disconnected, but this is how to tell if the external one is |
889 | @@ -188,12 +190,12 @@ |
890 | .WillByDefault(Return(std::vector<mga::ConfigId>{})); |
891 | |
892 | EXPECT_THROW({ |
893 | - config.active_attribs_for(mga::DisplayName::primary); |
894 | + config.active_config_for(mga::DisplayName::primary); |
895 | }, std::runtime_error); |
896 | - auto external_attribs = config.active_attribs_for(mga::DisplayName::external); |
897 | - EXPECT_THAT(external_attribs.pixel_size, Eq(geom::Size{0,0})); |
898 | - EXPECT_THAT(external_attribs.vrefresh_hz, Eq(0.0)); |
899 | + auto external_attribs = config.active_config_for(mga::DisplayName::external); |
900 | + EXPECT_THAT(external_attribs.modes.size(), Eq(0)); |
901 | EXPECT_FALSE(external_attribs.connected); |
902 | + EXPECT_FALSE(external_attribs.used); |
903 | } |
904 | |
905 | //some devices (bq) only report an error later in the display attributes call, make sure to report disconnected on error to this call. |
906 | @@ -204,12 +206,12 @@ |
907 | .WillByDefault(Return(-22)); |
908 | |
909 | EXPECT_THROW({ |
910 | - config.active_attribs_for(mga::DisplayName::primary); |
911 | + config.active_config_for(mga::DisplayName::primary); |
912 | }, std::runtime_error); |
913 | - auto external_attribs = config.active_attribs_for(mga::DisplayName::external); |
914 | - EXPECT_THAT(external_attribs.pixel_size, Eq(geom::Size{0,0})); |
915 | - EXPECT_THAT(external_attribs.vrefresh_hz, Eq(0.0)); |
916 | + auto external_attribs = config.active_config_for(mga::DisplayName::external); |
917 | + EXPECT_THAT(external_attribs.modes.size(), Eq(0)); |
918 | EXPECT_FALSE(external_attribs.connected); |
919 | + EXPECT_FALSE(external_attribs.used); |
920 | } |
921 | |
922 | TEST_F(HwcConfiguration, no_fpe_from_malformed_refresh) |
923 | @@ -224,8 +226,8 @@ |
924 | values[i++] = 0; |
925 | return 0; |
926 | })); |
927 | - auto attribs = config.active_attribs_for(mga::DisplayName::external); |
928 | - EXPECT_THAT(attribs.vrefresh_hz, Eq(0.0f)); |
929 | + auto attribs = config.active_config_for(mga::DisplayName::external); |
930 | + EXPECT_THAT(attribs.modes[attribs.current_mode_index].vrefresh_hz, Eq(0.0f)); |
931 | } |
932 | |
933 | TEST_F(HwcConfiguration, no_fpe_from_malformed_dpi) |
934 | @@ -240,8 +242,8 @@ |
935 | values[i++] = 0; |
936 | return 0; |
937 | })); |
938 | - auto attribs = config.active_attribs_for(mga::DisplayName::external); |
939 | - EXPECT_THAT(attribs.mm_size, Eq(geom::Size{0,0})); |
940 | + auto attribs = config.active_config_for(mga::DisplayName::external); |
941 | + EXPECT_THAT(attribs.physical_size_mm, Eq(geom::Size{0,0})); |
942 | } |
943 | |
944 | TEST_F(HwcConfiguration, subscribes_to_hotplug_and_vsync) |
945 | |
946 | === modified file 'tests/unit-tests/graphics/android/test_output_builder.cpp' |
947 | --- tests/unit-tests/graphics/android/test_output_builder.cpp 2015-01-22 09:00:14 +0000 |
948 | +++ tests/unit-tests/graphics/android/test_output_builder.cpp 2015-03-24 19:59:11 +0000 |
949 | @@ -33,6 +33,7 @@ |
950 | #include "mir_test_doubles/mock_hwc_device_wrapper.h" |
951 | #include "mir_test_doubles/stub_gl_config.h" |
952 | #include "mir_test_doubles/stub_gl_program_factory.h" |
953 | +#include "mir_test_doubles/stub_display_configuration.h" |
954 | #include <system/window.h> |
955 | #include <gtest/gtest.h> |
956 | |
957 | @@ -159,3 +160,22 @@ |
958 | mock_hwc_report); |
959 | }, std::runtime_error); |
960 | } |
961 | + |
962 | +//some drivers incorrectly report 0 buffers available. request 2 fbs in this case. |
963 | +TEST_F(HalComponentFactory, determine_fbnum_always_reports_2_minimum) |
964 | +{ |
965 | + using namespace testing; |
966 | + EXPECT_CALL(*mock_resource_factory, create_hwc_wrapper(_)) |
967 | + .WillOnce(Throw(std::runtime_error(""))); |
968 | + EXPECT_CALL(*mock_resource_factory, create_fb_native_device()) |
969 | + .WillOnce(Return(std::make_shared<mtd::MockFBHalDevice>( |
970 | + 0, 0, mir_pixel_format_abgr_8888, 0))); |
971 | + EXPECT_CALL(mock_buffer_allocator, alloc_buffer_platform(_,_,_)) |
972 | + .Times(2); |
973 | + |
974 | + mga::HalComponentFactory factory( |
975 | + mt::fake_shared(mock_buffer_allocator), |
976 | + mock_resource_factory, |
977 | + mock_hwc_report); |
978 | + factory.create_framebuffers(mtd::StubDisplayConfig(1).outputs[0]); |
979 | +} |
646 - EXPECT_ FALSE(outputs[ 1].used) ; TRUE(outputs[ 1].used) ;
647 + EXPECT_
Why? It isn't clear to me why this expectation changes as a result of changing the way data is held.