Mir

Merge lp:~kdub/mir/fix-1517597 into lp:mir

Proposed by Kevin DuBois
Status: Merged
Approved by: Andreas Pokorny
Approved revision: no longer in the source branch.
Merged at revision: 3314
Proposed branch: lp:~kdub/mir/fix-1517597
Merge into: lp:mir
Diff against target: 184 lines (+47/-13)
5 files modified
src/platforms/android/server/fb_device.cpp (+14/-1)
tests/include/mir/test/doubles/mock_fb_hal_device.h (+4/-4)
tests/unit-tests/graphics/android/test_fb_device.cpp (+27/-6)
tests/unit-tests/graphics/android/test_hwc_fb_device.cpp (+1/-1)
tests/unit-tests/graphics/android/test_output_builder.cpp (+1/-1)
To merge this branch: bzr merge lp:~kdub/mir/fix-1517597
Reviewer Review Type Date Requested Status
Andreas Pokorny (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Cemil Azizoglu (community) Approve
Mir CI Bot continuous-integration Approve
Review via email: mp+285912@code.launchpad.net

Commit message

android: support querying the dpi for legacy devices using the fb hal module or HWC version 1.0 (eg the goldfish emulator).

fixes: LP: #1517597

Description of the change

android: support querying the dpi for legacy devices using the fb hal module or HWC version 1.0 (eg the goldfish emulator).

fixes: LP: #1517597

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

PASSED: Continuous integration, rev:3312
https://mir-jenkins.ubuntu.com/job/mir-ci/295/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build/83
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/89
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/85
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/85
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/85
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=amd64,compiler=gcc,platform=mesa,release=xenial/85/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/85
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/85/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/85
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/85/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/85
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-advanced/arch=i386,compiler=gcc,platform=mesa,release=xenial/85/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)
Revision history for this message
Cemil Azizoglu (cemil-azizoglu) wrote :

ok

review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

PASSED: Continuous integration, rev:3312
http://jenkins.qa.ubuntu.com/job/mir-ci/6281/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5902
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4809
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5858
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/431
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/605
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/605/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/605
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/605/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5855
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5855/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/8250
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27556
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/427
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/427/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/281
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27562

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/mir-ci/6281/rebuild

review: Approve (continuous-integration)
Revision history for this message
Andreas Pokorny (andreas-pokorny) wrote :

Just tried it on the emulator, together with the qemu fixes the problems are gone now.

LGTM

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/platforms/android/server/fb_device.cpp'
2--- src/platforms/android/server/fb_device.cpp 2016-02-02 20:22:57 +0000
3+++ src/platforms/android/server/fb_device.cpp 2016-02-12 17:30:33 +0000
4@@ -24,6 +24,7 @@
5 #include "fb_device.h"
6 #include "framebuffer_bundle.h"
7 #include "buffer.h"
8+#include "mir/geometry/length.h"
9
10 #include <boost/throw_exception.hpp>
11 #include <stdexcept>
12@@ -57,6 +58,18 @@
13 {
14 auto const connected = (display_name == DisplayName::primary);
15
16+ geom::Length length_x_inches{0, geom::Length::Units::inches};
17+ geom::Length length_y_inches{0, geom::Length::Units::inches};
18+ if (fb_device->xdpi != 0)
19+ length_x_inches = geom::Length(fb_device->width / fb_device->xdpi, geom::Length::Units::inches);
20+ if (fb_device->ydpi != 0)
21+ length_y_inches = geom::Length(fb_device->height / fb_device->ydpi, geom::Length::Units::inches);
22+
23+ geom::Size display_size_mm{
24+ length_x_inches.as(geom::Length::Units::millimetres),
25+ length_y_inches.as(geom::Length::Units::millimetres),
26+ };
27+
28 return {
29 as_output_id(display_name),
30 mg::DisplayConfigurationCardId{0},
31@@ -66,7 +79,7 @@
32 mg::DisplayConfigurationMode{{fb_device->width, fb_device->height}, fb_device->fps}
33 },
34 0,
35- {0,0},
36+ display_size_mm,
37 connected,
38 connected,
39 {0,0},
40
41=== modified file 'tests/include/mir/test/doubles/mock_fb_hal_device.h'
42--- tests/include/mir/test/doubles/mock_fb_hal_device.h 2014-03-06 06:05:17 +0000
43+++ tests/include/mir/test/doubles/mock_fb_hal_device.h 2016-02-12 17:30:33 +0000
44@@ -35,7 +35,7 @@
45 {
46 public:
47 MockFBHalDevice(unsigned int const width, unsigned int const height,
48- int const pf, int const numfbs)
49+ int const pf, int const numfbs, float dpi_x, float dpi_y)
50 : framebuffer_device_t({
51 hw_device_t(),
52 0,
53@@ -43,8 +43,8 @@
54 height,
55 0,
56 pf,
57- 0.0f,
58- 0.0f,
59+ dpi_x,
60+ dpi_y,
61 0.0f,
62 0,
63 1,
64@@ -60,7 +60,7 @@
65 }
66
67 MockFBHalDevice()
68- : MockFBHalDevice(1,1,1,1)
69+ : MockFBHalDevice(1,1,1,1, 1.0f, 1.0f)
70 {
71 }
72
73
74=== modified file 'tests/unit-tests/graphics/android/test_fb_device.cpp'
75--- tests/unit-tests/graphics/android/test_fb_device.cpp 2016-02-02 20:22:57 +0000
76+++ tests/unit-tests/graphics/android/test_fb_device.cpp 2016-02-12 17:30:33 +0000
77@@ -40,18 +40,17 @@
78 namespace mga=mir::graphics::android;
79 namespace geom=mir::geometry;
80 namespace mt=mir::test;
81+using namespace testing;
82
83 struct FBDevice : public ::testing::Test
84 {
85 virtual void SetUp()
86 {
87- using namespace testing;
88-
89 fbnum = 4;
90 format = HAL_PIXEL_FORMAT_RGBA_8888;
91
92 fb_hal_mock = std::make_shared<NiceMock<mtd::MockFBHalDevice>>(
93- display_size.width.as_int(), display_size.height.as_int(), format, fbnum);
94+ display_size.width.as_int(), display_size.height.as_int(), format, fbnum, dpi_x, dpi_y);
95 mock_buffer = std::make_shared<NiceMock<mtd::MockBuffer>>();
96 native_buffer = std::make_shared<mtd::StubAndroidNativeBuffer>();
97 ON_CALL(*mock_buffer, native_buffer_handle())
98@@ -60,6 +59,8 @@
99 .WillByDefault(Return(mock_buffer));
100 }
101
102+ float dpi_x{160.0f};
103+ float dpi_y{150.0f};
104 unsigned int format, fbnum;
105 geom::Size display_size{413, 516};
106 std::shared_ptr<mtd::MockFBHalDevice> fb_hal_mock;
107@@ -92,7 +93,6 @@
108
109 TEST_F(FBDevice, commits_frame)
110 {
111- using namespace testing;
112 EXPECT_CALL(*fb_hal_mock, post_interface(fb_hal_mock.get(), native_buffer->handle()))
113 .Times(2)
114 .WillOnce(Return(-1))
115@@ -122,7 +122,6 @@
116
117 TEST_F(FBDevice, can_screen_on_off)
118 {
119- using namespace testing;
120 Sequence seq;
121 EXPECT_CALL(*fb_hal_mock, setSwapInterval_interface(fb_hal_mock.get(), 1))
122 .Times(1);
123@@ -148,13 +147,35 @@
124
125 TEST_F(FBDevice, bundle_from_fb)
126 {
127- using namespace testing;
128 mga::FbControl fb_control(fb_hal_mock);
129 auto attribs = fb_control.active_config_for(mga::DisplayName::primary);
130 EXPECT_EQ(display_size, attribs.modes[attribs.current_mode_index].size);
131 EXPECT_EQ(mir_pixel_format_abgr_8888, attribs.current_format);
132 }
133
134+//LP: #1517597
135+TEST_F(FBDevice, reports_dpi)
136+{
137+ float mm_per_inch = 25.4;
138+ geom::Size physical_size_mm = {
139+ display_size.width.as_int() / dpi_x * mm_per_inch ,
140+ display_size.height.as_int() / dpi_y * mm_per_inch };
141+
142+ mga::FbControl fb_control(fb_hal_mock);
143+ auto attribs = fb_control.active_config_for(mga::DisplayName::primary);
144+ EXPECT_EQ(physical_size_mm, attribs.physical_size_mm);
145+}
146+
147+TEST_F(FBDevice, reports_0_when_0_dpi)
148+{
149+ geom::Size physical_size_mm = { 0, 0 };
150+ fb_hal_mock = std::make_shared<NiceMock<mtd::MockFBHalDevice>>(
151+ display_size.width.as_int(), display_size.height.as_int(), format, fbnum, 0.0f, 0.0f);
152+ mga::FbControl fb_control(fb_hal_mock);
153+ auto attribs = fb_control.active_config_for(mga::DisplayName::primary);
154+ EXPECT_EQ(physical_size_mm, attribs.physical_size_mm);
155+}
156+
157 TEST_F(FBDevice, supports_primary_display)
158 {
159 mga::FbControl fb_control(fb_hal_mock);
160
161=== modified file 'tests/unit-tests/graphics/android/test_hwc_fb_device.cpp'
162--- tests/unit-tests/graphics/android/test_hwc_fb_device.cpp 2016-02-02 20:22:57 +0000
163+++ tests/unit-tests/graphics/android/test_hwc_fb_device.cpp 2016-02-12 17:30:33 +0000
164@@ -56,7 +56,7 @@
165 test_size = geom::Size{width, height};
166 int fbnum = 558;
167 mock_fb_device = std::make_shared<mtd::MockFBHalDevice>(
168- width, height, HAL_PIXEL_FORMAT_RGBA_8888, fbnum);
169+ width, height, HAL_PIXEL_FORMAT_RGBA_8888, fbnum, 11, 12);
170 mock_buffer = std::make_shared<NiceMock<mtd::MockBuffer>>();
171 mock_hwc_device_wrapper = std::make_shared<testing::NiceMock<mtd::MockHWCDeviceWrapper>>();
172
173
174=== modified file 'tests/unit-tests/graphics/android/test_output_builder.cpp'
175--- tests/unit-tests/graphics/android/test_output_builder.cpp 2016-01-29 08:18:22 +0000
176+++ tests/unit-tests/graphics/android/test_output_builder.cpp 2016-02-12 17:30:33 +0000
177@@ -192,7 +192,7 @@
178 .WillOnce(Throw(std::runtime_error("")));
179 EXPECT_CALL(*mock_resource_factory, create_fb_native_device())
180 .WillOnce(Return(std::make_shared<mtd::MockFBHalDevice>(
181- 0, 0, mir_pixel_format_abgr_8888, 0)));
182+ 0, 0, mir_pixel_format_abgr_8888, 0, 0.0, 0.0)));
183 EXPECT_CALL(mock_buffer_allocator, alloc_buffer_platform(_,_,_))
184 .Times(2);
185

Subscribers

People subscribed via source and target branches