Mir

Merge lp:mir/0.13 into lp:mir/ubuntu

Proposed by Alberto Aguirre on 2015-06-02
Status: Merged
Approved by: Alberto Aguirre on 2015-06-05
Approved revision: 2550
Merged at revision: 1231
Proposed branch: lp:mir/0.13
Merge into: lp:mir/ubuntu
Diff against target: 1206 lines (+314/-79)
26 files modified
CMakeLists.txt (+1/-1)
debian/changelog (+17/-0)
debian/control (+19/-19)
debian/create_postinst_prerm_scripts.sh (+1/-1)
debian/install_ld_so_conf.sh (+1/-1)
debian/rules (+5/-1)
include/client/mir_toolkit/version.h (+1/-1)
src/platforms/android/server/android_alloc_adaptor.cpp (+6/-3)
src/platforms/android/server/android_alloc_adaptor.h (+4/-1)
src/platforms/android/server/android_buffer_allocator.cpp (+2/-2)
src/platforms/android/server/android_graphic_buffer_allocator.h (+2/-1)
src/platforms/android/server/device_quirks.cpp (+44/-6)
src/platforms/android/server/device_quirks.h (+9/-0)
src/platforms/android/server/hal_component_factory.cpp (+3/-2)
src/platforms/android/server/hal_component_factory.h (+3/-3)
src/platforms/android/server/platform.cpp (+15/-9)
src/platforms/android/server/platform.h (+3/-2)
tests/integration-tests/graphics/android/test_buffer_integration.cpp (+4/-5)
tests/integration-tests/graphics/android/test_client_render.cpp (+3/-1)
tests/integration-tests/graphics/android/test_display_integration.cpp (+4/-2)
tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp (+3/-1)
tests/unit-tests/graphics/android/test_android_buffer_allocator.cpp (+4/-5)
tests/unit-tests/graphics/android/test_device_detection.cpp (+127/-0)
tests/unit-tests/graphics/android/test_output_builder.cpp (+15/-6)
tests/unit-tests/graphics/android/test_platform.cpp (+9/-5)
tests/unit-tests/test_shared_library_prober.cpp (+9/-1)
To merge this branch: bzr merge lp:mir/0.13
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing on 2015-06-03
Mir development team 2015-06-02 Pending
Review via email: mp+260902@code.launchpad.net

Commit Message

Mir 0.13.2 release

Description of the Change

Mir 0.13.2 release

To post a comment you must log in.
lp:mir/0.13 updated on 2015-06-05
2550. By Robert Bruce Park on 2015-06-05

Resync infinity's manual distro upload to trunk.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2015-05-20 20:42:35 +0000
3+++ CMakeLists.txt 2015-06-05 17:48:37 +0000
4@@ -28,7 +28,7 @@
5
6 set(MIR_VERSION_MAJOR 0)
7 set(MIR_VERSION_MINOR 13) # This should change at least with every MIRSERVER_ABI
8-set(MIR_VERSION_PATCH 1)
9+set(MIR_VERSION_PATCH 2)
10
11 add_definitions(-DMIR_VERSION_MAJOR=${MIR_VERSION_MAJOR})
12 add_definitions(-DMIR_VERSION_MINOR=${MIR_VERSION_MINOR})
13
14=== modified file 'debian/changelog'
15--- debian/changelog 2015-05-20 21:20:15 +0000
16+++ debian/changelog 2015-06-05 17:48:37 +0000
17@@ -1,3 +1,20 @@
18+mir (0.13.2) UNRELEASED; urgency=medium
19+
20+ * New upstream release 0.13.2 (https://launchpad.net/mir/+milestone/0.13.2)
21+ - Bug fixes:
22+ . Wrong client API version (LP: #1461312)
23+ . Add quirk to force buffer width alignment on some devices (LP: #1461314)
24+
25+ -- Alberto Aguirre <alberto.aguirre@canonical.com> Tue, 02 Jun 2015 18:13:21 -0500
26+
27+mir (0.13.1+15.10.20150520.1-0ubuntu1) wily; urgency=medium
28+
29+ * Bump upstream version number to add test binaries to orig tarball.
30+ * Do minimal porting required to prepare for building on ppc/ppc64el.
31+ * Disable testsuite on powerpc until big-endian porting is complete.
32+
33+ -- Adam Conrad <adconrad@ubuntu.com> Wed, 03 Jun 2015 16:27:46 -0600
34+
35 mir (0.13.1+15.04.20150520-0ubuntu1) vivid; urgency=medium
36
37 [ Cemil Azizoglu ]
38
39=== modified file 'debian/control'
40--- debian/control 2015-04-30 11:36:36 +0000
41+++ debian/control 2015-06-05 17:48:37 +0000
42@@ -38,7 +38,7 @@
43 libudev-dev,
44 libgtest-dev,
45 google-mock (>= 1.6.0+svn437),
46- valgrind [!arm64],
47+ valgrind [!arm64 !powerpc !ppc64el],
48 libglib2.0-dev,
49 libfreetype6-dev,
50 abi-compliance-checker,
51@@ -50,7 +50,7 @@
52
53 Package: libmirprotobuf0
54 Section: libs
55-Architecture: i386 amd64 armhf arm64
56+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
57 Multi-Arch: same
58 Pre-Depends: ${misc:Pre-Depends}
59 Depends: ${misc:Depends},
60@@ -66,7 +66,7 @@
61 # ala pkg-xorg's xviddriver:Provides and ABI detection.
62 Package: libmirserver31
63 Section: libs
64-Architecture: i386 amd64 armhf arm64
65+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
66 Multi-Arch: same
67 Pre-Depends: ${misc:Pre-Depends}
68 Depends: ${misc:Depends},
69@@ -79,7 +79,7 @@
70
71 Package: libmirplatform7
72 Section: libs
73-Architecture: i386 amd64 armhf arm64
74+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
75 Multi-Arch: same
76 Pre-Depends: ${misc:Pre-Depends}
77 Depends: ${misc:Depends},
78@@ -93,7 +93,7 @@
79
80 Package: libmircommon-dev
81 Section: libdevel
82-Architecture: i386 amd64 armhf arm64
83+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
84 Multi-Arch: same
85 Pre-Depends: ${misc:Pre-Depends}
86 Depends: libmircommon4 (= ${binary:Version}),
87@@ -110,7 +110,7 @@
88
89 Package: libmirplatform-dev
90 Section: libdevel
91-Architecture: i386 amd64 armhf arm64
92+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
93 Multi-Arch: same
94 Pre-Depends: ${misc:Pre-Depends}
95 Depends: libmirplatform7 (= ${binary:Version}),
96@@ -127,7 +127,7 @@
97
98 Package: libmirserver-dev
99 Section: libdevel
100-Architecture: i386 amd64 armhf arm64
101+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
102 Multi-Arch: same
103 Pre-Depends: ${misc:Pre-Depends}
104 Depends: libmirserver31 (= ${binary:Version}),
105@@ -143,7 +143,7 @@
106
107 Package: libmirclient8
108 Section: libs
109-Architecture: i386 amd64 armhf arm64
110+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
111 Multi-Arch: same
112 Pre-Depends: ${misc:Pre-Depends}
113 Depends: ${misc:Depends},
114@@ -156,7 +156,7 @@
115
116 Package: libmirclient-dev
117 Section: libdevel
118-Architecture: i386 amd64 armhf arm64
119+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
120 Multi-Arch: same
121 Pre-Depends: ${misc:Pre-Depends}
122 Depends: libmirclient8 (= ${binary:Version}),
123@@ -171,7 +171,7 @@
124
125 Package: libmirclient-debug-extension1
126 Section: libs
127-Architecture: i386 amd64 armhf arm64
128+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
129 Multi-Arch: same
130 Pre-Depends: ${misc:Pre-Depends}
131 Depends: ${misc:Depends},
132@@ -192,7 +192,7 @@
133
134 Package: libmirclient-debug-extension-dev
135 Section: libdevel
136-Architecture: i386 amd64 armhf arm64
137+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
138 Multi-Arch: same
139 Pre-Depends: ${misc:Pre-Depends}
140 Depends: libmirclient-debug-extension1 (= ${binary:Version}),
141@@ -216,7 +216,7 @@
142 the debug extensions.
143
144 Package: mir-demos
145-Architecture: i386 amd64 armhf arm64
146+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
147 Depends: ${misc:Depends},
148 ${shlibs:Depends},
149 Recommends: fonts-liberation
150@@ -227,7 +227,7 @@
151 Contains demo applications (with source) that use the Mir display server
152
153 Package: mir-utils
154-Architecture: i386 amd64 armhf arm64
155+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
156 Depends: ${misc:Depends},
157 ${shlibs:Depends},
158 Description: Display server for Ubuntu - utility programs
159@@ -244,7 +244,7 @@
160 This package installs the mir API documentation.
161
162 Package: mir-test-tools
163-Architecture: i386 amd64 armhf arm64
164+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
165 Multi-Arch: same
166 Pre-Depends: ${misc:Pre-Depends}
167 Depends: ${misc:Depends},
168@@ -258,7 +258,7 @@
169
170 Package: libmircommon4
171 Section: libs
172-Architecture: i386 amd64 armhf arm64
173+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
174 Multi-Arch: same
175 Pre-Depends: ${misc:Pre-Depends}
176 Depends: ${misc:Depends},
177@@ -272,7 +272,7 @@
178 # Longer-term these drivers should move out-of-tree
179 Package: mir-platform-graphics-mesa2
180 Section: libs
181-Architecture: i386 amd64 armhf arm64
182+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
183 Multi-Arch: same
184 Pre-Depends: ${misc:Pre-Depends}
185 Depends: ${misc:Depends},
186@@ -300,7 +300,7 @@
187
188 Package: mir-client-platform-mesa2
189 Section: libs
190-Architecture: i386 amd64 armhf arm64
191+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
192 Multi-Arch: same
193 Pre-Depends: ${misc:Pre-Depends}
194 Depends: ${misc:Depends},
195@@ -314,7 +314,7 @@
196
197 Package: mir-client-platform-mesa-dev
198 Section: libdevel
199-Architecture: i386 amd64 armhf arm64
200+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
201 Multi-Arch: same
202 Pre-Depends: ${misc:Pre-Depends}
203 Depends: libmircommon-dev,
204@@ -342,7 +342,7 @@
205
206 Package: mir-graphics-drivers-desktop
207 Section: libs
208-Architecture: i386 amd64 armhf arm64
209+Architecture: i386 amd64 armhf arm64 powerpc ppc64el
210 Multi-Arch: same
211 Pre-Depends: ${misc:Pre-Depends}
212 Depends: ${misc:Depends},
213
214=== modified file 'debian/create_postinst_prerm_scripts.sh'
215--- debian/create_postinst_prerm_scripts.sh 2015-01-21 07:34:50 +0000
216+++ debian/create_postinst_prerm_scripts.sh 2015-06-05 17:48:37 +0000
217@@ -8,7 +8,7 @@
218
219 mir_platform_types="${PLATFORM_DRIVER}"
220 case $deb_host_arch in
221- arm64)
222+ arm64|powerpc|ppc64el)
223 mir_platforms="mesa"
224 ;;
225 *)
226
227=== modified file 'debian/install_ld_so_conf.sh'
228--- debian/install_ld_so_conf.sh 2015-01-21 07:34:50 +0000
229+++ debian/install_ld_so_conf.sh 2015-06-05 17:48:37 +0000
230@@ -7,7 +7,7 @@
231
232 mir_platform_types="${PLATFORM_DRIVER} ${CLIENT_DRIVER}"
233 case $DEB_HOST_ARCH in
234- arm64)
235+ arm64|powerpc|ppc64el)
236 mir_platforms="mesa"
237 ;;
238 *)
239
240=== modified file 'debian/rules'
241--- debian/rules 2015-03-31 02:35:42 +0000
242+++ debian/rules 2015-06-05 17:48:37 +0000
243@@ -19,7 +19,11 @@
244 # Enable verbose debugging output from the testsuite
245 export MIR_SERVER_LOGGING = on
246 override_dh_auto_test:
247+ifneq ($(DEB_HOST_ARCH),powerpc)
248 GTEST_OUTPUT=xml:./ dh_auto_test --max-parallel=1 -- ARGS="-V"
249+else
250+ echo "Testsuite disabled on powerpc due to lack of big-endian support."
251+endif
252
253 COMMON_CONFIGURE_OPTIONS = \
254 -DCMAKE_INSTALL_LIBEXECDIR="lib/$(DEB_HOST_MULTIARCH)/mir"
255@@ -32,7 +36,7 @@
256 -DMIR_RUN_INTEGRATION_TESTS=OFF \
257 -DMIR_PLATFORM=android\;mesa
258 else
259-ifeq ($(DEB_HOST_ARCH),arm64)
260+ifneq ($(filter arm64 powerpc ppc64el,$(DEB_HOST_ARCH)),)
261 dh_auto_configure -- \
262 $(COMMON_CONFIGURE_OPTIONS) \
263 -DMIR_PLATFORM=mesa
264
265=== modified file 'include/client/mir_toolkit/version.h'
266--- include/client/mir_toolkit/version.h 2014-12-29 03:44:41 +0000
267+++ include/client/mir_toolkit/version.h 2015-06-05 17:48:37 +0000
268@@ -33,7 +33,7 @@
269 *
270 * See also: http://semver.org/
271 */
272-#define MIR_CLIENT_MAJOR_VERSION (1)
273+#define MIR_CLIENT_MAJOR_VERSION (2)
274
275 /**
276 * MIR_CLIENT_MINOR_VERSION
277
278=== modified file 'src/platforms/android/server/android_alloc_adaptor.cpp'
279--- src/platforms/android/server/android_alloc_adaptor.cpp 2015-01-22 09:00:14 +0000
280+++ src/platforms/android/server/android_alloc_adaptor.cpp 2015-06-05 17:48:37 +0000
281@@ -21,6 +21,7 @@
282 #include "mir/graphics/android/sync_fence.h"
283 #include "android_alloc_adaptor.h"
284 #include "android_format_conversion-inl.h"
285+#include "device_quirks.h"
286
287 #include <boost/throw_exception.hpp>
288 #include <stdexcept>
289@@ -46,8 +47,10 @@
290 };
291 }
292
293-mga::AndroidAllocAdaptor::AndroidAllocAdaptor(const std::shared_ptr<struct alloc_device_t>& alloc_device)
294- : alloc_dev(alloc_device)
295+mga::AndroidAllocAdaptor::AndroidAllocAdaptor(std::shared_ptr<struct alloc_device_t> const& alloc_device,
296+ std::shared_ptr<DeviceQuirks> const& quirks)
297+ : alloc_dev(alloc_device),
298+ quirks(quirks)
299 {
300 }
301
302@@ -60,7 +63,7 @@
303 auto width = static_cast<int>(size.width.as_uint32_t());
304 auto height = static_cast<int>(size.height.as_uint32_t());
305 auto usage_flag = convert_to_android_usage(usage);
306- auto ret = alloc_dev->alloc(alloc_dev.get(), width, height,
307+ auto ret = alloc_dev->alloc(alloc_dev.get(), quirks->aligned_width(width), height,
308 format, usage_flag, &buf_handle, &stride);
309
310 if (( ret ) || (buf_handle == NULL) || (stride == 0))
311
312=== modified file 'src/platforms/android/server/android_alloc_adaptor.h'
313--- src/platforms/android/server/android_alloc_adaptor.h 2015-01-22 09:00:14 +0000
314+++ src/platforms/android/server/android_alloc_adaptor.h 2015-06-05 17:48:37 +0000
315@@ -30,11 +30,13 @@
316 {
317 namespace android
318 {
319+class DeviceQuirks;
320
321 class AndroidAllocAdaptor : public GraphicAllocAdaptor
322 {
323 public:
324- explicit AndroidAllocAdaptor(const std::shared_ptr<struct alloc_device_t>& alloc_device);
325+ explicit AndroidAllocAdaptor(std::shared_ptr<struct alloc_device_t> const& alloc_device,
326+ std::shared_ptr<DeviceQuirks> const& quirks);
327 std::shared_ptr<NativeBuffer> alloc_buffer(geometry::Size,
328 MirPixelFormat, BufferUsage usage);
329
330@@ -42,6 +44,7 @@
331
332 private:
333 std::shared_ptr<struct alloc_device_t> alloc_dev;
334+ std::shared_ptr<DeviceQuirks> const quirks;
335 int convert_to_android_usage(BufferUsage usage);
336 };
337
338
339=== modified file 'src/platforms/android/server/android_buffer_allocator.cpp'
340--- src/platforms/android/server/android_buffer_allocator.cpp 2015-04-09 17:11:40 +0000
341+++ src/platforms/android/server/android_buffer_allocator.cpp 2015-06-05 17:48:37 +0000
342@@ -46,7 +46,7 @@
343 };
344 }
345
346-mga::AndroidGraphicBufferAllocator::AndroidGraphicBufferAllocator()
347+mga::AndroidGraphicBufferAllocator::AndroidGraphicBufferAllocator(std::shared_ptr<DeviceQuirks> const& quirks)
348 : egl_extensions(std::make_shared<mg::EGLExtensions>())
349 {
350 int err;
351@@ -65,7 +65,7 @@
352
353 AllocDevDeleter del;
354 std::shared_ptr<struct alloc_device_t> alloc_dev_ptr(alloc_dev, del);
355- alloc_device = std::shared_ptr<mga::GraphicAllocAdaptor>(new AndroidAllocAdaptor(alloc_dev_ptr));
356+ alloc_device = std::shared_ptr<mga::GraphicAllocAdaptor>(new AndroidAllocAdaptor(alloc_dev_ptr, quirks));
357 }
358
359 std::shared_ptr<mg::Buffer> mga::AndroidGraphicBufferAllocator::alloc_buffer(
360
361=== modified file 'src/platforms/android/server/android_graphic_buffer_allocator.h'
362--- src/platforms/android/server/android_graphic_buffer_allocator.h 2015-04-10 17:59:27 +0000
363+++ src/platforms/android/server/android_graphic_buffer_allocator.h 2015-06-05 17:48:37 +0000
364@@ -38,11 +38,12 @@
365 {
366
367 class GraphicAllocAdaptor;
368+class DeviceQuirks;
369
370 class AndroidGraphicBufferAllocator: public GraphicBufferAllocator, public graphics::GraphicBufferAllocator
371 {
372 public:
373- AndroidGraphicBufferAllocator();
374+ AndroidGraphicBufferAllocator(std::shared_ptr<DeviceQuirks> const& quirks);
375
376 std::shared_ptr<graphics::Buffer> alloc_buffer(
377 graphics::BufferProperties const& buffer_properties) override;
378
379=== modified file 'src/platforms/android/server/device_quirks.cpp'
380--- src/platforms/android/server/device_quirks.cpp 2015-01-22 09:00:14 +0000
381+++ src/platforms/android/server/device_quirks.cpp 2015-06-05 17:48:37 +0000
382@@ -18,7 +18,11 @@
383
384 #include "device_quirks.h"
385
386+#include <mir/options/option.h>
387+#include <boost/program_options/options_description.hpp>
388+
389 namespace mga=mir::graphics::android;
390+namespace mo = mir::options;
391
392 int mga::PropertiesOps::property_get(
393 char const* key,
394@@ -30,6 +34,10 @@
395
396 namespace
397 {
398+char const* const num_framebuffers_opt = "enable-num-framebuffers-quirk";
399+char const* const single_gralloc_instance_opt = "enable-single-gralloc-instance-quirk";
400+char const* const width_alignment_opt = "enable-width-alignment-quirk";
401+
402 std::string determine_device_name(mga::PropertiesWrapper const& properties)
403 {
404 char const default_value[] = "";
405@@ -39,24 +47,33 @@
406 return std::string{value};
407 }
408
409-unsigned int num_framebuffers_for(std::string const& device_name)
410+unsigned int num_framebuffers_for(std::string const& device_name, bool quirk_enabled)
411 {
412- if (device_name == std::string{"mx3"})
413+ if (quirk_enabled && device_name == std::string{"mx3"})
414 return 3;
415 else
416 return 2;
417 }
418
419-unsigned int gralloc_reopenable_after_close_for(std::string const& device_name)
420+unsigned int gralloc_reopenable_after_close_for(std::string const& device_name, bool quirk_enabled)
421 {
422- return device_name != std::string{"krillin"};
423+ return !(quirk_enabled && device_name == std::string{"krillin"});
424 }
425 }
426
427 mga::DeviceQuirks::DeviceQuirks(PropertiesWrapper const& properties)
428 : device_name(determine_device_name(properties)),
429- num_framebuffers_(num_framebuffers_for(device_name)),
430- gralloc_reopenable_after_close_(gralloc_reopenable_after_close_for(device_name))
431+ num_framebuffers_(num_framebuffers_for(device_name, true)),
432+ gralloc_reopenable_after_close_(gralloc_reopenable_after_close_for(device_name, true)),
433+ enable_width_alignment_quirk{true}
434+{
435+}
436+
437+mga::DeviceQuirks::DeviceQuirks(PropertiesWrapper const& properties, mo::Option const& options)
438+ : device_name(determine_device_name(properties)),
439+ num_framebuffers_(num_framebuffers_for(device_name, options.get(num_framebuffers_opt, true))),
440+ gralloc_reopenable_after_close_(gralloc_reopenable_after_close_for(device_name, options.get(single_gralloc_instance_opt, true))),
441+ enable_width_alignment_quirk(options.get(width_alignment_opt, true))
442 {
443 }
444
445@@ -69,3 +86,24 @@
446 {
447 return gralloc_reopenable_after_close_;
448 }
449+
450+int mga::DeviceQuirks::aligned_width(int width) const
451+{
452+ if (enable_width_alignment_quirk && width == 720 && device_name == std::string{"vegetahd"})
453+ return 736;
454+ return width;
455+}
456+
457+void mga::DeviceQuirks::add_options(boost::program_options::options_description& config)
458+{
459+ config.add_options()
460+ (num_framebuffers_opt,
461+ boost::program_options::value<bool>()->default_value(true),
462+ "[platform-specific] Enable allocating 3 framebuffers (MX3 quirk) [{true,false}]")
463+ (single_gralloc_instance_opt,
464+ boost::program_options::value<bool>()->default_value(true),
465+ "[platform-specific] Allocate a single gralloc instance (krillin quirk) [{true,false}]")
466+ (width_alignment_opt,
467+ boost::program_options::value<bool>()->default_value(true),
468+ "[platform-specific] Enable width alignment (vegetahd quirk) [{true,false}]");
469+}
470
471=== modified file 'src/platforms/android/server/device_quirks.h'
472--- src/platforms/android/server/device_quirks.h 2015-01-22 09:00:14 +0000
473+++ src/platforms/android/server/device_quirks.h 2015-06-05 17:48:37 +0000
474@@ -22,8 +22,11 @@
475 #include <hybris/properties/properties.h>
476 #include <string>
477
478+namespace boost{ namespace program_options {class options_description;}}
479+
480 namespace mir
481 {
482+namespace options{ class Option; }
483 namespace graphics
484 {
485 namespace android
486@@ -55,15 +58,21 @@
487 {
488 public:
489 DeviceQuirks(PropertiesWrapper const& properties);
490+ DeviceQuirks(PropertiesWrapper const& properties, mir::options::Option const& options);
491
492 unsigned int num_framebuffers() const;
493 bool gralloc_reopenable_after_close() const;
494+ int aligned_width(int width) const;
495+
496+ static void add_options(boost::program_options::options_description& config);
497+
498 private:
499 DeviceQuirks(DeviceQuirks const&) = delete;
500 DeviceQuirks & operator=(DeviceQuirks const&) = delete;
501 std::string const device_name;
502 unsigned int const num_framebuffers_;
503 bool const gralloc_reopenable_after_close_;
504+ bool const enable_width_alignment_quirk;
505 };
506 }
507 }
508
509=== modified file 'src/platforms/android/server/hal_component_factory.cpp'
510--- src/platforms/android/server/hal_component_factory.cpp 2015-04-27 20:49:39 +0000
511+++ src/platforms/android/server/hal_component_factory.cpp 2015-06-05 17:48:37 +0000
512@@ -40,12 +40,13 @@
513 mga::HalComponentFactory::HalComponentFactory(
514 std::shared_ptr<mga::GraphicBufferAllocator> const& buffer_allocator,
515 std::shared_ptr<mga::DisplayResourceFactory> const& res_factory,
516- std::shared_ptr<HwcReport> const& hwc_report)
517+ std::shared_ptr<HwcReport> const& hwc_report,
518+ std::shared_ptr<mga::DeviceQuirks> const& quirks)
519 : buffer_allocator(buffer_allocator),
520 res_factory(res_factory),
521 hwc_report(hwc_report),
522 force_backup_display(false),
523- num_framebuffers{quirks.num_framebuffers()}
524+ num_framebuffers{quirks->num_framebuffers()}
525 {
526 try
527 {
528
529=== modified file 'src/platforms/android/server/hal_component_factory.h'
530--- src/platforms/android/server/hal_component_factory.h 2015-04-09 06:20:31 +0000
531+++ src/platforms/android/server/hal_component_factory.h 2015-06-05 17:48:37 +0000
532@@ -21,7 +21,6 @@
533
534 #include "display_component_factory.h"
535 #include "display_resource_factory.h"
536-#include "device_quirks.h"
537
538 namespace mir
539 {
540@@ -36,6 +35,7 @@
541 class DisplayDevice;
542 class HwcWrapper;
543 class HwcReport;
544+class DeviceQuirks;
545
546 //NOTE: this should be the only class that inspects the HWC version and assembles
547 //the components accordingly
548@@ -45,7 +45,8 @@
549 HalComponentFactory(
550 std::shared_ptr<GraphicBufferAllocator> const& buffer_allocator,
551 std::shared_ptr<DisplayResourceFactory> const& res_factory,
552- std::shared_ptr<HwcReport> const& hwc_report);
553+ std::shared_ptr<HwcReport> const& hwc_report,
554+ std::shared_ptr<DeviceQuirks> const& quirks);
555
556 std::unique_ptr<FramebufferBundle> create_framebuffers(DisplayConfigurationOutput const&) override;
557 std::unique_ptr<DisplayDevice> create_display_device() override;
558@@ -53,7 +54,6 @@
559 std::unique_ptr<LayerList> create_layer_list() override;
560
561 private:
562- DeviceQuirks quirks{PropertiesOps{}};
563 std::shared_ptr<GraphicBufferAllocator> const buffer_allocator;
564 std::shared_ptr<DisplayResourceFactory> const res_factory;
565 std::shared_ptr<HwcReport> const hwc_report;
566
567=== modified file 'src/platforms/android/server/platform.cpp'
568--- src/platforms/android/server/platform.cpp 2015-04-09 06:20:31 +0000
569+++ src/platforms/android/server/platform.cpp 2015-06-05 17:48:37 +0000
570@@ -81,19 +81,21 @@
571 mga::Platform::Platform(
572 std::shared_ptr<mga::DisplayComponentFactory> const& display_buffer_builder,
573 std::shared_ptr<mg::DisplayReport> const& display_report,
574- mga::OverlayOptimization overlay_option) :
575+ mga::OverlayOptimization overlay_option,
576+ std::shared_ptr<mga::DeviceQuirks> const& quirks) :
577 display_buffer_builder(display_buffer_builder),
578 display_report(display_report),
579 ipc_operations(std::make_shared<mga::IpcOperations>()),
580+ quirks(quirks),
581 overlay_option(overlay_option)
582 {
583 }
584
585 std::shared_ptr<mg::GraphicBufferAllocator> mga::Platform::create_buffer_allocator()
586 {
587- if (quirks.gralloc_reopenable_after_close())
588+ if (quirks->gralloc_reopenable_after_close())
589 {
590- return std::make_shared<mga::AndroidGraphicBufferAllocator>();
591+ return std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
592 }
593 else
594 {
595@@ -102,14 +104,14 @@
596 std::unique_lock<std::mutex> lk(allocator_mutex);
597 static std::shared_ptr<mg::GraphicBufferAllocator> preserved_allocator;
598 if (!preserved_allocator)
599- preserved_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
600+ preserved_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
601 return preserved_allocator;
602 }
603 }
604
605 std::shared_ptr<mga::GraphicBufferAllocator> mga::Platform::create_mga_buffer_allocator()
606 {
607- return std::make_shared<mga::AndroidGraphicBufferAllocator>();
608+ return std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
609 }
610
611 std::shared_ptr<mg::Display> mga::Platform::create_display(
612@@ -136,23 +138,26 @@
613 std::shared_ptr<mir::EmergencyCleanupRegistry> const& /*emergency_cleanup_registry*/,
614 std::shared_ptr<mir::graphics::DisplayReport> const& display_report)
615 {
616+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{}, *options);
617 auto hwc_report = make_hwc_report(*options);
618 auto overlay_option = should_use_overlay_optimization(*options);
619 hwc_report->report_overlay_optimization(overlay_option);
620 auto display_resource_factory = std::make_shared<mga::ResourceFactory>();
621- auto fb_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
622+ auto fb_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
623 auto component_factory = std::make_shared<mga::HalComponentFactory>(
624- fb_allocator, display_resource_factory, hwc_report);
625- return std::make_shared<mga::Platform>(component_factory, display_report, overlay_option);
626+ fb_allocator, display_resource_factory, hwc_report, quirks);
627+ return std::make_shared<mga::Platform>(component_factory, display_report, overlay_option, quirks);
628 }
629
630 extern "C" std::shared_ptr<mg::Platform> create_guest_platform(
631 std::shared_ptr<mg::DisplayReport> const& display_report,
632 std::shared_ptr<mg::NestedContext> const&)
633 {
634+ //TODO: actually allow disabling quirks for guest platform
635+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
636 //TODO: remove nullptr parameter once platform classes are sorted.
637 // mg::NativePlatform cannot create a display anyways, so it doesnt need a display builder
638- return std::make_shared<mga::Platform>(nullptr, display_report, mga::OverlayOptimization::disabled);
639+ return std::make_shared<mga::Platform>(nullptr, display_report, mga::OverlayOptimization::disabled, quirks);
640 }
641
642 extern "C" void add_graphics_platform_options(
643@@ -165,6 +170,7 @@
644 (hwc_overlay_opt,
645 boost::program_options::value<bool>()->default_value(false),
646 "[platform-specific] Whether to disable overlay optimizations [{on,off}]");
647+ mga::DeviceQuirks::add_options(config);
648 }
649
650 extern "C" mg::PlatformPriority probe_graphics_platform()
651
652=== modified file 'src/platforms/android/server/platform.h'
653--- src/platforms/android/server/platform.h 2015-04-17 14:31:42 +0000
654+++ src/platforms/android/server/platform.h 2015-06-05 17:48:37 +0000
655@@ -40,7 +40,8 @@
656 Platform(
657 std::shared_ptr<DisplayComponentFactory> const& display_buffer_builder,
658 std::shared_ptr<DisplayReport> const& display_report,
659- OverlayOptimization overlay_option);
660+ OverlayOptimization overlay_option,
661+ std::shared_ptr<DeviceQuirks> const& quirks);
662
663 /* From Platform */
664 std::shared_ptr<graphics::GraphicBufferAllocator> create_buffer_allocator() override;
665@@ -57,8 +58,8 @@
666 std::shared_ptr<DisplayComponentFactory> const display_buffer_builder;
667 std::shared_ptr<DisplayReport> const display_report;
668 std::shared_ptr<PlatformIpcOperations> const ipc_operations;
669+ std::shared_ptr<DeviceQuirks> const quirks;
670 OverlayOptimization const overlay_option;
671- DeviceQuirks quirks{PropertiesOps{}};
672 };
673
674 }
675
676=== modified file 'tests/integration-tests/graphics/android/test_buffer_integration.cpp'
677--- tests/integration-tests/graphics/android/test_buffer_integration.cpp 2015-01-22 09:00:14 +0000
678+++ tests/integration-tests/graphics/android/test_buffer_integration.cpp 2015-06-05 17:48:37 +0000
679@@ -17,6 +17,7 @@
680 */
681
682 #include "src/platforms/android/server/android_graphic_buffer_allocator.h"
683+#include "src/platforms/android/server/device_quirks.h"
684 #include "src/server/compositor/buffer_queue.h"
685 #include "src/server/report/null_report_factory.h"
686 #include "mir/graphics/android/native_buffer.h"
687@@ -44,6 +45,8 @@
688 pf = mir_pixel_format_abgr_8888;
689 buffer_properties = mg::BufferProperties{size, pf, mg::BufferUsage::software};
690 graphics_region_factory = std::make_shared<mt::GraphicsRegionFactory>();
691+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
692+ allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
693 }
694
695 geom::Size size;
696@@ -51,6 +54,7 @@
697 mg::BufferProperties buffer_properties;
698 std::shared_ptr<mt::GraphicsRegionFactory> graphics_region_factory;
699 mir::test::doubles::StubFrameDroppingPolicyFactory policy_factory;
700+ std::shared_ptr<mga::AndroidGraphicBufferAllocator> allocator;
701 };
702
703 auto client_acquire_blocking(mc::BufferQueue& switching_bundle)
704@@ -83,8 +87,6 @@
705 {
706 using namespace testing;
707
708- auto allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
709-
710 mg::BufferProperties sw_properties{size, pf, mg::BufferUsage::software};
711 auto test_buffer = allocator->alloc_buffer(sw_properties);
712
713@@ -100,7 +102,6 @@
714 using namespace testing;
715
716 mg::BufferProperties hw_properties{size, pf, mg::BufferUsage::hardware};
717- auto allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
718
719 //TODO: kdub it is a bit trickier to test that a gpu can render... just check creation for now
720 auto test_buffer = allocator->alloc_buffer(hw_properties);
721@@ -111,8 +112,6 @@
722 {
723 using namespace testing;
724
725- auto allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
726-
727 mc::BufferQueue swapper(2, allocator, buffer_properties, policy_factory);
728
729 auto returned_buffer = client_acquire_blocking(swapper);
730
731=== modified file 'tests/integration-tests/graphics/android/test_client_render.cpp'
732--- tests/integration-tests/graphics/android/test_client_render.cpp 2015-04-30 12:27:33 +0000
733+++ tests/integration-tests/graphics/android/test_client_render.cpp 2015-06-05 17:48:37 +0000
734@@ -22,6 +22,7 @@
735 #include "src/platforms/android/server/buffer.h"
736 #include "mir/graphics/android/native_buffer.h"
737 #include "src/platforms/android/server/android_graphic_buffer_allocator.h"
738+#include "src/platforms/android/server/device_quirks.h"
739
740 #include "mir_test/cross_process_sync.h"
741 #include "mir_test/stub_server_tool.h"
742@@ -187,7 +188,8 @@
743 {
744 StubServerGenerator()
745 {
746- allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
747+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
748+ allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
749 auto size = geom::Size{test_width, test_height};
750 surface_pf = mir_pixel_format_abgr_8888;
751 last_posted = allocator->alloc_buffer_platform(size, surface_pf, mga::BufferUsage::use_hardware);
752
753=== modified file 'tests/integration-tests/graphics/android/test_display_integration.cpp'
754--- tests/integration-tests/graphics/android/test_display_integration.cpp 2015-03-31 02:35:42 +0000
755+++ tests/integration-tests/graphics/android/test_display_integration.cpp 2015-06-05 17:48:37 +0000
756@@ -22,6 +22,7 @@
757 #include "src/platforms/android/server/resource_factory.h"
758 #include "src/platforms/android/server/android_graphic_buffer_allocator.h"
759 #include "src/platforms/android/server/hal_component_factory.h"
760+#include "src/platforms/android/server/device_quirks.h"
761 #include "src/server/graphics/program_factory.h"
762 #include "src/server/report/null_report_factory.h"
763
764@@ -54,7 +55,8 @@
765 the server can handle this, but we need the test to as well */
766 original_sigterm_handler = signal(SIGTERM, [](int){});
767
768- buffer_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>();
769+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
770+ buffer_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(quirks);
771
772 /* note about fb_device: OMAP4 drivers seem to only be able to open fb once
773 per process (repeated framebuffer_{open,close}() doesn't seem to work). once we
774@@ -64,7 +66,7 @@
775 auto null_display_report = mir::report::null_display_report();
776 auto stub_gl_config = std::make_shared<mtd::StubGLConfig>();
777 auto display_buffer_factory = std::make_shared<mga::HalComponentFactory>(
778- buffer_allocator, display_resource_factory, report);
779+ buffer_allocator, display_resource_factory, report, quirks);
780 auto program_factory = std::make_shared<mg::ProgramFactory>();
781 display = std::make_shared<mga::Display>(
782 display_buffer_factory, program_factory, stub_gl_config, null_display_report, mga::OverlayOptimization::enabled);
783
784=== modified file 'tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp'
785--- tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp 2015-01-22 09:00:14 +0000
786+++ tests/unit-tests/graphics/android/test_android_alloc_adaptor.cpp 2015-06-05 17:48:37 +0000
787@@ -17,6 +17,7 @@
788 */
789
790 #include "src/platforms/android/server/android_alloc_adaptor.h"
791+#include "src/platforms/android/server/device_quirks.h"
792 #include "mir/graphics/android/native_buffer.h"
793
794 #include "mir_test_doubles/mock_android_alloc_device.h"
795@@ -46,7 +47,8 @@
796 using namespace testing;
797 mock_alloc_device = std::make_shared<NiceMock<mtd::MockAllocDevice>>();
798
799- alloc_adaptor = std::make_shared<mga::AndroidAllocAdaptor>(mock_alloc_device);
800+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
801+ alloc_adaptor = std::make_shared<mga::AndroidAllocAdaptor>(mock_alloc_device, quirks);
802
803 pf = mir_pixel_format_abgr_8888;
804 size = geom::Size{300, 200};
805
806=== modified file 'tests/unit-tests/graphics/android/test_android_buffer_allocator.cpp'
807--- tests/unit-tests/graphics/android/test_android_buffer_allocator.cpp 2015-04-09 17:11:40 +0000
808+++ tests/unit-tests/graphics/android/test_android_buffer_allocator.cpp 2015-06-05 17:48:37 +0000
809@@ -17,6 +17,7 @@
810 */
811
812 #include "src/platforms/android/server/android_graphic_buffer_allocator.h"
813+#include "src/platforms/android/server/device_quirks.h"
814 #include "mir_test_doubles/mock_android_hw.h"
815 #include "mir/graphics/buffer_properties.h"
816 #include "mir/graphics/buffer.h"
817@@ -42,6 +43,7 @@
818
819 testing::NiceMock<mtd::HardwareAccessMock> hw_access_mock;
820 testing::NiceMock<mtd::MockEGL> mock_egl;
821+ mga::AndroidGraphicBufferAllocator allocator{std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{})};
822 };
823
824 TEST_F(AndroidGraphicBufferAllocatorTest, allocator_accesses_gralloc_module)
825@@ -51,12 +53,12 @@
826 EXPECT_CALL(hw_access_mock, hw_get_module(StrEq(GRALLOC_HARDWARE_MODULE_ID), _))
827 .Times(1);
828
829- mga::AndroidGraphicBufferAllocator allocator{};
830+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
831+ mga::AndroidGraphicBufferAllocator allocator{quirks};
832 }
833
834 TEST_F(AndroidGraphicBufferAllocatorTest, supported_pixel_formats_contain_common_formats)
835 {
836- mga::AndroidGraphicBufferAllocator allocator{};
837 auto supported_pixel_formats = allocator.supported_pixel_formats();
838
839 auto abgr_8888_count = std::count(supported_pixel_formats.begin(),
840@@ -78,7 +80,6 @@
841
842 TEST_F(AndroidGraphicBufferAllocatorTest, supported_pixel_formats_have_sane_default_in_first_position)
843 {
844- mga::AndroidGraphicBufferAllocator allocator{};
845 auto supported_pixel_formats = allocator.supported_pixel_formats();
846
847 ASSERT_FALSE(supported_pixel_formats.empty());
848@@ -111,7 +112,6 @@
849 unsigned int width {4};
850 unsigned int height {5};
851 unsigned int stride {16};
852- mga::AndroidGraphicBufferAllocator allocator;
853 auto anwb = std::make_unique<ANativeWindowBuffer>();
854 anwb->common.incRef = inc_ref;
855 anwb->common.decRef = dec_ref;
856@@ -130,7 +130,6 @@
857
858 TEST_F(AndroidGraphicBufferAllocatorTest, throws_if_cannot_share_anwb_ownership)
859 {
860- mga::AndroidGraphicBufferAllocator allocator;
861 auto anwb = std::make_unique<ANativeWindowBuffer>();
862 anwb->common.incRef = nullptr;
863 anwb->common.decRef = dec_ref;
864
865=== modified file 'tests/unit-tests/graphics/android/test_device_detection.cpp'
866--- tests/unit-tests/graphics/android/test_device_detection.cpp 2015-01-22 09:00:14 +0000
867+++ tests/unit-tests/graphics/android/test_device_detection.cpp 2015-06-05 17:48:37 +0000
868@@ -17,10 +17,13 @@
869 */
870
871 #include "src/platforms/android/server/device_quirks.h"
872+#include "mir/options/program_option.h"
873+
874 #include <gmock/gmock.h>
875 #include <gtest/gtest.h>
876
877 namespace mga = mir::graphics::android;
878+namespace bpo = boost::program_options;
879
880 namespace
881 {
882@@ -109,3 +112,127 @@
883 mga::DeviceQuirks quirks(mock_ops);
884 EXPECT_FALSE(quirks.gralloc_reopenable_after_close());
885 }
886+
887+TEST(DeviceDetection, aligns_width_on_vegetahd)
888+{
889+ using namespace testing;
890+ char const default_str[] = "";
891+ char const vegetahd_name_str[] = "vegetahd";
892+
893+ MockOps mock_ops;
894+ EXPECT_CALL(mock_ops, property_get(StrEq("ro.product.device"), _, StrEq(default_str)))
895+ .Times(1)
896+ .WillOnce(Invoke([&](char const*, char* value, char const*)
897+ {
898+ strncpy(value, vegetahd_name_str, PROP_VALUE_MAX);
899+ return 0;
900+ }));
901+
902+ mga::DeviceQuirks quirks(mock_ops);
903+ EXPECT_THAT(quirks.aligned_width(720), Eq(736));
904+}
905+
906+struct DeviceQuirks : testing::Test
907+{
908+ void SetUp()
909+ {
910+ mga::DeviceQuirks::add_options(desc);
911+ }
912+
913+ void disable_num_framebuffers_quirk()
914+ {
915+ int const argc = 2;
916+ char const* argv[argc] = {
917+ __PRETTY_FUNCTION__,
918+ "--enable-num-framebuffers-quirk=false"
919+ };
920+
921+ options.parse_arguments(desc, argc, argv);
922+ }
923+
924+ void disable_single_gralloc_instance_quirk()
925+ {
926+ int const argc = 2;
927+ char const* argv[argc] = {
928+ __PRETTY_FUNCTION__,
929+ "--enable-single-gralloc-instance-quirk=false"
930+ };
931+
932+ options.parse_arguments(desc, argc, argv);
933+ }
934+
935+ void disable_width_alignment_quirk()
936+ {
937+ int const argc = 2;
938+ char const* argv[argc] = {
939+ __PRETTY_FUNCTION__,
940+ "--enable-width-alignment-quirk=false"
941+ };
942+
943+ options.parse_arguments(desc, argc, argv);
944+ }
945+
946+ bpo::options_description desc{"Options"};
947+ mir::options::ProgramOption options;
948+};
949+
950+TEST_F(DeviceQuirks, number_of_framebuffers_quirk_can_be_disabled)
951+{
952+ using namespace testing;
953+ char const default_str[] = "";
954+ char const name_str[] = "mx3";
955+
956+ MockOps mock_ops;
957+ EXPECT_CALL(mock_ops, property_get(StrEq("ro.product.device"), _, StrEq(default_str)))
958+ .Times(1)
959+ .WillOnce(Invoke([&]
960+ (char const*, char* value, char const*)
961+ {
962+ strncpy(value, name_str, PROP_VALUE_MAX);
963+ return 0;
964+ }));
965+
966+ disable_num_framebuffers_quirk();
967+ mga::DeviceQuirks quirks(mock_ops, options);
968+ EXPECT_THAT(quirks.num_framebuffers(), Ne(3));
969+}
970+
971+TEST_F(DeviceQuirks, single_gralloc_instance_quirk_can_be_disabled)
972+{
973+ using namespace testing;
974+ char const default_str[] = "";
975+ char const krillin_name_str[] = "krillin";
976+
977+ MockOps mock_ops;
978+ EXPECT_CALL(mock_ops, property_get(StrEq("ro.product.device"), _, StrEq(default_str)))
979+ .Times(1)
980+ .WillOnce(Invoke([&](char const*, char* value, char const*)
981+ {
982+ strncpy(value, krillin_name_str, PROP_VALUE_MAX);
983+ return 0;
984+ }));
985+
986+ disable_single_gralloc_instance_quirk();
987+ mga::DeviceQuirks quirks(mock_ops, options);
988+ EXPECT_TRUE(quirks.gralloc_reopenable_after_close());
989+}
990+
991+TEST_F(DeviceQuirks, width_alignment_quirk_can_be_disabled)
992+{
993+ using namespace testing;
994+ char const default_str[] = "";
995+ char const vegetahd_name_str[] = "vegetahd";
996+
997+ MockOps mock_ops;
998+ EXPECT_CALL(mock_ops, property_get(StrEq("ro.product.device"), _, StrEq(default_str)))
999+ .Times(1)
1000+ .WillOnce(Invoke([&](char const*, char* value, char const*)
1001+ {
1002+ strncpy(value, vegetahd_name_str, PROP_VALUE_MAX);
1003+ return 0;
1004+ }));
1005+
1006+ disable_width_alignment_quirk();
1007+ mga::DeviceQuirks quirks(mock_ops, options);
1008+ EXPECT_THAT(quirks.aligned_width(720), Eq(720));
1009+}
1010
1011=== modified file 'tests/unit-tests/graphics/android/test_output_builder.cpp'
1012--- tests/unit-tests/graphics/android/test_output_builder.cpp 2015-04-27 20:49:39 +0000
1013+++ tests/unit-tests/graphics/android/test_output_builder.cpp 2015-06-05 17:48:37 +0000
1014@@ -22,6 +22,7 @@
1015 #include "src/platforms/android/server/graphic_buffer_allocator.h"
1016 #include "src/platforms/android/server/hwc_loggers.h"
1017 #include "src/platforms/android/server/hwc_configuration.h"
1018+#include "src/platforms/android/server/device_quirks.h"
1019 #include "mir_test_doubles/mock_buffer.h"
1020 #include "mir_test_doubles/mock_display_report.h"
1021 #include "mir_test/fake_shared.h"
1022@@ -81,6 +82,7 @@
1023 void SetUp()
1024 {
1025 using namespace testing;
1026+ quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
1027 mock_resource_factory = std::make_shared<testing::NiceMock<MockResourceFactory>>();
1028 mock_wrapper = std::make_shared<testing::NiceMock<mtd::MockHWCDeviceWrapper>>();
1029 ON_CALL(*mock_resource_factory, create_hwc_wrapper(_))
1030@@ -99,6 +101,7 @@
1031 std::shared_ptr<mtd::MockHwcReport> mock_hwc_report{
1032 std::make_shared<testing::NiceMock<mtd::MockHwcReport>>()};
1033 std::shared_ptr<mtd::MockHWCDeviceWrapper> mock_wrapper;
1034+ std::shared_ptr<mga::DeviceQuirks> quirks;
1035 };
1036 }
1037
1038@@ -113,7 +116,8 @@
1039 mga::HalComponentFactory factory(
1040 mt::fake_shared(mock_buffer_allocator),
1041 mock_resource_factory,
1042- mock_hwc_report);
1043+ mock_hwc_report,
1044+ quirks);
1045 factory.create_display_device();
1046 }
1047
1048@@ -127,7 +131,8 @@
1049 mga::HalComponentFactory factory(
1050 mt::fake_shared(mock_buffer_allocator),
1051 mock_resource_factory,
1052- mock_hwc_report);
1053+ mock_hwc_report,
1054+ quirks);
1055 factory.create_display_device();
1056 }
1057
1058@@ -140,7 +145,8 @@
1059 mga::HalComponentFactory factory(
1060 mt::fake_shared(mock_buffer_allocator),
1061 mock_resource_factory,
1062- mock_hwc_report);
1063+ mock_hwc_report,
1064+ quirks);
1065 auto hwc_config = factory.create_hwc_configuration();
1066 EXPECT_THAT(dynamic_cast<mga::HwcPowerModeControl*>(hwc_config.get()), Ne(nullptr));
1067 }
1068@@ -156,7 +162,8 @@
1069 mga::HalComponentFactory factory(
1070 mt::fake_shared(mock_buffer_allocator),
1071 mock_resource_factory,
1072- mock_hwc_report);
1073+ mock_hwc_report,
1074+ quirks);
1075 factory.create_display_device();
1076 }
1077
1078@@ -172,7 +179,8 @@
1079 mga::HalComponentFactory factory(
1080 mt::fake_shared(mock_buffer_allocator),
1081 mock_resource_factory,
1082- mock_hwc_report);
1083+ mock_hwc_report,
1084+ quirks);
1085 }, std::runtime_error);
1086 }
1087
1088@@ -191,6 +199,7 @@
1089 mga::HalComponentFactory factory(
1090 mt::fake_shared(mock_buffer_allocator),
1091 mock_resource_factory,
1092- mock_hwc_report);
1093+ mock_hwc_report,
1094+ quirks);
1095 factory.create_framebuffers(mtd::StubDisplayConfig(1).outputs[0]);
1096 }
1097
1098=== modified file 'tests/unit-tests/graphics/android/test_platform.cpp'
1099--- tests/unit-tests/graphics/android/test_platform.cpp 2015-04-30 11:36:36 +0000
1100+++ tests/unit-tests/graphics/android/test_platform.cpp 2015-06-05 17:48:37 +0000
1101@@ -77,6 +77,8 @@
1102 .WillByDefault(Return(native_buffer));
1103 ON_CALL(*mock_buffer, stride())
1104 .WillByDefault(Return(stride));
1105+
1106+ quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
1107 }
1108
1109 std::shared_ptr<mtd::MockAndroidNativeBuffer> native_buffer;
1110@@ -84,6 +86,7 @@
1111 std::shared_ptr<mtd::MockBuffer> mock_buffer;
1112 std::shared_ptr<native_handle_t> native_buffer_handle;
1113 std::shared_ptr<mg::DisplayReport> stub_display_report;
1114+ std::shared_ptr<mga::DeviceQuirks> quirks;
1115 geom::Stride stride;
1116 unsigned int num_ints, num_fds;
1117 };
1118@@ -96,7 +99,7 @@
1119 EXPECT_CALL(*native_buffer, copy_fence())
1120 .WillOnce(Return(fake_fence));
1121
1122- mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled);
1123+ mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled, quirks);
1124
1125 mtd::MockBufferIpcMessage mock_ipc_msg;
1126 int offset = 0;
1127@@ -127,7 +130,7 @@
1128 EXPECT_CALL(*native_buffer, copy_fence())
1129 .WillOnce(Return(-1));
1130
1131- mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled);
1132+ mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled, quirks);
1133
1134 mtd::MockBufferIpcMessage mock_ipc_msg;
1135 int offset = 0;
1136@@ -166,7 +169,7 @@
1137 EXPECT_CALL(*native_buffer, copy_fence())
1138 .WillOnce(Return(-1));
1139
1140- mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled);
1141+ mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled, quirks);
1142
1143 mtd::MockBufferIpcMessage mock_ipc_msg;
1144 int offset = 0;
1145@@ -201,7 +204,7 @@
1146 using namespace ::testing;
1147
1148 int fake_fence{33};
1149- mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled);
1150+ mga::Platform platform(stub_display_builder, stub_display_report, mga::OverlayOptimization::enabled, quirks);
1151 auto ipc_ops = platform.make_ipc_operations();
1152
1153 mtd::MockBufferIpcMessage mock_ipc_msg;
1154@@ -228,7 +231,8 @@
1155 mga::Platform platform(
1156 std::make_shared<mtd::StubDisplayBuilder>(),
1157 mr::null_display_report(),
1158- mga::OverlayOptimization::enabled);
1159+ mga::OverlayOptimization::enabled,
1160+ std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{}));
1161 EXPECT_EQ(EGL_DEFAULT_DISPLAY, platform.egl_native_display());
1162 }
1163
1164
1165=== added file 'tests/unit-tests/test_data/libpowerpc.so'
1166Binary files tests/unit-tests/test_data/libpowerpc.so 1970-01-01 00:00:00 +0000 and tests/unit-tests/test_data/libpowerpc.so 2015-06-05 17:48:37 +0000 differ
1167=== added file 'tests/unit-tests/test_data/libppc64el.so'
1168Binary files tests/unit-tests/test_data/libppc64el.so 1970-01-01 00:00:00 +0000 and tests/unit-tests/test_data/libppc64el.so 2015-06-05 17:48:37 +0000 differ
1169=== modified file 'tests/unit-tests/test_shared_library_prober.cpp'
1170--- tests/unit-tests/test_shared_library_prober.cpp 2015-04-30 11:36:36 +0000
1171+++ tests/unit-tests/test_shared_library_prober.cpp 2015-06-05 17:48:37 +0000
1172@@ -162,6 +162,8 @@
1173 EXPECT_CALL(report, loading_library(FilenameMatches("libarmhf.so")));
1174 EXPECT_CALL(report, loading_library(FilenameMatches("libi386.so")));
1175 EXPECT_CALL(report, loading_library(FilenameMatches("libarm64.so")));
1176+ EXPECT_CALL(report, loading_library(FilenameMatches("libpowerpc.so")));
1177+ EXPECT_CALL(report, loading_library(FilenameMatches("libppc64el.so")));
1178 EXPECT_CALL(report, loading_library(FilenameMatches("libinvalid.so.3")));
1179
1180 mir::libraries_for_path(library_path, report);
1181@@ -176,6 +178,8 @@
1182 bool amd64_failed{false};
1183 bool i386_failed{false};
1184 bool arm64_failed{false};
1185+ bool powerpc_failed{false};
1186+ bool ppc64el_failed{false};
1187 bool invalid_failed{false};
1188
1189 ON_CALL(report, loading_failed(FilenameMatches("libamd64.so"), _))
1190@@ -186,11 +190,15 @@
1191 .WillByDefault(InvokeWithoutArgs([&i386_failed]() { i386_failed = true; }));
1192 ON_CALL(report, loading_failed(FilenameMatches("libarm64.so"), _))
1193 .WillByDefault(InvokeWithoutArgs([&arm64_failed]() { arm64_failed = true; }));
1194+ ON_CALL(report, loading_failed(FilenameMatches("libpowerpc.so"), _))
1195+ .WillByDefault(InvokeWithoutArgs([&powerpc_failed]() { powerpc_failed = true; }));
1196+ ON_CALL(report, loading_failed(FilenameMatches("libppc64el.so"), _))
1197+ .WillByDefault(InvokeWithoutArgs([&ppc64el_failed]() { ppc64el_failed = true; }));
1198 ON_CALL(report, loading_failed(FilenameMatches("libinvalid.so.3"), _))
1199 .WillByDefault(InvokeWithoutArgs([&invalid_failed]() { invalid_failed = true; }));
1200
1201 mir::libraries_for_path(library_path, report);
1202
1203 EXPECT_TRUE(invalid_failed);
1204- EXPECT_TRUE(i386_failed || amd64_failed || armhf_failed || arm64_failed);
1205+ EXPECT_TRUE(i386_failed || amd64_failed || armhf_failed || arm64_failed || powerpc_failed || ppc64el_failed);
1206 }

Subscribers

People subscribed via source and target branches

to all changes: