Mir

Merge lp:~alan-griffiths/mir/fix-1463873 into lp:mir

Proposed by Alan Griffiths
Status: Merged
Merged at revision: 3119
Proposed branch: lp:~alan-griffiths/mir/fix-1463873
Merge into: lp:mir
Diff against target: 199 lines (+28/-18)
7 files modified
src/platforms/android/server/display.cpp (+1/-1)
src/platforms/android/server/display_configuration.cpp (+1/-1)
src/platforms/android/server/display_name.h (+11/-1)
src/platforms/android/server/fb_device.cpp (+1/-1)
src/platforms/android/server/hwc_blanking_control.cpp (+1/-1)
src/platforms/android/server/real_hwc_wrapper.cpp (+12/-12)
tests/include/mir/test/doubles/stub_display_builder.h (+1/-1)
To merge this branch: bzr merge lp:~alan-griffiths/mir/fix-1463873
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Kevin DuBois (community) Approve
Alexandros Frantzis (community) Approve
Alberto Aguirre (community) Approve
Review via email: mp+277552@code.launchpad.net

Commit message

platforms/android: Don't conflate the display numbering in HWC with the output numbering in Mir (as one is zero based and the other one based).

Description of the change

platforms/android: Don't conflate the display numbering in HWC with the output numbering in Mir (as one is zero based and the other one based).

This enables nested servers to specify the outputs on which to create fullscreen surfaces.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Alberto Aguirre (albaguirre) wrote :

LGTM

review: Approve
Revision history for this message
Alexandros Frantzis (afrantzis) wrote :

Looks good. I would also like for Kevin to take a look before we merge.

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

looks good to me.

review: Approve
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
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
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/platforms/android/server/display.cpp'
--- src/platforms/android/server/display.cpp 2015-10-07 15:32:10 +0000
+++ src/platforms/android/server/display.cpp 2015-11-19 10:44:11 +0000
@@ -287,7 +287,7 @@
287287
288void mga::Display::on_vsync(DisplayName name) const288void mga::Display::on_vsync(DisplayName name) const
289{289{
290 display_report->report_vsync(name);290 display_report->report_vsync(as_output_id(name).as_value());
291}291}
292292
293void mga::Display::register_configuration_change_handler(293void mga::Display::register_configuration_change_handler(
294294
=== modified file 'src/platforms/android/server/display_configuration.cpp'
--- src/platforms/android/server/display_configuration.cpp 2015-10-30 11:07:02 +0000
+++ src/platforms/android/server/display_configuration.cpp 2015-11-19 10:44:11 +0000
@@ -100,7 +100,7 @@
100100
101mg::DisplayConfigurationOutput& mga::DisplayConfiguration::operator[](mg::DisplayConfigurationOutputId const& disp_id)101mg::DisplayConfigurationOutput& mga::DisplayConfiguration::operator[](mg::DisplayConfigurationOutputId const& disp_id)
102{102{
103 auto id = disp_id.as_value();103 auto id = disp_id.as_value() - 1;
104 if (id != primary_id && id != external_id)104 if (id != primary_id && id != external_id)
105 BOOST_THROW_EXCEPTION(std::invalid_argument("invalid display id"));105 BOOST_THROW_EXCEPTION(std::invalid_argument("invalid display id"));
106 return configurations[id];106 return configurations[id];
107107
=== modified file 'src/platforms/android/server/display_name.h'
--- src/platforms/android/server/display_name.h 2015-01-22 09:00:14 +0000
+++ src/platforms/android/server/display_name.h 2015-11-19 10:44:11 +0000
@@ -19,6 +19,7 @@
19#ifndef MIR_GRAPHICS_ANDROID_DISPLAY_NAME_H_19#ifndef MIR_GRAPHICS_ANDROID_DISPLAY_NAME_H_
20#define MIR_GRAPHICS_ANDROID_DISPLAY_NAME_H_20#define MIR_GRAPHICS_ANDROID_DISPLAY_NAME_H_
2121
22#include "mir/graphics/display_configuration.h"
22#include <hardware/hwcomposer.h>23#include <hardware/hwcomposer.h>
2324
24namespace mir25namespace mir
@@ -28,13 +29,22 @@
28namespace android29namespace android
29{30{
3031
31enum DisplayName32enum class DisplayName
32{33{
33 primary = HWC_DISPLAY_PRIMARY,34 primary = HWC_DISPLAY_PRIMARY,
34 external = HWC_DISPLAY_EXTERNAL,35 external = HWC_DISPLAY_EXTERNAL,
35 virt = HWC_DISPLAY_VIRTUAL36 virt = HWC_DISPLAY_VIRTUAL
36};37};
3738
39inline auto as_output_id(DisplayName name) -> DisplayConfigurationOutputId
40{
41 return DisplayConfigurationOutputId{1 + static_cast<int>(name)};
42}
43
44inline auto as_hwc_display(DisplayName name) -> int
45{
46 return static_cast<int>(name);
47}
38}48}
39}49}
40}50}
4151
=== modified file 'src/platforms/android/server/fb_device.cpp'
--- src/platforms/android/server/fb_device.cpp 2015-10-07 12:07:00 +0000
+++ src/platforms/android/server/fb_device.cpp 2015-11-19 10:44:11 +0000
@@ -58,7 +58,7 @@
58 auto const connected = (display_name == DisplayName::primary);58 auto const connected = (display_name == DisplayName::primary);
5959
60 return {60 return {
61 static_cast<mg::DisplayConfigurationOutputId>(display_name),61 as_output_id(display_name),
62 mg::DisplayConfigurationCardId{0},62 mg::DisplayConfigurationCardId{0},
63 mg::DisplayConfigurationOutputType::lvds,63 mg::DisplayConfigurationOutputType::lvds,
64 std::vector<MirPixelFormat>{mga::to_mir_format(fb_device->format)},64 std::vector<MirPixelFormat>{mga::to_mir_format(fb_device->format)},
6565
=== modified file 'src/platforms/android/server/hwc_blanking_control.cpp'
--- src/platforms/android/server/hwc_blanking_control.cpp 2015-10-02 04:27:34 +0000
+++ src/platforms/android/server/hwc_blanking_control.cpp 2015-11-19 10:44:11 +0000
@@ -139,7 +139,7 @@
139 }139 }
140 140
141 return {141 return {
142 static_cast<mg::DisplayConfigurationOutputId>(name),142 as_output_id(name),
143 mg::DisplayConfigurationCardId{0},143 mg::DisplayConfigurationCardId{0},
144 type,144 type,
145 {display_format},145 {display_format},
146146
=== modified file 'src/platforms/android/server/real_hwc_wrapper.cpp'
--- src/platforms/android/server/real_hwc_wrapper.cpp 2015-10-07 02:34:05 +0000
+++ src/platforms/android/server/real_hwc_wrapper.cpp 2015-11-19 10:44:11 +0000
@@ -138,7 +138,7 @@
138138
139void mga::RealHwcWrapper::vsync_signal_on(DisplayName display_name) const139void mga::RealHwcWrapper::vsync_signal_on(DisplayName display_name) const
140{140{
141 if (auto rc = hwc_device->eventControl(hwc_device.get(), display_name, HWC_EVENT_VSYNC, 1))141 if (auto rc = hwc_device->eventControl(hwc_device.get(), as_hwc_display(display_name), HWC_EVENT_VSYNC, 1))
142 {142 {
143 std::stringstream ss;143 std::stringstream ss;
144 ss << "error turning vsync signal on. rc = " << std::hex << rc;144 ss << "error turning vsync signal on. rc = " << std::hex << rc;
@@ -149,7 +149,7 @@
149149
150void mga::RealHwcWrapper::vsync_signal_off(DisplayName display_name) const150void mga::RealHwcWrapper::vsync_signal_off(DisplayName display_name) const
151{151{
152 if (auto rc = hwc_device->eventControl(hwc_device.get(), display_name, HWC_EVENT_VSYNC, 0))152 if (auto rc = hwc_device->eventControl(hwc_device.get(), as_hwc_display(display_name), HWC_EVENT_VSYNC, 0))
153 {153 {
154 std::stringstream ss;154 std::stringstream ss;
155 ss << "error turning vsync signal off. rc = " << std::hex << rc;155 ss << "error turning vsync signal off. rc = " << std::hex << rc;
@@ -160,7 +160,7 @@
160160
161void mga::RealHwcWrapper::display_on(DisplayName display_name) const161void mga::RealHwcWrapper::display_on(DisplayName display_name) const
162{162{
163 if (auto rc = hwc_device->blank(hwc_device.get(), display_name, 0))163 if (auto rc = hwc_device->blank(hwc_device.get(), as_hwc_display(display_name), 0))
164 {164 {
165 std::stringstream ss;165 std::stringstream ss;
166 ss << "error turning display on. rc = " << std::hex << rc;166 ss << "error turning display on. rc = " << std::hex << rc;
@@ -171,7 +171,7 @@
171171
172void mga::RealHwcWrapper::display_off(DisplayName display_name) const172void mga::RealHwcWrapper::display_off(DisplayName display_name) const
173{173{
174 if (auto rc = hwc_device->blank(hwc_device.get(), display_name, 1))174 if (auto rc = hwc_device->blank(hwc_device.get(), as_hwc_display(display_name), 1))
175 {175 {
176 std::stringstream ss;176 std::stringstream ss;
177 ss << "error turning display off. rc = " << std::hex << rc;177 ss << "error turning display off. rc = " << std::hex << rc;
@@ -249,7 +249,7 @@
249 static size_t const max_configs = 16;249 static size_t const max_configs = 16;
250 size_t num_configs = max_configs;250 size_t num_configs = max_configs;
251 static uint32_t display_config[max_configs] = {};251 static uint32_t display_config[max_configs] = {};
252 if (hwc_device->getDisplayConfigs(hwc_device.get(), display_name, display_config, &num_configs))252 if (hwc_device->getDisplayConfigs(hwc_device.get(), as_hwc_display(display_name), display_config, &num_configs))
253 return {};253 return {};
254254
255 auto i = 0u;255 auto i = 0u;
@@ -263,12 +263,12 @@
263 DisplayName display_name, ConfigId config, uint32_t const* attributes, int32_t* values) const263 DisplayName display_name, ConfigId config, uint32_t const* attributes, int32_t* values) const
264{264{
265 return hwc_device->getDisplayAttributes(265 return hwc_device->getDisplayAttributes(
266 hwc_device.get(), display_name, config.as_value(), attributes, values);266 hwc_device.get(), as_hwc_display(display_name), config.as_value(), attributes, values);
267}267}
268268
269void mga::RealHwcWrapper::power_mode(DisplayName display_name, PowerMode mode) const269void mga::RealHwcWrapper::power_mode(DisplayName display_name, PowerMode mode) const
270{270{
271 if (auto rc = hwc_device->setPowerMode(hwc_device.get(), display_name, static_cast<int>(mode)))271 if (auto rc = hwc_device->setPowerMode(hwc_device.get(), as_hwc_display(display_name), static_cast<int>(mode)))
272 {272 {
273 std::stringstream ss;273 std::stringstream ss;
274 ss << "error setting power mode. rc = " << std::hex << rc;274 ss << "error setting power mode. rc = " << std::hex << rc;
@@ -280,16 +280,16 @@
280bool mga::RealHwcWrapper::has_active_config(DisplayName display_name) const280bool mga::RealHwcWrapper::has_active_config(DisplayName display_name) const
281{281{
282 int const no_active_config = -1;282 int const no_active_config = -1;
283 return hwc_device->getActiveConfig(hwc_device.get(), display_name) != no_active_config;283 return hwc_device->getActiveConfig(hwc_device.get(), as_hwc_display(display_name)) != no_active_config;
284}284}
285285
286mga::ConfigId mga::RealHwcWrapper::active_config_for(DisplayName display_name) const286mga::ConfigId mga::RealHwcWrapper::active_config_for(DisplayName display_name) const
287{287{
288 int id = hwc_device->getActiveConfig(hwc_device.get(), display_name);288 int id = hwc_device->getActiveConfig(hwc_device.get(), as_hwc_display(display_name));
289 if (id == -1)289 if (id == -1)
290 {290 {
291 std::stringstream ss;291 std::stringstream ss;
292 ss << "No active configuration for display: " << display_name;292 ss << "No active configuration for display: " << as_hwc_display(display_name);
293 BOOST_THROW_EXCEPTION(std::runtime_error(ss.str()));293 BOOST_THROW_EXCEPTION(std::runtime_error(ss.str()));
294 }294 }
295 return mga::ConfigId{static_cast<uint32_t>(id)};295 return mga::ConfigId{static_cast<uint32_t>(id)};
@@ -297,7 +297,7 @@
297297
298void mga::RealHwcWrapper::set_active_config(DisplayName display_name, ConfigId id) const298void mga::RealHwcWrapper::set_active_config(DisplayName display_name, ConfigId id) const
299{299{
300 int rc = hwc_device->setActiveConfig(hwc_device.get(), display_name, id.as_value());300 int rc = hwc_device->setActiveConfig(hwc_device.get(), as_hwc_display(display_name), id.as_value());
301 if (rc < 0)301 if (rc < 0)
302 BOOST_THROW_EXCEPTION(std::system_error(rc, std::system_category(), "unable to set active display config"));302 BOOST_THROW_EXCEPTION(std::system_error(rc, std::system_category(), "unable to set active display config"));
303}303}
@@ -305,5 +305,5 @@
305bool mga::RealHwcWrapper::display_connected(DisplayName display_name) const305bool mga::RealHwcWrapper::display_connected(DisplayName display_name) const
306{306{
307 size_t num_configs = 0;307 size_t num_configs = 0;
308 return hwc_device->getDisplayConfigs(hwc_device.get(), display_name, nullptr, &num_configs) == 0;308 return hwc_device->getDisplayConfigs(hwc_device.get(), as_hwc_display(display_name), nullptr, &num_configs) == 0;
309}309}
310310
=== modified file 'tests/include/mir/test/doubles/stub_display_builder.h'
--- tests/include/mir/test/doubles/stub_display_builder.h 2015-07-27 07:24:50 +0000
+++ tests/include/mir/test/doubles/stub_display_builder.h 2015-11-19 10:44:11 +0000
@@ -70,7 +70,7 @@
70 {70 {
71 bool connected{name == graphics::android::DisplayName::primary};71 bool connected{name == graphics::android::DisplayName::primary};
72 auto config = StubDisplayConfig({{connected, connected}}).outputs[0];72 auto config = StubDisplayConfig({{connected, connected}}).outputs[0];
73 config.id = static_cast<graphics::DisplayConfigurationOutputId>(name);73 config.id = as_output_id(name);
74 return config;74 return config;
75 }75 }
76 76

Subscribers

People subscribed via source and target branches