Mir

Merge lp:~alan-griffiths/mir/nested-server-uses-host-graphics-platform into lp:mir

Proposed by Alan Griffiths
Status: Merged
Approved by: Alexandros Frantzis
Approved revision: no longer in the source branch.
Merged at revision: 3244
Proposed branch: lp:~alan-griffiths/mir/nested-server-uses-host-graphics-platform
Merge into: lp:mir
Prerequisite: lp:~alan-griffiths/mir/merge-0.18
Diff against target: 851 lines (+335/-33)
31 files modified
examples/basic.c (+12/-0)
include/client/mir_toolkit/client_types.h (+15/-0)
include/client/mir_toolkit/mir_connection.h (+11/-0)
include/common/mir/libname.h (+35/-0)
include/platform/mir/graphics/platform_ipc_package.h (+7/-0)
include/platform/mir/module_properties.h (+7/-1)
src/client/mir_connection.cpp (+26/-0)
src/client/mir_connection.h (+1/-0)
src/client/mir_connection_api.cpp (+14/-0)
src/client/symbols.map (+7/-1)
src/common/CMakeLists.txt (+2/-1)
src/common/libname.cpp (+29/-0)
src/common/symbols.map (+3/-2)
src/platforms/android/server/ipc_operations.cpp (+17/-2)
src/platforms/android/server/platform.cpp (+7/-2)
src/platforms/evdev/platform_factory.cpp (+6/-2)
src/platforms/mesa/server/common/ipc_operations.cpp (+12/-1)
src/platforms/mesa/server/kms/platform_symbols.cpp (+7/-2)
src/platforms/mesa/server/x11/graphics/graphics.cpp (+9/-3)
src/platforms/mesa/server/x11/input/input.cpp (+4/-2)
src/protobuf/mir_protobuf.proto (+11/-0)
src/protobuf/symbols.map (+27/-0)
src/server/frontend/session_mediator.cpp (+12/-0)
src/server/graphics/default_configuration.cpp (+16/-10)
src/server/graphics/nested/host_connection.h (+1/-0)
src/server/graphics/nested/mir_client_host_connection.cpp (+14/-0)
src/server/graphics/nested/mir_client_host_connection.h (+1/-0)
tests/include/mir/test/doubles/stub_host_connection.h (+2/-0)
tests/mir_test_framework/platform_graphics_dummy.cpp (+2/-1)
tests/mir_test_framework/stub_input.cpp (+5/-2)
tests/mir_test_framework/stubbed_graphics_platform.cpp (+13/-1)
To merge this branch: bzr merge lp:~alan-griffiths/mir/nested-server-uses-host-graphics-platform
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Brandon Schaefer (community) Approve
Alberto Aguirre (community) Approve
Kevin DuBois (community) Approve
Mir CI Bot continuous-integration Approve
Alexandros Frantzis (community) Approve
Cemil Azizoglu (community) Approve
Review via email: mp+281886@code.launchpad.net

Commit message

Provide information on the selected graphics platform through the client API and use it in nested servers to select the same module. (LP:1515558)

Description of the change

Provide information on the selected graphics platform through the client API and use it in nested servers to select the same module.

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

PASSED: Continuous integration, rev:3237
http://jenkins.qa.ubuntu.com/job/mir-ci/5952/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5453
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4360
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5409
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/242
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/276
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/276/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/276
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/276/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5406
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5406/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7898
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26489
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/238
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/238/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/96
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26491

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

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

PASSED: Continuous integration, rev:3239
http://jenkins.qa.ubuntu.com/job/mir-ci/5959/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5461
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4368
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5417
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/246
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/283
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/283/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/283
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/283/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5414
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5414/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7904
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26498
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/242
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/242/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/100
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26504

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

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

PASSED: Continuous integration, rev:3240
https://mir-jenkins.ubuntu.com/job/mir-ci/6/
Executed test runs:
    None: https://mir-jenkins.ubuntu.com/job/generic-update-mp/6/console

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

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

PASSED: Continuous integration, rev:3240
http://jenkins.qa.ubuntu.com/job/mir-ci/5968/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5470
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4377
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5426
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/250
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/292
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/292/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/292
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/292/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5423
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5423/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7909
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26509
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/246
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/246/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/104
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26520

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

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

I'm liking the implication of the branch name. Haven't got to a review yet.

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

PASSED: Continuous integration, rev:3241
http://jenkins.qa.ubuntu.com/job/mir-ci/5974/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5480
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4387
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5436
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/253
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/298
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/298/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/298
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/298/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5433
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5433/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7918
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26533
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/249
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/249/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/107
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26538

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

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

FAILED: Continuous integration, rev:3241
https://mir-jenkins.ubuntu.com/job/mir-ci/26/
Executed test runs:
    None: https://mir-jenkins.ubuntu.com/job/generic-update-mp/26/console

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

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

lgtm

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

+#if 0
+ printf("Graphics module: %s (%d.%d%d) - file: %s\n",
+ properties.name,
+ properties.major_version,
+ properties.minor_version,
+ properties.micro_version,
+ properties.file);
+#endif

Not needed.

+ "mir:android"

Does the "mir:..." prefix denote that the module is provided by the mir team, or does it have some other meaning?

Looks good otherwise.

Needs fixing/info

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

Looks good.

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

PASSED: Continuous integration, rev:3243
https://mir-jenkins.ubuntu.com/job/mir-ci/39/
Executed test runs:
    None: https://mir-jenkins.ubuntu.com/job/generic-update-mp/40/console

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

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

44: + char const *file;

I guess a minor needs fixing, its not immediately obvious what the contents of 'file' are. (maybe rename to "library_filename" ?)

A followup (nonblocking) question (and maybe a followup MP) would be: would it be helpful to send both the server and client module names for the graphics platform? Perhaps by having:
mir_connection_get_server_graphics_module (this MP)
mir_connection_get_client_graphics_module (future MP, if needed)
mir_connection_get_input_module (future MP, if needed)

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

PASSED: Continuous integration, rev:3243
http://jenkins.qa.ubuntu.com/job/mir-ci/6003/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5516
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4423
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5472
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/268
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/327
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/327/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/327
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/327/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5469
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5469/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7943
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26609
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/264
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/264/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/122
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26621

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

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

> 44: + char const *file;
>
> I guess a minor needs fixing, its not immediately obvious what the contents of
> 'file' are. (maybe rename to "library_filename" ?)

It ought to be "module" rather than "library", but that is somewhat redundant in a struct called MirModuleProperties.

I guess "filename" is a little clearer than "file" though.

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

PASSED: Continuous integration, rev:3244
https://mir-jenkins.ubuntu.com/job/mir-ci/53/
Executed test runs:
    None: https://mir-jenkins.ubuntu.com/job/generic-update-mp/53/console

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

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

alright, lgtm

review: Approve
Revision history for this message
Alberto Aguirre (albaguirre) wrote :

LGTM

review: Approve
Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

lgtm

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

PASSED: Continuous integration, rev:3244
http://jenkins.qa.ubuntu.com/job/mir-ci/6018/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-android-vivid-i386-build/5534
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-clang-vivid-amd64-build/4441
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-vivid-touch/5490
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-xenial-touch/278
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/342
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-amd64-ci/342/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/342
        deb: http://jenkins.qa.ubuntu.com/job/mir-xenial-i386-ci/342/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5487
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-vivid-armhf/5487/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-touch/7958
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26661
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/274
        deb: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-builder-xenial-armhf/274/artifact/work/output/*zip*/output.zip
    SUCCESS: http://jenkins.qa.ubuntu.com/job/mir-mediumtests-runner-xenial-touch/132
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26673

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

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/basic.c'
--- examples/basic.c 2015-09-17 20:32:32 +0000
+++ examples/basic.c 2016-01-14 15:13:04 +0000
@@ -117,6 +117,18 @@
117 assert(0 <= platform_package.fd_items);117 assert(0 <= platform_package.fd_items);
118 }118 }
119119
120 {
121 MirModuleProperties properties = { NULL, -1, -1, -1, NULL };
122
123 mir_connection_get_graphics_module(mcd.connection, &properties);
124
125 assert(NULL != properties.name);
126 assert(0 <= properties.major_version);
127 assert(0 <= properties.minor_version);
128 assert(0 <= properties.micro_version);
129 assert(NULL != properties.filename);
130 }
131
120 // Identify a supported pixel format132 // Identify a supported pixel format
121 MirPixelFormat pixel_format = mir_pixel_format_invalid;133 MirPixelFormat pixel_format = mir_pixel_format_invalid;
122 unsigned int valid_formats;134 unsigned int valid_formats;
123135
=== modified file 'include/client/mir_toolkit/client_types.h'
--- include/client/mir_toolkit/client_types.h 2015-09-02 16:33:14 +0000
+++ include/client/mir_toolkit/client_types.h 2016-01-14 15:13:04 +0000
@@ -192,6 +192,21 @@
192 int fd[mir_platform_package_max];192 int fd[mir_platform_package_max];
193} MirPlatformPackage;193} MirPlatformPackage;
194194
195/**
196 * Retrieved information about a loadable module. This allows clients to
197 * identify the underlying platform. E.g. whether the graphics are
198 * "mir:android" or "mir:mesa".
199 * Third party graphics platforms do not currently exist but should be
200 * named according to the vendor and platform. Vis: "<vendor>:<platform>"
201 */
202typedef struct MirModuleProperties
203{
204 char const *name;
205 int major_version;
206 int minor_version;
207 int micro_version;
208 char const *filename;
209} MirModuleProperties;
195210
196/**211/**
197 * Retrieved information about a MirSurface. This is most useful for learning212 * Retrieved information about a MirSurface. This is most useful for learning
198213
=== modified file 'include/client/mir_toolkit/mir_connection.h'
--- include/client/mir_toolkit/mir_connection.h 2015-11-17 12:46:14 +0000
+++ include/client/mir_toolkit/mir_connection.h 2016-01-14 15:13:04 +0000
@@ -95,6 +95,17 @@
95void mir_connection_get_platform(MirConnection *connection, MirPlatformPackage *platform_package);95void mir_connection_get_platform(MirConnection *connection, MirPlatformPackage *platform_package);
9696
97/**97/**
98 * Query graphics platform module.
99 *
100 * \note The char pointers in MirModuleProperties are owned by the connection and should not be
101 * freed. They remain valid until the connection is released.
102 *
103 * \param [in] connection The connection
104 * \param [out] properties Structure to be populated
105 */
106void mir_connection_get_graphics_module(MirConnection *connection, MirModuleProperties *properties);
107
108/**
98 * Register a callback to be called when a Lifecycle state change occurs.109 * Register a callback to be called when a Lifecycle state change occurs.
99 * \param [in] connection The connection110 * \param [in] connection The connection
100 * \param [in] callback The function to be called when the state change occurs111 * \param [in] callback The function to be called when the state change occurs
101112
=== added file 'include/common/mir/libname.h'
--- include/common/mir/libname.h 1970-01-01 00:00:00 +0000
+++ include/common/mir/libname.h 2016-01-14 15:13:04 +0000
@@ -0,0 +1,35 @@
1/*
2 * Copyright © 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alan Griffiths <alan@octopull.co.uk>
17 */
18
19#ifndef MIR_LIBNAME_H
20#define MIR_LIBNAME_H
21
22namespace mir
23{
24namespace detail { char const* libname_impl(void* libname); }
25
26namespace
27{
28inline char const* libname()
29{
30 return detail::libname_impl(reinterpret_cast<void*>(&libname));
31}
32}
33}
34
35#endif //MIR_LIBNAME_H_H
036
=== modified file 'include/platform/mir/graphics/platform_ipc_package.h'
--- include/platform/mir/graphics/platform_ipc_package.h 2015-02-22 07:46:25 +0000
+++ include/platform/mir/graphics/platform_ipc_package.h 2016-01-14 15:13:04 +0000
@@ -24,6 +24,8 @@
2424
25namespace mir25namespace mir
26{26{
27struct ModuleProperties;
28
27namespace graphics29namespace graphics
28{30{
2931
@@ -32,8 +34,13 @@
32 */34 */
33struct PlatformIPCPackage35struct PlatformIPCPackage
34{36{
37 PlatformIPCPackage() : graphics_module(nullptr) {}
38 explicit PlatformIPCPackage(ModuleProperties const* graphics_module) : graphics_module(graphics_module) {}
39
35 std::vector<int32_t> ipc_data;40 std::vector<int32_t> ipc_data;
36 std::vector<int32_t> ipc_fds;41 std::vector<int32_t> ipc_fds;
42
43 ModuleProperties const* graphics_module;
37};44};
3845
39}46}
4047
=== modified file 'include/platform/mir/module_properties.h'
--- include/platform/mir/module_properties.h 2015-04-28 07:54:10 +0000
+++ include/platform/mir/module_properties.h 2016-01-14 15:13:04 +0000
@@ -23,7 +23,12 @@
23{23{
2424
25/**25/**
26 * Describes a platform module26 * Describes a platform module. Mir provides the following graphics platforms:
27 * "mir:mesa-kms", "mir:mesa-x11" and "mir:android".
28 * Mir provides "mir:evdev-input" input platform.
29 *
30 * Third party platforms should be named according to the vendor and platform:
31 * "<vendor>:<platform>"
27 */32 */
28struct ModuleProperties33struct ModuleProperties
29{34{
@@ -31,6 +36,7 @@
31 int major_version;36 int major_version;
32 int minor_version;37 int minor_version;
33 int micro_version;38 int micro_version;
39 char const* file;
34};40};
35}41}
3642
3743
=== modified file 'src/client/mir_connection.cpp'
--- src/client/mir_connection.cpp 2016-01-13 19:08:38 +0000
+++ src/client/mir_connection.cpp 2016-01-14 15:13:04 +0000
@@ -643,6 +643,32 @@
643 }643 }
644}644}
645645
646void MirConnection::populate_graphics_module(MirModuleProperties& properties)
647{
648 // connect_result is write-once: once it's valid, we don't need to lock
649 // to use it.
650 if (connect_done &&
651 !connect_result->has_error() &&
652 connect_result->has_platform() &&
653 connect_result->platform().has_graphics_module())
654 {
655 auto const& graphics_module = connect_result->platform().graphics_module();
656 properties.name = graphics_module.name().c_str();
657 properties.major_version = graphics_module.major_version();
658 properties.minor_version = graphics_module.minor_version();
659 properties.micro_version = graphics_module.micro_version();
660 properties.filename = graphics_module.file().c_str();
661 }
662 else
663 {
664 properties.name = "(unknown)";
665 properties.major_version = 0;
666 properties.minor_version = 0;
667 properties.micro_version = 0;
668 properties.filename = nullptr;
669 }
670}
671
646MirDisplayConfiguration* MirConnection::create_copy_of_display_config()672MirDisplayConfiguration* MirConnection::create_copy_of_display_config()
647{673{
648 std::lock_guard<decltype(mutex)> lock(mutex);674 std::lock_guard<decltype(mutex)> lock(mutex);
649675
=== modified file 'src/client/mir_connection.h'
--- src/client/mir_connection.h 2016-01-11 14:27:36 +0000
+++ src/client/mir_connection.h 2016-01-14 15:13:04 +0000
@@ -129,6 +129,7 @@
129 void register_display_change_callback(mir_display_config_callback callback, void* context);129 void register_display_change_callback(mir_display_config_callback callback, void* context);
130130
131 void populate(MirPlatformPackage& platform_package);131 void populate(MirPlatformPackage& platform_package);
132 void populate_graphics_module(MirModuleProperties& properties);
132 MirDisplayConfiguration* create_copy_of_display_config();133 MirDisplayConfiguration* create_copy_of_display_config();
133 void available_surface_formats(MirPixelFormat* formats,134 void available_surface_formats(MirPixelFormat* formats,
134 unsigned int formats_size, unsigned int& valid_formats);135 unsigned int formats_size, unsigned int& valid_formats);
135136
=== modified file 'src/client/mir_connection_api.cpp'
--- src/client/mir_connection_api.cpp 2015-11-11 11:50:42 +0000
+++ src/client/mir_connection_api.cpp 2016-01-14 15:13:04 +0000
@@ -22,6 +22,7 @@
22#include "mir_toolkit/mir_connection.h"22#include "mir_toolkit/mir_connection.h"
23#include "mir/default_configuration.h"23#include "mir/default_configuration.h"
24#include "mir/raii.h"24#include "mir/raii.h"
25#include "mir/require.h"
2526
26#include "mir_connection.h"27#include "mir_connection.h"
27#include "default_connection_configuration.h"28#include "default_connection_configuration.h"
@@ -186,6 +187,19 @@
186 connection->populate(*platform_package);187 connection->populate(*platform_package);
187}188}
188189
190void mir_connection_get_graphics_module(MirConnection *connection, MirModuleProperties *properties)
191try
192{
193 mir::require(mir_connection_is_valid(connection));
194 mir::require(properties != nullptr);
195
196 connection->populate_graphics_module(*properties);
197}
198catch (std::exception const& ex)
199{
200 MIR_LOG_UNCAUGHT_EXCEPTION(ex);
201}
202
189void mir_connection_set_lifecycle_event_callback(203void mir_connection_set_lifecycle_event_callback(
190 MirConnection* connection,204 MirConnection* connection,
191 mir_lifecycle_event_callback callback,205 mir_lifecycle_event_callback callback,
192206
=== modified file 'src/client/symbols.map'
--- src/client/symbols.map 2016-01-08 09:23:17 +0000
+++ src/client/symbols.map 2016-01-14 15:13:04 +0000
@@ -207,6 +207,13 @@
207 *;207 *;
208} MIR_CLIENT_9v17;208} MIR_CLIENT_9v17;
209209
210MIR_CLIENT_unreleased {
211 global:
212 mir_connection_get_graphics_module;
213 local:
214 *;
215} MIR_CLIENT_9v18;
216
210MIR_CLIENT_DETAIL_9 {217MIR_CLIENT_DETAIL_9 {
211 global:218 global:
212 extern "C++" { 219 extern "C++" {
@@ -261,4 +268,3 @@
261 local:268 local:
262 *;269 *;
263} MIR_CLIENT_DETAIL_9v18;270} MIR_CLIENT_DETAIL_9v18;
264
265271
=== modified file 'src/common/CMakeLists.txt'
--- src/common/CMakeLists.txt 2015-11-13 20:48:52 +0000
+++ src/common/CMakeLists.txt 2016-01-14 15:13:04 +0000
@@ -20,7 +20,8 @@
20 $<TARGET_OBJECTS:mirfatal>20 $<TARGET_OBJECTS:mirfatal>
21 $<TARGET_OBJECTS:android-input-common>21 $<TARGET_OBJECTS:android-input-common>
22 ${CMAKE_CURRENT_SOURCE_DIR}/log.cpp22 ${CMAKE_CURRENT_SOURCE_DIR}/log.cpp
23 )23 ${CMAKE_CURRENT_SOURCE_DIR}/libname.cpp ${PROJECT_SOURCE_DIR}/include/common/mir/libname.h
24)
2425
25set(PREFIX "${CMAKE_INSTALL_PREFIX}")26set(PREFIX "${CMAKE_INSTALL_PREFIX}")
26set(EXEC_PREFIX "${CMAKE_INSTALL_PREFIX}")27set(EXEC_PREFIX "${CMAKE_INSTALL_PREFIX}")
2728
=== added file 'src/common/libname.cpp'
--- src/common/libname.cpp 1970-01-01 00:00:00 +0000
+++ src/common/libname.cpp 2016-01-14 15:13:04 +0000
@@ -0,0 +1,29 @@
1/*
2 * Copyright © 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License version 3,
6 * as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Authored by: Alan Griffiths <alan@octopull.co.uk>
17 */
18
19#include "mir/libname.h"
20
21#include <dlfcn.h>
22
23char const* mir::detail::libname_impl(void* libname)
24{
25 Dl_info info;
26
27 dladdr(libname, &info);
28 return info.dli_fname;
29}
030
=== modified file 'src/common/symbols.map'
--- src/common/symbols.map 2015-12-17 12:25:31 +0000
+++ src/common/symbols.map 2016-01-14 15:13:04 +0000
@@ -201,12 +201,13 @@
201 local: *;201 local: *;
202} MIR_COMMON_5;202} MIR_COMMON_5;
203203
204MIR_COMMON_unreleased {204MIR_COMMON_unreleased { # New functions in Mir 0.19
205 global:205 global:
206 extern "C++" {206 extern "C++" {
207 typeinfo?for?mir::logging::SharedLibraryProberReport;207 typeinfo?for?mir::logging::SharedLibraryProberReport;
208 typeinfo?for?mir::time::SteadyClock;208 typeinfo?for?mir::time::SteadyClock;
209 typeinfo?for?android::InputChannel;209 typeinfo?for?android::InputChannel;
210 typeinfo?for?mir::logging::DumbConsoleLogger;210 typeinfo?for?mir::logging::DumbConsoleLogger;
211 mir::detail::libname_impl*;
211 };212 };
212} MIR_COMMON_5;213} MIR_COMMON_5.1;
213214
=== modified file 'src/platforms/android/server/ipc_operations.cpp'
--- src/platforms/android/server/ipc_operations.cpp 2016-01-07 11:55:03 +0000
+++ src/platforms/android/server/ipc_operations.cpp 2016-01-14 15:13:04 +0000
@@ -17,13 +17,17 @@
17 */17 */
1818
19#include "mir/graphics/platform_ipc_package.h"19#include "mir/graphics/platform_ipc_package.h"
20#include "mir/module_properties.h"
20#include "mir/graphics/buffer.h"21#include "mir/graphics/buffer.h"
21#include "mir/graphics/buffer_ipc_message.h"22#include "mir/graphics/buffer_ipc_message.h"
22#include "mir/graphics/platform_operation_message.h"23#include "mir/graphics/platform_operation_message.h"
24#include "mir/libname.h"
23#include "android_native_buffer.h"25#include "android_native_buffer.h"
24#include "ipc_operations.h"26#include "ipc_operations.h"
27
28#include <boost/throw_exception.hpp>
29
25#include <stdexcept>30#include <stdexcept>
26#include <boost/throw_exception.hpp>
2731
28namespace mg = mir::graphics;32namespace mg = mir::graphics;
29namespace mga = mir::graphics::android;33namespace mga = mir::graphics::android;
@@ -66,9 +70,20 @@
66{70{
67}71}
6872
73namespace
74{
75mir::ModuleProperties const properties = {
76 "mir:android",
77 MIR_VERSION_MAJOR,
78 MIR_VERSION_MINOR,
79 MIR_VERSION_MICRO,
80 mir::libname()
81};
82}
83
69std::shared_ptr<mg::PlatformIPCPackage> mga::IpcOperations::connection_ipc_package()84std::shared_ptr<mg::PlatformIPCPackage> mga::IpcOperations::connection_ipc_package()
70{85{
71 return std::make_shared<mg::PlatformIPCPackage>();86 return std::make_shared<mg::PlatformIPCPackage>(&properties);
72}87}
7388
74mg::PlatformOperationMessage mga::IpcOperations::platform_operation(89mg::PlatformOperationMessage mga::IpcOperations::platform_operation(
7590
=== modified file 'src/platforms/android/server/platform.cpp'
--- src/platforms/android/server/platform.cpp 2016-01-07 11:55:03 +0000
+++ src/platforms/android/server/platform.cpp 2016-01-14 15:13:04 +0000
@@ -37,6 +37,7 @@
37#include "mir/options/configuration.h"37#include "mir/options/configuration.h"
38#include "mir/abnormal_exit.h"38#include "mir/abnormal_exit.h"
39#include "mir/assert_module_entry_point.h"39#include "mir/assert_module_entry_point.h"
40#include "mir/libname.h"
4041
41#include <boost/throw_exception.hpp>42#include <boost/throw_exception.hpp>
42#include <stdexcept>43#include <stdexcept>
@@ -197,12 +198,16 @@
197 return err < 0 ? mg::PlatformPriority::unsupported : mg::PlatformPriority::best;198 return err < 0 ? mg::PlatformPriority::unsupported : mg::PlatformPriority::best;
198}199}
199200
201namespace
202{
200mir::ModuleProperties const description = {203mir::ModuleProperties const description = {
201 "android",204 "mir:android",
202 MIR_VERSION_MAJOR,205 MIR_VERSION_MAJOR,
203 MIR_VERSION_MINOR,206 MIR_VERSION_MINOR,
204 MIR_VERSION_MICRO207 MIR_VERSION_MICRO,
208 mir::libname()
205};209};
210}
206211
207mir::ModuleProperties const* describe_graphics_module()212mir::ModuleProperties const* describe_graphics_module()
208{213{
209214
=== modified file 'src/platforms/evdev/platform_factory.cpp'
--- src/platforms/evdev/platform_factory.cpp 2015-11-25 20:26:59 +0000
+++ src/platforms/evdev/platform_factory.cpp 2016-01-14 15:13:04 +0000
@@ -20,6 +20,7 @@
20#include "mir/udev/wrapper.h"20#include "mir/udev/wrapper.h"
21#include "mir/fd.h"21#include "mir/fd.h"
22#include "mir/assert_module_entry_point.h"22#include "mir/assert_module_entry_point.h"
23#include "mir/libname.h"
2324
24#include <sys/types.h>25#include <sys/types.h>
25#include <sys/stat.h>26#include <sys/stat.h>
@@ -37,12 +38,15 @@
37namespace38namespace
38{39{
39char const* const host_socket_opt = "host-socket";40char const* const host_socket_opt = "host-socket";
41
40mir::ModuleProperties const description = {42mir::ModuleProperties const description = {
41 "evdev-input",43 "mir:evdev-input",
42 MIR_VERSION_MAJOR,44 MIR_VERSION_MAJOR,
43 MIR_VERSION_MINOR,45 MIR_VERSION_MINOR,
44 MIR_VERSION_MICRO46 MIR_VERSION_MICRO,
47 mir::libname()
45};48};
49
46bool can_open_input_devices()50bool can_open_input_devices()
47{51{
48 mu::Enumerator input_enumerator{std::make_shared<mu::Context>()};52 mu::Enumerator input_enumerator{std::make_shared<mu::Context>()};
4953
=== modified file 'src/platforms/mesa/server/common/ipc_operations.cpp'
--- src/platforms/mesa/server/common/ipc_operations.cpp 2015-07-23 02:39:20 +0000
+++ src/platforms/mesa/server/common/ipc_operations.cpp 2016-01-14 15:13:04 +0000
@@ -19,8 +19,10 @@
19#include "mir/graphics/buffer.h"19#include "mir/graphics/buffer.h"
20#include "mir/graphics/buffer_ipc_message.h"20#include "mir/graphics/buffer_ipc_message.h"
21#include "mir/graphics/platform_ipc_package.h"21#include "mir/graphics/platform_ipc_package.h"
22#include "mir/graphics/platform.h"
22#include "mir/graphics/nested_context.h"23#include "mir/graphics/nested_context.h"
23#include "mir/graphics/platform_operation_message.h"24#include "mir/graphics/platform_operation_message.h"
25#include "mir/libname.h"
24#include "display_helpers.h"26#include "display_helpers.h"
25#include "drm_authentication.h"27#include "drm_authentication.h"
26#include "drm_close_threadsafe.h"28#include "drm_close_threadsafe.h"
@@ -38,9 +40,18 @@
3840
39namespace41namespace
40{42{
43mir::ModuleProperties const description = {
44 "mir:mesa",
45 MIR_VERSION_MAJOR,
46 MIR_VERSION_MINOR,
47 MIR_VERSION_MICRO,
48 mir::libname()
49};
50
41struct MesaPlatformIPCPackage : public mg::PlatformIPCPackage51struct MesaPlatformIPCPackage : public mg::PlatformIPCPackage
42{52{
43 MesaPlatformIPCPackage(int drm_auth_fd)53 MesaPlatformIPCPackage(int drm_auth_fd) :
54 mg::PlatformIPCPackage(&description)
44 {55 {
45 ipc_fds.push_back(drm_auth_fd);56 ipc_fds.push_back(drm_auth_fd);
46 }57 }
4758
=== modified file 'src/platforms/mesa/server/kms/platform_symbols.cpp'
--- src/platforms/mesa/server/kms/platform_symbols.cpp 2016-01-07 11:55:03 +0000
+++ src/platforms/mesa/server/kms/platform_symbols.cpp 2016-01-14 15:13:04 +0000
@@ -24,6 +24,7 @@
24#include "mir/udev/wrapper.h"24#include "mir/udev/wrapper.h"
25#include "mir/module_deleter.h"25#include "mir/module_deleter.h"
26#include "mir/assert_module_entry_point.h"26#include "mir/assert_module_entry_point.h"
27#include "mir/libname.h"
2728
28#include <fcntl.h>29#include <fcntl.h>
29#include <sys/ioctl.h>30#include <sys/ioctl.h>
@@ -211,12 +212,16 @@
211 mg::PlatformPriority::supported - 1);212 mg::PlatformPriority::supported - 1);
212}213}
213214
215namespace
216{
214mir::ModuleProperties const description = {217mir::ModuleProperties const description = {
215 "mesa-kms",218 "mir:mesa-kms",
216 MIR_VERSION_MAJOR,219 MIR_VERSION_MAJOR,
217 MIR_VERSION_MINOR,220 MIR_VERSION_MINOR,
218 MIR_VERSION_MICRO221 MIR_VERSION_MICRO,
222 mir::libname()
219};223};
224}
220225
221mir::ModuleProperties const* describe_graphics_module()226mir::ModuleProperties const* describe_graphics_module()
222{227{
223228
=== modified file 'src/platforms/mesa/server/x11/graphics/graphics.cpp'
--- src/platforms/mesa/server/x11/graphics/graphics.cpp 2016-01-07 11:55:03 +0000
+++ src/platforms/mesa/server/x11/graphics/graphics.cpp 2016-01-14 15:13:04 +0000
@@ -20,9 +20,11 @@
20#include "platform.h"20#include "platform.h"
21#include "guest_platform.h"21#include "guest_platform.h"
22#include "../X11_resources.h"22#include "../X11_resources.h"
23#include <boost/throw_exception.hpp>
24#include "mir/module_deleter.h"23#include "mir/module_deleter.h"
25#include "mir/assert_module_entry_point.h"24#include "mir/assert_module_entry_point.h"
25#include "mir/libname.h"
26
27#include <boost/throw_exception.hpp>
2628
27namespace mo = mir::options;29namespace mo = mir::options;
28namespace mg = mir::graphics;30namespace mg = mir::graphics;
@@ -96,12 +98,16 @@
96 return mg::PlatformPriority::unsupported;98 return mg::PlatformPriority::unsupported;
97}99}
98100
101namespace
102{
99mir::ModuleProperties const description = {103mir::ModuleProperties const description = {
100 "mesa-x11",104 "mir:mesa-x11",
101 MIR_VERSION_MAJOR,105 MIR_VERSION_MAJOR,
102 MIR_VERSION_MINOR,106 MIR_VERSION_MINOR,
103 MIR_VERSION_MICRO107 MIR_VERSION_MICRO,
108 mir::libname()
104};109};
110}
105111
106mir::ModuleProperties const* describe_graphics_module()112mir::ModuleProperties const* describe_graphics_module()
107{113{
108114
=== modified file 'src/platforms/mesa/server/x11/input/input.cpp'
--- src/platforms/mesa/server/x11/input/input.cpp 2015-12-02 13:06:44 +0000
+++ src/platforms/mesa/server/x11/input/input.cpp 2016-01-14 15:13:04 +0000
@@ -20,6 +20,7 @@
20#include "../X11_resources.h"20#include "../X11_resources.h"
21#include "mir/module_properties.h"21#include "mir/module_properties.h"
22#include "mir/assert_module_entry_point.h"22#include "mir/assert_module_entry_point.h"
23#include "mir/libname.h"
2324
24namespace mo = mir::options;25namespace mo = mir::options;
25namespace mi = mir::input;26namespace mi = mir::input;
@@ -61,10 +62,11 @@
61namespace62namespace
62{63{
63mir::ModuleProperties const description = {64mir::ModuleProperties const description = {
64 "x11-input",65 "mir:x11-input",
65 MIR_VERSION_MAJOR,66 MIR_VERSION_MAJOR,
66 MIR_VERSION_MINOR,67 MIR_VERSION_MINOR,
67 MIR_VERSION_MICRO68 MIR_VERSION_MICRO,
69 mir::libname()
68};70};
69}71}
7072
7173
=== modified file 'src/protobuf/mir_protobuf.proto'
--- src/protobuf/mir_protobuf.proto 2015-10-16 17:34:48 +0000
+++ src/protobuf/mir_protobuf.proto 2016-01-14 15:13:04 +0000
@@ -142,10 +142,21 @@
142 optional string error = 127;142 optional string error = 127;
143}143}
144144
145message ModuleProperties
146{
147 required string name = 1;
148 required uint32 major_version = 2;
149 required uint32 minor_version = 3;
150 required uint32 micro_version = 4;
151 required string file = 5;
152};
153
154
145message Platform {155message Platform {
146 repeated sint32 fd = 1;156 repeated sint32 fd = 1;
147 repeated int32 data = 2;157 repeated int32 data = 2;
148 optional int32 fds_on_side_channel = 3;158 optional int32 fds_on_side_channel = 3;
159 optional ModuleProperties graphics_module = 4;
149160
150 optional string error = 127;161 optional string error = 127;
151}162}
152163
=== modified file 'src/protobuf/symbols.map'
--- src/protobuf/symbols.map 2015-11-02 17:40:57 +0000
+++ src/protobuf/symbols.map 2016-01-14 15:13:04 +0000
@@ -975,3 +975,30 @@
975 };975 };
976 local: *;976 local: *;
977};977};
978
979MIR_PROTOBUF_3_unreleased {
980 global:
981 extern "C++" {
982 mir::protobuf::ModuleProperties::ByteSize*;
983 mir::protobuf::ModuleProperties::CheckTypeAndMergeFrom*;
984 mir::protobuf::ModuleProperties::Clear*;
985 mir::protobuf::ModuleProperties::?ModuleProperties*;
986 mir::protobuf::ModuleProperties::ModuleProperties*;
987 mir::protobuf::ModuleProperties::CopyFrom*;
988 mir::protobuf::ModuleProperties::default_instance*;
989 mir::protobuf::ModuleProperties::DiscardUnknownFields*;
990 mir::protobuf::ModuleProperties::GetTypeName*;
991 mir::protobuf::ModuleProperties::IsInitialized*;
992 mir::protobuf::ModuleProperties::kDisplayConfigurationFieldNumber*;
993 mir::protobuf::ModuleProperties::kDisplayOutputFieldNumber*;
994 mir::protobuf::ModuleProperties::kErrorFieldNumber*;
995 mir::protobuf::ModuleProperties::kPlatformFieldNumber*;
996 mir::protobuf::ModuleProperties::kSurfacePixelFormatFieldNumber*;
997 mir::protobuf::ModuleProperties::MergeFrom*;
998 mir::protobuf::ModuleProperties::MergePartialFromCodedStream*;
999 mir::protobuf::ModuleProperties::New*;
1000 mir::protobuf::ModuleProperties::SerializeWithCachedSizes*;
1001 mir::protobuf::ModuleProperties::Swap*;
1002 typeinfo?for?mir::protobuf::ModuleProperties;
1003 };
1004} MIR_PROTOBUF_3;
9781005
=== modified file 'src/server/frontend/session_mediator.cpp'
--- src/server/frontend/session_mediator.cpp 2015-12-16 11:57:27 +0000
+++ src/server/frontend/session_mediator.cpp 2016-01-14 15:13:04 +0000
@@ -50,6 +50,7 @@
50#include "mir/scene/prompt_session_creation_parameters.h"50#include "mir/scene/prompt_session_creation_parameters.h"
51#include "mir/fd.h"51#include "mir/fd.h"
52#include "mir/cookie_factory.h"52#include "mir/cookie_factory.h"
53#include "mir/module_properties.h"
5354
54#include "mir/geometry/rectangles.h"55#include "mir/geometry/rectangles.h"
55#include "buffer_stream_tracker.h"56#include "buffer_stream_tracker.h"
@@ -144,6 +145,17 @@
144 for (auto& ipc_fds : ipc_package->ipc_fds)145 for (auto& ipc_fds : ipc_package->ipc_fds)
145 platform->add_fd(ipc_fds);146 platform->add_fd(ipc_fds);
146147
148 if (auto const graphics_module = ipc_package->graphics_module)
149 {
150 auto const module = platform->mutable_graphics_module();
151
152 module->set_name(graphics_module->name);
153 module->set_major_version(graphics_module->major_version);
154 module->set_minor_version(graphics_module->minor_version);
155 module->set_micro_version(graphics_module->micro_version);
156 module->set_file(graphics_module->file);
157 }
158
147 auto display_config = display_changer->base_configuration();159 auto display_config = display_changer->base_configuration();
148 auto protobuf_config = response->mutable_display_configuration();160 auto protobuf_config = response->mutable_display_configuration();
149 mfd::pack_protobuf_display_configuration(*protobuf_config, *display_config);161 mfd::pack_protobuf_display_configuration(*protobuf_config, *display_config);
150162
=== modified file 'src/server/graphics/default_configuration.cpp'
--- src/server/graphics/default_configuration.cpp 2015-11-05 18:24:29 +0000
+++ src/server/graphics/default_configuration.cpp 2016-01-14 15:13:04 +0000
@@ -73,6 +73,21 @@
73 [this]()->std::shared_ptr<mg::Platform>73 [this]()->std::shared_ptr<mg::Platform>
74 {74 {
75 std::shared_ptr<mir::SharedLibrary> platform_library;75 std::shared_ptr<mir::SharedLibrary> platform_library;
76
77 // if a host socket is set we should use the host graphics module to create a "guest" platform
78 if (the_options()->is_set(options::host_socket_opt))
79 {
80 auto const host_connection = the_host_connection();
81
82 platform_library = std::make_shared<mir::SharedLibrary>(host_connection->graphics_platform_library());
83
84 auto create_guest_platform = platform_library->load_function<mg::CreateGuestPlatform>(
85 "create_guest_platform",
86 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);
87
88 return create_guest_platform(the_display_report(), host_connection);
89 }
90
76 // fallback to standalone if host socket is unset91 // fallback to standalone if host socket is unset
77 if (the_options()->is_set(options::platform_graphics_lib))92 if (the_options()->is_set(options::platform_graphics_lib))
78 {93 {
@@ -92,9 +107,6 @@
92 auto create_host_platform = platform_library->load_function<mg::CreateHostPlatform>(107 auto create_host_platform = platform_library->load_function<mg::CreateHostPlatform>(
93 "create_host_platform",108 "create_host_platform",
94 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);109 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);
95 auto create_guest_platform = platform_library->load_function<mg::CreateGuestPlatform>(
96 "create_guest_platform",
97 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);
98 auto describe_module = platform_library->load_function<mg::DescribeModule>(110 auto describe_module = platform_library->load_function<mg::DescribeModule>(
99 "describe_graphics_module",111 "describe_graphics_module",
100 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);112 MIR_SERVER_GRAPHICS_PLATFORM_VERSION);
@@ -105,13 +117,7 @@
105 description->minor_version,117 description->minor_version,
106 description->micro_version);118 description->micro_version);
107119
108 if (!the_options()->is_set(options::host_socket_opt))120 return create_host_platform(the_options(), the_emergency_cleanup(), the_display_report());
109 return create_host_platform(the_options(), the_emergency_cleanup(), the_display_report());
110 else
111 return create_guest_platform(
112 the_display_report(),
113 the_host_connection());
114
115 });121 });
116}122}
117123
118124
=== modified file 'src/server/graphics/nested/host_connection.h'
--- src/server/graphics/nested/host_connection.h 2015-06-17 05:20:42 +0000
+++ src/server/graphics/nested/host_connection.h 2016-01-14 15:13:04 +0000
@@ -52,6 +52,7 @@
5252
53 virtual void set_cursor_image(CursorImage const& image) = 0;53 virtual void set_cursor_image(CursorImage const& image) = 0;
54 virtual void hide_cursor() = 0;54 virtual void hide_cursor() = 0;
55 virtual auto graphics_platform_library() -> std::string = 0;
5556
56protected:57protected:
57 HostConnection() = default;58 HostConnection() = default;
5859
=== modified file 'src/server/graphics/nested/mir_client_host_connection.cpp'
--- src/server/graphics/nested/mir_client_host_connection.cpp 2015-10-07 19:22:52 +0000
+++ src/server/graphics/nested/mir_client_host_connection.cpp 2016-01-14 15:13:04 +0000
@@ -317,3 +317,17 @@
317 surface->hide_cursor();317 surface->hide_cursor();
318 }318 }
319}319}
320
321auto mgn::MirClientHostConnection::graphics_platform_library() -> std::string
322{
323 MirModuleProperties properties = { nullptr, 0, 0, 0, nullptr };
324
325 mir_connection_get_graphics_module(mir_connection, &properties);
326
327 if (properties.filename == nullptr)
328 {
329 BOOST_THROW_EXCEPTION(std::runtime_error("Cannot identify host graphics platform"));
330 }
331
332 return properties.filename;
333}
320\ No newline at end of file334\ No newline at end of file
321335
=== modified file 'src/server/graphics/nested/mir_client_host_connection.h'
--- src/server/graphics/nested/mir_client_host_connection.h 2015-06-17 05:20:42 +0000
+++ src/server/graphics/nested/mir_client_host_connection.h 2016-01-14 15:13:04 +0000
@@ -53,6 +53,7 @@
5353
54 void set_cursor_image(CursorImage const& image) override;54 void set_cursor_image(CursorImage const& image) override;
55 void hide_cursor() override;55 void hide_cursor() override;
56 auto graphics_platform_library() -> std::string override;
5657
57 virtual PlatformOperationMessage platform_operation(58 virtual PlatformOperationMessage platform_operation(
58 unsigned int op, PlatformOperationMessage const& request) override;59 unsigned int op, PlatformOperationMessage const& request) override;
5960
=== modified file 'tests/include/mir/test/doubles/stub_host_connection.h'
--- tests/include/mir/test/doubles/stub_host_connection.h 2015-06-17 05:20:42 +0000
+++ tests/include/mir/test/doubles/stub_host_connection.h 2016-01-14 15:13:04 +0000
@@ -76,6 +76,8 @@
76 void hide_cursor()76 void hide_cursor()
77 {77 {
78 }78 }
79
80 auto graphics_platform_library() -> std::string { return {}; }
79};81};
8082
8183
8284
=== modified file 'tests/mir_test_framework/platform_graphics_dummy.cpp'
--- tests/mir_test_framework/platform_graphics_dummy.cpp 2015-11-12 14:21:39 +0000
+++ tests/mir_test_framework/platform_graphics_dummy.cpp 2016-01-14 15:13:04 +0000
@@ -37,7 +37,8 @@
37 "dummy",37 "dummy",
38 MIR_VERSION_MAJOR,38 MIR_VERSION_MAJOR,
39 MIR_VERSION_MINOR,39 MIR_VERSION_MINOR,
40 MIR_VERSION_MICRO40 MIR_VERSION_MICRO,
41 "dummy"
41};42};
4243
43mir::ModuleProperties const* describe_graphics_module()44mir::ModuleProperties const* describe_graphics_module()
4445
=== modified file 'tests/mir_test_framework/stub_input.cpp'
--- tests/mir_test_framework/stub_input.cpp 2015-11-25 20:26:59 +0000
+++ tests/mir_test_framework/stub_input.cpp 2016-01-14 15:13:04 +0000
@@ -20,6 +20,8 @@
20#include "fake_input_device_impl.h"20#include "fake_input_device_impl.h"
21#include "mir/module_properties.h"21#include "mir/module_properties.h"
22#include "mir/assert_module_entry_point.h"22#include "mir/assert_module_entry_point.h"
23#include "mir/libname.h"
24
2325
24namespace mtf = mir_test_framework;26namespace mtf = mir_test_framework;
25namespace mo = mir::options;27namespace mo = mir::options;
@@ -52,10 +54,11 @@
52namespace54namespace
53{55{
54mir::ModuleProperties const description = {56mir::ModuleProperties const description = {
55 "stub-input",57 "mir:stub-input",
56 MIR_VERSION_MAJOR,58 MIR_VERSION_MAJOR,
57 MIR_VERSION_MINOR,59 MIR_VERSION_MINOR,
58 MIR_VERSION_MICRO60 MIR_VERSION_MICRO,
61 mir::libname()
59};62};
60}63}
6164
6265
=== modified file 'tests/mir_test_framework/stubbed_graphics_platform.cpp'
--- tests/mir_test_framework/stubbed_graphics_platform.cpp 2015-11-12 14:21:39 +0000
+++ tests/mir_test_framework/stubbed_graphics_platform.cpp 2016-01-14 15:13:04 +0000
@@ -28,6 +28,7 @@
28#include "mir/fd.h"28#include "mir/fd.h"
29#include "mir/assert_module_entry_point.h"29#include "mir/assert_module_entry_point.h"
30#include "mir/test/pipe.h"30#include "mir/test/pipe.h"
31#include "mir/libname.h"
3132
32#ifdef ANDROID33#ifdef ANDROID
33#include "mir/test/doubles/stub_android_native_buffer.h"34#include "mir/test/doubles/stub_android_native_buffer.h"
@@ -50,6 +51,17 @@
5051
51namespace52namespace
52{53{
54namespace
55{
56mir::ModuleProperties const module_properties = {
57 "mir:stub-graphics",
58 MIR_VERSION_MAJOR,
59 MIR_VERSION_MINOR,
60 MIR_VERSION_MICRO,
61 mir::libname()
62};
63}
64
53class StubFDBuffer : public mtd::StubBuffer65class StubFDBuffer : public mtd::StubBuffer
54{66{
55public:67public:
@@ -203,7 +215,7 @@
203215
204 std::shared_ptr<mg::PlatformIPCPackage> connection_ipc_package() override216 std::shared_ptr<mg::PlatformIPCPackage> connection_ipc_package() override
205 {217 {
206 auto package = std::make_shared<mg::PlatformIPCPackage>();218 auto package = std::make_shared<mg::PlatformIPCPackage>(&module_properties);
207 mtf::pack_stub_ipc_package(*package);219 mtf::pack_stub_ipc_package(*package);
208 return package;220 return package;
209 }221 }

Subscribers

People subscribed via source and target branches