Mir

Merge lp:~kdub/mir/client-buffer-recommendations into lp:mir

Proposed by Kevin DuBois
Status: Merged
Approved by: Kevin DuBois
Approved revision: no longer in the source branch.
Merged at revision: 3965
Proposed branch: lp:~kdub/mir/client-buffer-recommendations
Merge into: lp:mir
Diff against target: 386 lines (+124/-26)
16 files modified
src/include/client/mir/client_platform.h (+3/-0)
src/platforms/android/client/android_client_platform.cpp (+10/-0)
src/platforms/android/client/android_client_platform.h (+2/-0)
src/platforms/android/include/android_format_conversion-inl.h (+15/-0)
src/platforms/android/server/graphic_buffer_allocator.cpp (+2/-18)
src/platforms/eglstream-kms/client/client_platform.cpp (+10/-0)
src/platforms/eglstream-kms/client/client_platform.h (+2/-0)
src/platforms/mesa/client/client_platform.cpp (+14/-0)
src/platforms/mesa/client/client_platform.h (+2/-0)
tests/include/mir_test_framework/stub_client_platform_factory.h (+3/-0)
tests/mir_test_framework/stub_client_platform_factory.cpp (+10/-0)
tests/unit-tests/client/test_client_buffer_stream.cpp (+8/-0)
tests/unit-tests/client/test_mir_connection.cpp (+2/-1)
tests/unit-tests/client/test_mir_render_surface.cpp (+2/-0)
tests/unit-tests/platforms/android/client/test_android_client_platform.cpp (+18/-0)
tests/unit-tests/platforms/mesa/client/test_client_platform.cpp (+21/-7)
To merge this branch: bzr merge lp:~kdub/mir/client-buffer-recommendations
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Alan Griffiths Approve
Review via email: mp+315012@code.launchpad.net

Commit message

client: add platform-specific conversions for MirBufferUsage and MirPixelFormat to the client platform.

The current system says "i want a 'hardware' buffer", and the server selects something appropriate. The new system with gbm_buffer and android_buffer extensions, actually lets the user select the properties they want. This is more flexible, but we have to have some legacy code (mostly hardware BufferStreams) make a platform-specific conversion on the client side.

Description of the change

client: add platform-specific conversions for MirBufferUsage and MirPixelFormat to the client platform.

The current system says "i want a 'hardware' buffer", and the server selects something appropriate. The new system with gbm_buffer and android_buffer extensions, actually lets the user select the properties they want. This is more flexible, but we have to have some legacy code (mostly hardware BufferStreams) make a platform-specific conversion on the client side.

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

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

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

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

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

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

review: Approve (continuous-integration)
Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

+inline static uint32_t convert_to_android_usage(BufferUsage usage)

The "static" implies that this is intended to be C99 compatible, but it's in a C++ namespace, so I don't see why it is there.

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

LGTM

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

FAILED: Autolanding.
More details in the following jenkins job:
https://mir-jenkins.ubuntu.com/job/mir-autolanding/1004/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/3662/console
    None: https://mir-jenkins.ubuntu.com/job/generic-land-mp/1059/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/3741
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/3731
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/3731
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/3731
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/3689/console
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/3689/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3689
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/3689/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3689
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/3689/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3689
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/3689/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3689
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/3689/artifact/output/*zip*/output.zip

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

lp: #1613523 and lp: #1616312

Revision history for this message
Mir CI Bot (mir-ci-bot) :
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/include/client/mir/client_platform.h'
2--- src/include/client/mir/client_platform.h 2017-01-18 02:29:37 +0000
3+++ src/include/client/mir/client_platform.h 2017-01-19 17:21:43 +0000
4@@ -19,6 +19,7 @@
5 #define MIR_CLIENT_CLIENT_PLATFORM_H_
6
7 #include "mir/graphics/native_buffer.h"
8+#include "mir/geometry/size.h"
9 #include "mir_toolkit/client_types.h"
10 #include "mir_toolkit/mir_native_buffer.h"
11
12@@ -72,6 +73,8 @@
13 virtual std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() = 0;
14 virtual MirNativeBuffer* convert_native_buffer(graphics::NativeBuffer*) const = 0;
15 virtual MirPixelFormat get_egl_pixel_format(EGLDisplay, EGLConfig) const = 0;
16+ virtual uint32_t native_format_for(MirPixelFormat) const = 0;
17+ virtual uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const = 0;
18 };
19
20 }
21
22=== modified file 'src/platforms/android/client/android_client_platform.cpp'
23--- src/platforms/android/client/android_client_platform.cpp 2017-01-18 02:29:37 +0000
24+++ src/platforms/android/client/android_client_platform.cpp 2017-01-19 17:21:43 +0000
25@@ -290,3 +290,13 @@
26 return &fence_extension;
27 return nullptr;
28 }
29+
30+uint32_t mcla::AndroidClientPlatform::native_format_for(MirPixelFormat format) const
31+{
32+ return mga::to_android_format(format);
33+}
34+
35+uint32_t mcla::AndroidClientPlatform::native_flags_for(MirBufferUsage usage, mir::geometry::Size) const
36+{
37+ return mga::convert_to_android_usage(static_cast<mir::graphics::BufferUsage>(usage));
38+}
39
40=== modified file 'src/platforms/android/client/android_client_platform.h'
41--- src/platforms/android/client/android_client_platform.h 2017-01-18 02:29:37 +0000
42+++ src/platforms/android/client/android_client_platform.h 2017-01-19 17:21:43 +0000
43@@ -47,6 +47,8 @@
44 std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() override;
45 MirNativeBuffer* convert_native_buffer(graphics::NativeBuffer*) const override;
46 MirPixelFormat get_egl_pixel_format(EGLDisplay, EGLConfig) const override;
47+ uint32_t native_format_for(MirPixelFormat) const override;
48+ uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const override;
49
50 private:
51 ClientContext* const context;
52
53=== modified file 'src/platforms/android/include/android_format_conversion-inl.h'
54--- src/platforms/android/include/android_format_conversion-inl.h 2016-08-04 08:42:11 +0000
55+++ src/platforms/android/include/android_format_conversion-inl.h 2017-01-19 17:21:43 +0000
56@@ -19,9 +19,11 @@
57 #ifndef MIR_GRAPHICS_ANDROID_ANDROID_FORMAT_CONVERSION_INL_H_
58 #define MIR_GRAPHICS_ANDROID_ANDROID_FORMAT_CONVERSION_INL_H_
59
60+#include "mir/graphics/buffer_properties.h"
61 #include "mir_toolkit/common.h"
62 #include <cstddef> // to fix missing #includes in graphics.h
63 #include <system/graphics.h>
64+#include <hardware/gralloc.h>
65
66 namespace mir
67 {
68@@ -70,6 +72,19 @@
69 }
70 }
71
72+inline static uint32_t convert_to_android_usage(BufferUsage usage)
73+{
74+ switch (usage)
75+ {
76+ case BufferUsage::hardware:
77+ return (GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_RENDER);
78+ case BufferUsage::software:
79+ return (GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_TEXTURE);
80+ default:
81+ return -1;
82+ }
83+}
84+
85 }
86 }
87 }
88
89=== modified file 'src/platforms/android/server/graphic_buffer_allocator.cpp'
90--- src/platforms/android/server/graphic_buffer_allocator.cpp 2017-01-18 02:29:37 +0000
91+++ src/platforms/android/server/graphic_buffer_allocator.cpp 2017-01-19 17:21:43 +0000
92@@ -82,22 +82,6 @@
93 alloc_dev_ptr, cmdstream_sync_factory, quirks);
94 }
95
96-namespace
97-{
98-uint32_t convert_to_android_usage(mg::BufferUsage usage)
99-{
100- switch (usage)
101- {
102- case mg::BufferUsage::hardware:
103- return (GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_RENDER);
104- case mg::BufferUsage::software:
105- return (GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_HW_COMPOSER | GRALLOC_USAGE_HW_TEXTURE);
106- default:
107- return -1;
108- }
109-}
110-}
111-
112 std::shared_ptr<mg::Buffer> mga::GraphicBufferAllocator::alloc_buffer(
113 mg::BufferProperties const& properties)
114 {
115@@ -106,7 +90,7 @@
116 alloc_device->alloc_buffer(
117 properties.size,
118 mga::to_android_format(properties.format),
119- convert_to_android_usage(properties.usage)),
120+ mga::convert_to_android_usage(properties.usage)),
121 egl_extensions);
122 }
123
124@@ -142,7 +126,7 @@
125 alloc_device->alloc_buffer(
126 size,
127 mga::to_android_format(format),
128- convert_to_android_usage(mg::BufferUsage::software)),
129+ mga::convert_to_android_usage(mg::BufferUsage::software)),
130 egl_extensions);
131 }
132
133
134=== modified file 'src/platforms/eglstream-kms/client/client_platform.cpp'
135--- src/platforms/eglstream-kms/client/client_platform.cpp 2017-01-18 02:29:37 +0000
136+++ src/platforms/eglstream-kms/client/client_platform.cpp 2017-01-19 17:21:43 +0000
137@@ -85,3 +85,13 @@
138 {
139 return nullptr;
140 }
141+
142+uint32_t mcle::ClientPlatform::native_format_for(MirPixelFormat) const
143+{
144+ BOOST_THROW_EXCEPTION(std::runtime_error{"no buffer support"});
145+}
146+
147+uint32_t mcle::ClientPlatform::native_flags_for(MirBufferUsage, mir::geometry::Size) const
148+{
149+ BOOST_THROW_EXCEPTION(std::runtime_error{"no buffer support"});
150+}
151
152=== modified file 'src/platforms/eglstream-kms/client/client_platform.h'
153--- src/platforms/eglstream-kms/client/client_platform.h 2017-01-18 02:29:37 +0000
154+++ src/platforms/eglstream-kms/client/client_platform.h 2017-01-19 17:21:43 +0000
155@@ -42,6 +42,8 @@
156 std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() override;
157 MirNativeBuffer* convert_native_buffer(graphics::NativeBuffer*) const override;
158 MirPixelFormat get_egl_pixel_format(EGLDisplay, EGLConfig) const override;
159+ uint32_t native_format_for(MirPixelFormat) const override;
160+ uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const override;
161 };
162
163 }
164
165=== modified file 'src/platforms/mesa/client/client_platform.cpp'
166--- src/platforms/mesa/client/client_platform.cpp 2017-01-18 02:29:37 +0000
167+++ src/platforms/mesa/client/client_platform.cpp 2017-01-19 17:21:43 +0000
168@@ -33,6 +33,7 @@
169 #include <stdexcept>
170 #include <cstring>
171
172+namespace mgm=mir::graphics::mesa;
173 namespace mcl=mir::client;
174 namespace mclm=mir::client::mesa;
175 namespace geom=mir::geometry;
176@@ -289,3 +290,16 @@
177
178 return nullptr;
179 }
180+
181+uint32_t mclm::ClientPlatform::native_format_for(MirPixelFormat format) const
182+{
183+ return mgm::mir_format_to_gbm_format(format);
184+}
185+
186+uint32_t mclm::ClientPlatform::native_flags_for(MirBufferUsage, mir::geometry::Size size) const
187+{
188+ uint32_t bo_flags{GBM_BO_USE_RENDERING};
189+ if (size.width.as_uint32_t() >= 800 && size.height.as_uint32_t() >= 600)
190+ bo_flags |= GBM_BO_USE_SCANOUT;
191+ return bo_flags;
192+}
193
194=== modified file 'src/platforms/mesa/client/client_platform.h'
195--- src/platforms/mesa/client/client_platform.h 2017-01-18 02:29:37 +0000
196+++ src/platforms/mesa/client/client_platform.h 2017-01-19 17:21:43 +0000
197@@ -54,6 +54,8 @@
198 MirNativeBuffer* convert_native_buffer(graphics::NativeBuffer*) const override;
199 MirPixelFormat get_egl_pixel_format(EGLDisplay, EGLConfig) const override;
200 void set_gbm_device(gbm_device*);
201+ uint32_t native_format_for(MirPixelFormat) const override;
202+ uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const override;
203
204 private:
205 ClientContext* const context;
206
207=== modified file 'tests/include/mir_test_framework/stub_client_platform_factory.h'
208--- tests/include/mir_test_framework/stub_client_platform_factory.h 2017-01-18 02:29:37 +0000
209+++ tests/include/mir_test_framework/stub_client_platform_factory.h 2017-01-19 17:21:43 +0000
210@@ -49,6 +49,9 @@
211 std::shared_ptr<EGLNativeDisplayType> create_egl_native_display() override;
212 MirNativeBuffer* convert_native_buffer(mir::graphics::NativeBuffer* buf) const override;
213 MirPixelFormat get_egl_pixel_format(EGLDisplay, EGLConfig) const override;
214+ uint32_t native_format_for(MirPixelFormat) const override;
215+ uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const override;
216+
217 mir::client::ClientContext* const context;
218 MirBufferPackage mutable native_buffer;
219
220
221=== modified file 'tests/mir_test_framework/stub_client_platform_factory.cpp'
222--- tests/mir_test_framework/stub_client_platform_factory.cpp 2017-01-18 02:29:37 +0000
223+++ tests/mir_test_framework/stub_client_platform_factory.cpp 2017-01-19 17:21:43 +0000
224@@ -181,6 +181,16 @@
225 return nullptr;
226 }
227
228+uint32_t mtf::StubClientPlatform::native_format_for(MirPixelFormat) const
229+{
230+ return 0u;
231+}
232+
233+uint32_t mtf::StubClientPlatform::native_flags_for(MirBufferUsage, mir::geometry::Size) const
234+{
235+ return 0u;
236+}
237+
238 std::shared_ptr<mcl::ClientPlatform>
239 mtf::StubClientPlatformFactory::create_client_platform(mcl::ClientContext* context)
240 {
241
242=== modified file 'tests/unit-tests/client/test_client_buffer_stream.cpp'
243--- tests/unit-tests/client/test_client_buffer_stream.cpp 2017-01-18 02:29:37 +0000
244+++ tests/unit-tests/client/test_client_buffer_stream.cpp 2017-01-19 17:21:43 +0000
245@@ -103,6 +103,14 @@
246 {
247 return nullptr;
248 }
249+ uint32_t native_format_for(MirPixelFormat) const override
250+ {
251+ return 0u;
252+ }
253+ uint32_t native_flags_for(MirBufferUsage, mir::geometry::Size) const override
254+ {
255+ return 0u;
256+ }
257
258 static EGLNativeWindowType egl_native_window;
259 std::shared_ptr<mcl::ClientBufferFactory> const buffer_factory;
260
261=== modified file 'tests/unit-tests/client/test_mir_connection.cpp'
262--- tests/unit-tests/client/test_mir_connection.cpp 2017-01-18 02:29:37 +0000
263+++ tests/unit-tests/client/test_mir_connection.cpp 2017-01-19 17:21:43 +0000
264@@ -211,7 +211,8 @@
265 MOCK_METHOD0(create_egl_native_display, std::shared_ptr<EGLNativeDisplayType>());
266 MOCK_CONST_METHOD2(get_egl_pixel_format, MirPixelFormat(EGLDisplay, EGLConfig));
267 MOCK_METHOD2(request_interface, void*(char const*, int));
268-
269+ MOCK_CONST_METHOD1(native_format_for, uint32_t(MirPixelFormat));
270+ MOCK_CONST_METHOD2(native_flags_for, uint32_t(MirBufferUsage, mir::geometry::Size));
271 mcl::ClientContext* client_context = nullptr;
272 };
273
274
275=== modified file 'tests/unit-tests/client/test_mir_render_surface.cpp'
276--- tests/unit-tests/client/test_mir_render_surface.cpp 2017-01-18 02:29:37 +0000
277+++ tests/unit-tests/client/test_mir_render_surface.cpp 2017-01-19 17:21:43 +0000
278@@ -131,6 +131,8 @@
279 MOCK_METHOD0(create_egl_native_display, std::shared_ptr<EGLNativeDisplayType>());
280 MOCK_CONST_METHOD2(get_egl_pixel_format, MirPixelFormat(EGLDisplay, EGLConfig));
281 MOCK_METHOD2(request_interface, void*(char const*, int));
282+ MOCK_CONST_METHOD1(native_format_for, uint32_t(MirPixelFormat));
283+ MOCK_CONST_METHOD2(native_flags_for, uint32_t(MirBufferUsage, mir::geometry::Size));
284
285 mcl::ClientContext* client_context = nullptr;
286 };
287
288=== modified file 'tests/unit-tests/platforms/android/client/test_android_client_platform.cpp'
289--- tests/unit-tests/platforms/android/client/test_android_client_platform.cpp 2017-01-18 02:29:37 +0000
290+++ tests/unit-tests/platforms/android/client/test_android_client_platform.cpp 2017-01-19 17:21:43 +0000
291@@ -117,6 +117,24 @@
292 EXPECT_EQ(mir_pixel_format_invalid, platform->get_egl_pixel_format(d, c));
293 }
294
295+TEST_F(AndroidClientPlatformTest, translates_format_to_hal_pixel_formats)
296+{
297+ EXPECT_THAT(platform->native_format_for(mir_pixel_format_abgr_8888), Eq(HAL_PIXEL_FORMAT_RGBA_8888));
298+ EXPECT_THAT(platform->native_format_for(mir_pixel_format_xbgr_8888), Eq(HAL_PIXEL_FORMAT_RGBX_8888));
299+}
300+
301+TEST_F(AndroidClientPlatformTest, translates_usage_to_gralloc_bits)
302+{
303+ auto hw_usage = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_RENDER;
304+ auto sw_usage =
305+ GRALLOC_USAGE_SW_WRITE_OFTEN |
306+ GRALLOC_USAGE_SW_READ_OFTEN |
307+ GRALLOC_USAGE_HW_COMPOSER |
308+ GRALLOC_USAGE_HW_TEXTURE;
309+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_software, {}), Eq(sw_usage));
310+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_hardware, {}), Eq(hw_usage));
311+}
312+
313 //TODO: platform helper uses anon namespace in header
314 struct ClientExtensions : Test
315 {
316
317=== modified file 'tests/unit-tests/platforms/mesa/client/test_client_platform.cpp'
318--- tests/unit-tests/platforms/mesa/client/test_client_platform.cpp 2017-01-18 02:29:37 +0000
319+++ tests/unit-tests/platforms/mesa/client/test_client_platform.cpp 2017-01-19 17:21:43 +0000
320@@ -45,6 +45,8 @@
321 namespace mcl = mir::client;
322 namespace mclm = mir::client::mesa;
323 namespace mtf = mir_test_framework;
324+namespace geom = mir::geometry;
325+using namespace testing;
326
327 namespace
328 {
329@@ -109,8 +111,6 @@
330
331 TEST_F(MesaClientPlatformTest, handles_set_gbm_device_platform_operation)
332 {
333- using namespace testing;
334-
335 int const success{0};
336 auto const gbm_dev_dummy = reinterpret_cast<gbm_device*>(this);
337
338@@ -132,8 +132,6 @@
339
340 TEST_F(MesaClientPlatformTest, appends_gbm_device_to_platform_package)
341 {
342- using namespace testing;
343-
344 MirPlatformPackage pkg;
345 platform->populate(pkg);
346 int const previous_data_count{pkg.data_items};
347@@ -160,8 +158,6 @@
348
349 TEST_F(MesaClientPlatformTest, returns_gbm_compatible_pixel_formats_only)
350 {
351- using namespace testing;
352-
353 auto const d = reinterpret_cast<EGLDisplay>(0x1234);
354 auto const c = reinterpret_cast<EGLConfig>(0x5678);
355
356@@ -197,7 +193,6 @@
357
358 TEST_F(MesaClientPlatformTest, can_allocate_buffer)
359 {
360- using namespace testing;
361 using namespace std::literals::chrono_literals;
362
363 mtd::StubConnectionConfiguration conf(platform);
364@@ -219,3 +214,22 @@
365 [] (::MirBuffer*, void*) {}, nullptr);
366 EXPECT_THAT(conf.channel->channel_call_count, Eq(call_count + 1));
367 }
368+
369+TEST_F(MesaClientPlatformTest, converts_gbm_format_correctly)
370+{
371+ EXPECT_THAT(platform->native_format_for(mir_pixel_format_argb_8888), Eq(GBM_FORMAT_ARGB8888));
372+ EXPECT_THAT(platform->native_format_for(mir_pixel_format_xrgb_8888), Eq(GBM_FORMAT_XRGB8888));
373+}
374+
375+TEST_F(MesaClientPlatformTest, converts_gbm_flags_correctly)
376+{
377+ auto render_flag = GBM_BO_USE_RENDERING;
378+ auto render_and_scanout_flag = GBM_BO_USE_RENDERING | GBM_BO_USE_SCANOUT;
379+
380+ geom::Size large_size {800, 600};
381+ geom::Size small_size {400, 100};
382+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_software, large_size), Eq(render_and_scanout_flag));
383+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_software, small_size), Eq(render_flag));
384+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_hardware, large_size), Eq(render_and_scanout_flag));
385+ EXPECT_THAT(platform->native_flags_for(mir_buffer_usage_hardware, small_size), Eq(render_flag));
386+}

Subscribers

People subscribed via source and target branches