Mir

Merge lp:~alan-griffiths/mir/configurable-graphicsplatform into lp:~mir-team/mir/trunk

Proposed by Alan Griffiths
Status: Merged
Approved by: Kevin DuBois
Approved revision: no longer in the source branch.
Merged at revision: 769
Proposed branch: lp:~alan-griffiths/mir/configurable-graphicsplatform
Merge into: lp:~mir-team/mir/trunk
Prerequisite: lp:~alan-griffiths/mir/dlopen-graphicsplatform
Diff against target: 73 lines (+29/-2)
1 file modified
src/server/default_server_configuration.cpp (+29/-2)
To merge this branch: bzr merge lp:~alan-griffiths/mir/configurable-graphicsplatform
Reviewer Review Type Date Requested Status
Kevin DuBois (community) Approve
Robert Carr (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+170853@code.launchpad.net

Commit message

config: allow graphics platform library to be selected by command-line/config

Description of the change

config: allow graphics platform library to be selected by command-line/config

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 :
review: Approve (continuous-integration)
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Interesting approach and probably a good first step.

Though I suspect the final "driver model" needs to be implementable with a pure C API. So maybe it's dangerous to establish a precedent that we load C++ code dynamically. We'd be establishing a C++ ABI when we don't want one, in the end.

Revision history for this message
Robert Carr (robertcarr) wrote :

LGTM. I agree that the "driver model" needs a C API, though I think this is more about correctly supporting mir-on-mir, mir-on-x, etc. Either way

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

lgtm too

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/server/default_server_configuration.cpp'
--- src/server/default_server_configuration.cpp 2013-06-21 16:21:33 +0000
+++ src/server/default_server_configuration.cpp 2013-06-21 16:21:33 +0000
@@ -69,6 +69,8 @@
69#include "mir/time/high_resolution_clock.h"69#include "mir/time/high_resolution_clock.h"
70#include "mir/default_configuration.h"70#include "mir/default_configuration.h"
7171
72#include <map>
73
72namespace mc = mir::compositor;74namespace mc = mir::compositor;
73namespace me = mir::events;75namespace me = mir::events;
74namespace geom = mir::geometry;76namespace geom = mir::geometry;
@@ -83,6 +85,7 @@
83namespace85namespace
84{86{
85std::initializer_list<std::shared_ptr<mi::EventFilter> const> empty_filter_list{};87std::initializer_list<std::shared_ptr<mi::EventFilter> const> empty_filter_list{};
88mir::SharedLibrary const* load_library(std::string const& libname);
86}89}
8790
88namespace91namespace
@@ -157,6 +160,9 @@
157char const* const log_opt_value = "log";160char const* const log_opt_value = "log";
158char const* const lttng_opt_value = "lttng";161char const* const lttng_opt_value = "lttng";
159162
163char const* const platform_graphics_lib = "platform-graphics-lib";
164char const* const default_platform_graphics_lib = "libmirplatformgraphics.so";
165
160void parse_arguments(166void parse_arguments(
161 boost::program_options::options_description desc,167 boost::program_options::options_description desc,
162 std::shared_ptr<mir::options::ProgramOption> const& options,168 std::shared_ptr<mir::options::ProgramOption> const& options,
@@ -213,6 +219,8 @@
213 add_options()219 add_options()
214 ("file,f", po::value<std::string>(),220 ("file,f", po::value<std::string>(),
215 "Socket filename")221 "Socket filename")
222 (platform_graphics_lib, po::value<std::string>(),
223 "Library to use for platform graphics support [default=libmirplatformgraphics.so")
216 ("enable-input,i", po::value<bool>(),224 ("enable-input,i", po::value<bool>(),
217 "Enable input. [bool:default=true]")225 "Enable input. [bool:default=true]")
218 (display_report_opt, po::value<std::string>(),226 (display_report_opt, po::value<std::string>(),
@@ -297,8 +305,8 @@
297 return graphics_platform(305 return graphics_platform(
298 [this]()306 [this]()
299 {307 {
300 static SharedLibrary libmirplatformgraphics("libmirplatformgraphics.so");308 auto graphics_lib = load_library(the_options()->get(platform_graphics_lib, default_platform_graphics_lib));
301 static auto create_platform = libmirplatformgraphics.load_function<mg::CreatePlatform>("create_platform");309 auto create_platform = graphics_lib->load_function<mg::CreatePlatform>("create_platform");
302 return create_platform(the_options(), the_display_report());310 return create_platform(the_options(), the_display_report());
303 });311 });
304}312}
@@ -729,3 +737,22 @@
729 return std::make_shared<mir::AsioMainLoop>();737 return std::make_shared<mir::AsioMainLoop>();
730 });738 });
731}739}
740
741namespace
742{
743mir::SharedLibrary const* load_library(std::string const& libname)
744{
745 // There's no point in loading twice, and it isn't safe to unload...
746 static std::map<std::string, std::shared_ptr<mir::SharedLibrary>> libraries_cache;
747
748 if (auto& ptr = libraries_cache[libname])
749 {
750 return ptr.get();
751 }
752 else
753 {
754 ptr = std::make_shared<mir::SharedLibrary>(libname);
755 return ptr.get();
756 }
757}
758}

Subscribers

People subscribed via source and target branches