Mir

Merge lp:~kdub/mir/split-android into lp:mir

Proposed by Kevin DuBois
Status: Merged
Approved by: Daniel van Vugt
Approved revision: no longer in the source branch.
Merged at revision: 4124
Proposed branch: lp:~kdub/mir/split-android
Merge into: lp:mir
Prerequisite: lp:~kdub/mir/drm-auth-from-display
Diff against target: 357 lines (+170/-66)
3 files modified
src/platforms/android/server/platform.cpp (+123/-39)
src/platforms/android/server/platform.h (+42/-12)
tests/unit-tests/platforms/android/server/test_platform.cpp (+5/-15)
To merge this branch: bzr merge lp:~kdub/mir/split-android
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Alan Griffiths Approve
Chris Halse Rogers Approve
Review via email: mp+320634@code.launchpad.net

Commit message

platform: prepare android for independently loaded DisplayPlatform and RenderingPlatform

Description of the change

platform: prepare android for independently loaded DisplayPlatform and RenderingPlatform

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

PASSED: Continuous integration, rev:4086
https://mir-jenkins.ubuntu.com/job/mir-ci/3215/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4326
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4413
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4403
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4403
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4403
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4358/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/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4358/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4358/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/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4358/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/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4358/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/4358
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4358/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

What just happened? CI passed but Launchpad reports conflicts.

Revision history for this message
Chris Halse Rogers (raof) wrote :

Looks sensible to me, modulo the ongoing tension with DisplayPlatform::authentication() in the prerequisite MP.

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

PASSED: Continuous integration, rev:4087
https://mir-jenkins.ubuntu.com/job/mir-ci/3233/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4348
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4435
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4425
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4425
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4425
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4380/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/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4380/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4380/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/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4380/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/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4380/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/4380
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4380/artifact/output/*zip*/output.zip

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

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

PASSED: Continuous integration, rev:4088
https://mir-jenkins.ubuntu.com/job/mir-ci/3244/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/4367
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4454
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4444
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4444
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4444
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4399/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/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4399/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4399/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/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4399/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/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4399/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/4399
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4399/artifact/output/*zip*/output.zip

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

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

LGTM

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

prereq needed a build-time fix, ticked back to 'review' pending that landing.

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

FAILED: Continuous integration, rev:4089
https://mir-jenkins.ubuntu.com/job/mir-ci/3256/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4384/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4473
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4463
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4463
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4463
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4416
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4416/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/4416
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4416/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4416
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4416/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4416/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4416/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/4416
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4416/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/4416
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4416/artifact/output/*zip*/output.zip

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

review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

^^^
18:57:55 E: Unable to locate package glmark2-data
18:57:55 E: Unable to locate package glmark2-es2-mir
18:57:55 E: Unable to locate package umockdev

Try again

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/1236/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4393/console
    None: https://mir-jenkins.ubuntu.com/job/generic-land-mp/1304/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4482
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4472
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4472
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4472
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4425
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4425/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/4425
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4425/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4425
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4425/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4425/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4425/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/4425
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4425/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/4425
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4425/artifact/output/*zip*/output.zip

review: Needs Fixing (continuous-integration)
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/1239/
Executed test runs:
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-mir/4400/console
    None: https://mir-jenkins.ubuntu.com/job/generic-land-mp/1307/console
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/4489
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/4479
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial+overlay/4479
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/4479
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4432
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/4432/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/4432
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial+overlay/4432/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4432
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/4432/artifact/output/*zip*/output.zip
    FAILURE: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4432/console
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=android,release=vivid+overlay/4432/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/4432
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=android,release=vivid+overlay/4432/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/4432
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial+overlay/4432/artifact/output/*zip*/output.zip

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

intermittent testflinger failure

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/platforms/android/server/platform.cpp'
2--- src/platforms/android/server/platform.cpp 2017-03-23 12:57:06 +0000
3+++ src/platforms/android/server/platform.cpp 2017-03-27 17:45:39 +0000
4@@ -95,23 +95,48 @@
5 }
6
7 mga::Platform::Platform(
8- std::shared_ptr<graphics::GraphicBufferAllocator> const& buffer_allocator,
9- std::shared_ptr<mga::DisplayComponentFactory> const& display_buffer_builder,
10- std::shared_ptr<mg::DisplayReport> const& display_report,
11- std::shared_ptr<mga::NativeWindowReport> const& native_window_report,
12- mga::OverlayOptimization overlay_option,
13- std::shared_ptr<mga::DeviceQuirks> const& quirks) :
14- buffer_allocator(buffer_allocator),
15- display_buffer_builder(display_buffer_builder),
16- display_report(display_report),
17- quirks(quirks),
18- native_window_report(native_window_report),
19- overlay_option(overlay_option)
20+ std::shared_ptr<HwcPlatform> const& display,
21+ std::shared_ptr<GrallocPlatform> const& rendering) :
22+ display(display),
23+ rendering(rendering)
24 {
25 }
26
27 mir::UniqueModulePtr<mg::GraphicBufferAllocator> mga::Platform::create_buffer_allocator()
28 {
29+ return rendering->create_buffer_allocator();
30+}
31+
32+mir::UniqueModulePtr<mg::Display> mga::Platform::create_display(
33+ std::shared_ptr<mg::DisplayConfigurationPolicy> const& policy,
34+ std::shared_ptr<mg::GLConfig> const& gl_config)
35+{
36+ return display->create_display(policy, gl_config);
37+}
38+
39+mir::UniqueModulePtr<mg::PlatformIpcOperations> mga::Platform::make_ipc_operations() const
40+{
41+ return rendering->make_ipc_operations();
42+}
43+
44+mg::NativeRenderingPlatform* mga::Platform::native_rendering_platform()
45+{
46+ return rendering->native_rendering_platform();
47+}
48+
49+mg::NativeDisplayPlatform* mga::Platform::native_display_platform()
50+{
51+ return display->native_display_platform();
52+}
53+
54+mga::GrallocPlatform::GrallocPlatform(
55+ std::shared_ptr<mg::GraphicBufferAllocator> const& buffer_allocator) :
56+ buffer_allocator(buffer_allocator)
57+{
58+}
59+
60+mir::UniqueModulePtr<mg::GraphicBufferAllocator> mga::GrallocPlatform::create_buffer_allocator()
61+{
62 struct WrappingGraphicsBufferAllocator : mg::GraphicBufferAllocator
63 {
64 WrappingGraphicsBufferAllocator(
65@@ -148,35 +173,51 @@
66 return make_module_ptr<WrappingGraphicsBufferAllocator>(buffer_allocator);
67 }
68
69-mir::UniqueModulePtr<mg::Display> mga::Platform::create_display(
70- std::shared_ptr<mg::DisplayConfigurationPolicy> const&,
71- std::shared_ptr<mg::GLConfig> const& gl_config)
72+mir::UniqueModulePtr<mg::PlatformIpcOperations> mga::GrallocPlatform::make_ipc_operations() const
73+{
74+ return mir::make_module_ptr<mga::IpcOperations>();
75+}
76+
77+mg::NativeRenderingPlatform* mga::GrallocPlatform::native_rendering_platform()
78+{
79+ return this;
80+}
81+
82+EGLNativeDisplayType mga::GrallocPlatform::egl_native_display() const
83+{
84+ return EGL_DEFAULT_DISPLAY;
85+}
86+
87+mga::HwcPlatform::HwcPlatform(
88+ std::shared_ptr<mg::GraphicBufferAllocator> const& buffer_allocator,
89+ std::shared_ptr<mga::DisplayComponentFactory> const& display_buffer_builder,
90+ std::shared_ptr<mg::DisplayReport> const& display_report,
91+ std::shared_ptr<mga::NativeWindowReport> const& native_window_report,
92+ mga::OverlayOptimization overlay_option,
93+ std::shared_ptr<mga::DeviceQuirks> const& quirks) :
94+ buffer_allocator(buffer_allocator),
95+ display_buffer_builder(display_buffer_builder),
96+ display_report(display_report),
97+ quirks(quirks),
98+ native_window_report(native_window_report),
99+ overlay_option(overlay_option)
100+{
101+}
102+
103+mir::UniqueModulePtr<mg::Display> mga::HwcPlatform::create_display(
104+ std::shared_ptr<mg::DisplayConfigurationPolicy> const&,
105+ std::shared_ptr<mg::GLConfig> const& gl_config)
106 {
107 auto const program_factory = std::make_shared<mir::gl::DefaultProgramFactory>();
108 return mir::make_module_ptr<mga::Display>(
109 display_buffer_builder, program_factory, gl_config, display_report, native_window_report, overlay_option);
110 }
111
112-mg::NativeDisplayPlatform* mga::Platform::native_display_platform()
113+mg::NativeDisplayPlatform* mga::HwcPlatform::native_display_platform()
114 {
115 return nullptr;
116 }
117
118-mir::UniqueModulePtr<mg::PlatformIpcOperations> mga::Platform::make_ipc_operations() const
119-{
120- return mir::make_module_ptr<mga::IpcOperations>();
121-}
122-
123-mg::NativeRenderingPlatform* mga::Platform::native_rendering_platform()
124-{
125- return this;
126-}
127-
128-EGLNativeDisplayType mga::Platform::egl_native_display() const
129-{
130- return EGL_DEFAULT_DISPLAY;
131-}
132-
133 mir::UniqueModulePtr<mg::Platform> create_host_platform(
134 std::shared_ptr<mo::Option> const& options,
135 std::shared_ptr<mir::EmergencyCleanupRegistry> const&,
136@@ -193,15 +234,19 @@
137 auto component_factory = std::make_shared<mga::HalComponentFactory>(
138 display_resource_factory, hwc_report, quirks);
139
140- return mir::make_module_ptr<mga::Platform>(
141- component_factory->the_buffer_allocator(),
142+ auto allocator = component_factory->the_buffer_allocator();
143+ auto display = std::make_shared<mga::HwcPlatform>(
144+ allocator,
145 component_factory, display_report,
146 make_native_window_report(*options, logger),
147 overlay_option, quirks);
148+
149+ return mir::make_module_ptr<mga::Platform>(display,
150+ std::make_shared<mga::GrallocPlatform>(allocator));
151 }
152
153 mir::UniqueModulePtr<mg::Platform> create_guest_platform(
154- std::shared_ptr<mg::DisplayReport> const& display_report,
155+ std::shared_ptr<mg::DisplayReport> const&,
156 std::shared_ptr<mg::PlatformAuthentication> const&)
157 {
158 mir::assert_entry_point_signature<mg::CreateGuestPlatform>(&create_guest_platform);
159@@ -214,13 +259,52 @@
160 else
161 sync_factory = std::make_shared<mga::NullCommandStreamSyncFactory>();
162
163+ auto const buffer_allocator = std::make_shared<mga::GraphicBufferAllocator>(sync_factory, quirks);
164 //TODO: remove nullptr parameter once platform classes are sorted.
165- // mg::NativeRenderingPlatform cannot create a display anyways, so it doesnt need a display builder
166+ // a guest platform cannot create a display anyways, so it doesnt need a display builder
167+ return mir::make_module_ptr<mga::Platform>(
168+ nullptr, std::make_shared<mga::GrallocPlatform>(buffer_allocator));
169+}
170+
171+mir::UniqueModulePtr<mir::graphics::DisplayPlatform> create_display_platform(
172+ std::shared_ptr<mir::options::Option> const& options,
173+ std::shared_ptr<mir::EmergencyCleanupRegistry> const&,
174+ std::shared_ptr<mir::graphics::DisplayReport> const& report,
175+ std::shared_ptr<mir::logging::Logger> const& logger)
176+{
177+ mir::assert_entry_point_signature<mg::CreateDisplayPlatform>(&create_display_platform);
178+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{}, *options);
179+ auto hwc_report = make_hwc_report(*options);
180+ auto overlay_option = should_use_overlay_optimization(*options);
181+ hwc_report->report_overlay_optimization(overlay_option);
182+ auto display_resource_factory = std::make_shared<mga::ResourceFactory>();
183+
184+ auto component_factory = std::make_shared<mga::HalComponentFactory>(
185+ display_resource_factory, hwc_report, quirks);
186+
187+ return mir::make_module_ptr<mga::HwcPlatform>(
188+ component_factory->the_buffer_allocator(),
189+ component_factory, report,
190+ make_native_window_report(*options, logger),
191+ overlay_option, quirks);
192+}
193+
194+mir::UniqueModulePtr<mir::graphics::RenderingPlatform> create_rendering_platform(
195+ std::shared_ptr<mir::options::Option> const&,
196+ std::shared_ptr<mir::graphics::PlatformAuthentication> const&)
197+{
198+ mir::assert_entry_point_signature<mg::CreateRenderingPlatform>(&create_rendering_platform);
199+
200+ auto quirks = std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{});
201+
202+ std::shared_ptr<mga::CommandStreamSyncFactory> sync_factory;
203+ if (quirks->working_egl_sync())
204+ sync_factory = std::make_shared<mga::EGLSyncFactory>();
205+ else
206+ sync_factory = std::make_shared<mga::NullCommandStreamSyncFactory>();
207+
208 auto const buffer_allocator = std::make_shared<mga::GraphicBufferAllocator>(sync_factory, quirks);
209- return mir::make_module_ptr<mga::Platform>(
210- buffer_allocator, nullptr, display_report,
211- std::make_shared<mga::NullNativeWindowReport>(),
212- mga::OverlayOptimization::disabled, quirks);
213+ return mir::make_module_ptr<mga::GrallocPlatform>(buffer_allocator);
214 }
215
216 void add_graphics_platform_options(
217
218=== modified file 'src/platforms/android/server/platform.h'
219--- src/platforms/android/server/platform.h 2017-03-23 12:57:06 +0000
220+++ src/platforms/android/server/platform.h 2017-03-27 17:45:39 +0000
221@@ -38,12 +38,28 @@
222 class CommandStreamSyncFactory;
223 class NativeWindowReport;
224
225-class Platform : public graphics::Platform,
226- public graphics::NativeRenderingPlatform,
227- public mir::renderer::gl::EGLPlatform
228-{
229-public:
230- Platform(
231+
232+class GrallocPlatform : public graphics::RenderingPlatform,
233+ public graphics::NativeRenderingPlatform,
234+ public renderer::gl::EGLPlatform
235+{
236+public:
237+ GrallocPlatform(
238+ std::shared_ptr<graphics::GraphicBufferAllocator> const& buffer_allocator);
239+
240+ UniqueModulePtr<graphics::GraphicBufferAllocator> create_buffer_allocator() override;
241+ UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
242+ NativeRenderingPlatform* native_rendering_platform() override;
243+ EGLNativeDisplayType egl_native_display() const override;
244+
245+private:
246+ std::shared_ptr<graphics::GraphicBufferAllocator> const buffer_allocator;
247+};
248+
249+class HwcPlatform : public graphics::DisplayPlatform
250+{
251+public:
252+ HwcPlatform(
253 std::shared_ptr<graphics::GraphicBufferAllocator> const& buffer_allocator,
254 std::shared_ptr<DisplayComponentFactory> const& display_buffer_builder,
255 std::shared_ptr<DisplayReport> const& display_report,
256@@ -51,15 +67,10 @@
257 OverlayOptimization overlay_option,
258 std::shared_ptr<DeviceQuirks> const& quirks);
259
260- /* From Platform */
261- UniqueModulePtr<graphics::GraphicBufferAllocator> create_buffer_allocator() override;
262 UniqueModulePtr<Display> create_display(
263 std::shared_ptr<graphics::DisplayConfigurationPolicy> const&,
264 std::shared_ptr<graphics::GLConfig> const& /*gl_config*/) override;
265 NativeDisplayPlatform* native_display_platform() override;
266- UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
267- NativeRenderingPlatform* native_rendering_platform() override;
268- EGLNativeDisplayType egl_native_display() const override;
269
270 private:
271 std::shared_ptr<graphics::GraphicBufferAllocator> const buffer_allocator;
272@@ -68,7 +79,26 @@
273 std::shared_ptr<DeviceQuirks> const quirks;
274 std::shared_ptr<NativeWindowReport> const native_window_report;
275 OverlayOptimization const overlay_option;
276-
277+};
278+
279+class Platform : public graphics::Platform
280+{
281+public:
282+ Platform(
283+ std::shared_ptr<HwcPlatform> const& display,
284+ std::shared_ptr<GrallocPlatform> const& rendering);
285+
286+ UniqueModulePtr<graphics::GraphicBufferAllocator> create_buffer_allocator() override;
287+ UniqueModulePtr<Display> create_display(
288+ std::shared_ptr<graphics::DisplayConfigurationPolicy> const&,
289+ std::shared_ptr<graphics::GLConfig> const& /*gl_config*/) override;
290+ UniqueModulePtr<PlatformIpcOperations> make_ipc_operations() const override;
291+ NativeRenderingPlatform* native_rendering_platform() override;
292+ NativeDisplayPlatform* native_display_platform() override;
293+
294+private:
295+ std::shared_ptr<HwcPlatform> const display;
296+ std::shared_ptr<GrallocPlatform> const rendering;
297 };
298
299 }
300
301=== modified file 'tests/unit-tests/platforms/android/server/test_platform.cpp'
302--- tests/unit-tests/platforms/android/server/test_platform.cpp 2017-03-10 14:13:17 +0000
303+++ tests/unit-tests/platforms/android/server/test_platform.cpp 2017-03-27 17:45:39 +0000
304@@ -116,8 +116,7 @@
305 EXPECT_CALL(*native_buffer, copy_fence())
306 .WillOnce(Return(fake_fence));
307
308- mga::Platform platform(stub_buffer_allocator, stub_display_builder,
309- stub_display_report, anw_report, mga::OverlayOptimization::enabled, quirks);
310+ mga::GrallocPlatform platform(stub_buffer_allocator);
311
312 mtd::MockBufferIpcMessage mock_ipc_msg;
313 int offset = 0;
314@@ -151,8 +150,7 @@
315 EXPECT_CALL(*native_buffer, copy_fence())
316 .WillOnce(Return(-1));
317
318- mga::Platform platform(stub_buffer_allocator, stub_display_builder,
319- stub_display_report, anw_report, mga::OverlayOptimization::enabled, quirks);
320+ mga::GrallocPlatform platform(stub_buffer_allocator);
321
322 mtd::MockBufferIpcMessage mock_ipc_msg;
323 int offset = 0;
324@@ -194,8 +192,7 @@
325 EXPECT_CALL(*native_buffer, copy_fence())
326 .WillOnce(Return(-1));
327
328- mga::Platform platform(stub_buffer_allocator, stub_display_builder,
329- stub_display_report, anw_report, mga::OverlayOptimization::enabled, quirks);
330+ mga::GrallocPlatform platform(stub_buffer_allocator);
331
332 mtd::MockBufferIpcMessage mock_ipc_msg;
333 int offset = 0;
334@@ -232,8 +229,7 @@
335 using namespace ::testing;
336
337 int fake_fence{33};
338- mga::Platform platform(stub_buffer_allocator, stub_display_builder,
339- stub_display_report, anw_report, mga::OverlayOptimization::enabled, quirks);
340+ mga::GrallocPlatform platform(stub_buffer_allocator);
341 auto ipc_ops = platform.make_ipc_operations();
342
343 mtd::MockBufferIpcMessage mock_ipc_msg;
344@@ -259,13 +255,7 @@
345 {
346 testing::NiceMock<mtd::MockEGL> mock_egl;
347 mtd::NullGLContext context;
348- mga::Platform platform(
349- std::make_shared<mtd::StubBufferAllocator>(),
350- std::make_shared<mtd::StubDisplayBuilder>(),
351- mr::null_display_report(),
352- std::make_shared<mga::NullNativeWindowReport>(),
353- mga::OverlayOptimization::enabled,
354- std::make_shared<mga::DeviceQuirks>(mga::PropertiesOps{}, context));
355+ mga::GrallocPlatform platform(std::make_shared<mtd::StubBufferAllocator>());
356 EXPECT_EQ(EGL_DEFAULT_DISPLAY, platform.egl_native_display());
357 }
358

Subscribers

People subscribed via source and target branches