Mir

Merge lp:~kdub/mir/no-display-attribs into lp:mir

Proposed by Kevin DuBois
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
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 DisplayConfigurationOutput, and required additional conversion steps that aren't needed if we just use DisplayConfigurationOutput in the first place.

Description of the change

android: remove the DisplayAttribs struct, which was just a subset of the information contained in DisplayConfigurationOutput, and required additional conversion steps that aren't needed if we just use DisplayConfigurationOutput in the first place. (nb: I think I promised to remove this back when I was landing some of the MM stuff a month ago or so)

To post a comment you must log in.
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

646 - EXPECT_FALSE(outputs[1].used);
647 + EXPECT_TRUE(outputs[1].used);

Why? It isn't clear to me why this expectation changes as a result of changing the way data is held.

review: Needs Information
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

> 646 - EXPECT_FALSE(outputs[1].used);
> 647 + EXPECT_TRUE(outputs[1].used);
>
> 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.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

> > 646 - EXPECT_FALSE(outputs[1].used);
> > 647 + EXPECT_TRUE(outputs[1].used);
> >
> > 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

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

failure was in nested server+clang, not related

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

lp:1430000 strikes again.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good.

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Kevin DuBois (kdub) wrote :

mako failed to restart:
subprocess.CalledProcessError: Command 'phablet-network --skip-setup' returned non-zero exit status 124

run 1280 seemed to pass, retriggering

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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+}

Subscribers

People subscribed via source and target branches