Mir
default_server_configuration.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2012-2014 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU 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 General Public License for more details.
12  *
13  * You should have received a copy of the GNU 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 #ifndef MIR_DEFAULT_SERVER_CONFIGURATION_H_
19 #define MIR_DEFAULT_SERVER_CONFIGURATION_H_
20 
21 #include "mir/cached_ptr.h"
24 
25 #include <memory>
26 #include <string>
27 
28 namespace mir
29 {
30 class ServerActionQueue;
31 class SharedLibrary;
32 class SharedLibraryProberReport;
33 
34 namespace cookie
35 {
36 class Authority;
37 }
38 namespace dispatch
39 {
40 class MultiplexingDispatchable;
41 }
42 namespace compositor
43 {
44 class Renderer;
45 class BufferStreamFactory;
46 class Scene;
47 class Drawer;
48 class DisplayBufferCompositorFactory;
49 class Compositor;
50 class RendererFactory;
51 class CompositorReport;
52 class FrameDroppingPolicyFactory;
53 }
54 namespace frontend
55 {
56 class Shell;
57 class Connector;
58 class ConnectorReport;
59 class ProtobufIpcFactory;
60 class ConnectionCreator;
61 class SessionMediatorReport;
62 class MessageProcessorReport;
63 class SessionAuthorizer;
64 class EventSink;
65 class DisplayChanger;
66 class Screencast;
67 }
68 
69 namespace shell
70 {
72 class InputTargeter;
73 class FocusSetter;
74 class FocusController;
75 class DisplayLayout;
77 class Shell;
78 class ShellReport;
79 class SurfaceStack;
81 namespace detail { class FrontendShell; }
82 }
83 namespace time
84 {
85 class Clock;
86 }
87 namespace scene
88 {
89 class SurfaceFactory;
93 class PixelBuffer;
94 class SessionContainer;
95 class SessionEventSink;
97 class SessionListener;
98 class SessionCoordinator;
99 class SnapshotStrategy;
100 class SurfaceStack;
101 class SceneReport;
105 }
106 namespace graphics
107 {
108 class Platform;
109 class Display;
110 class DisplayReport;
111 class DisplayConfigurationReport;
112 class GraphicBufferAllocator;
113 class Cursor;
114 class CursorImage;
115 class GLConfig;
116 namespace nested
117 {
118 class HostConnection;
120 }
121 }
122 namespace input
123 {
124 class InputReport;
125 class Scene;
126 class InputManager;
127 class SurfaceInputDispatcher;
128 class InputDeviceRegistry;
129 class InputDeviceHub;
130 class DefaultInputDeviceHub;
131 class CompositeEventFilter;
132 class EventFilterChainDispatcher;
133 class InputChannelFactory;
134 class CursorListener;
135 class TouchVisualizer;
136 class InputRegion;
137 class InputSender;
138 class CursorImages;
139 class Seat;
140 }
141 
142 namespace logging
143 {
144 class Logger;
145 }
146 
147 namespace options
148 {
149 class Option;
150 class Configuration;
151 }
152 
153 namespace report
154 {
155 class ReportFactory;
156 }
157 
159 {
160 public:
161  DefaultServerConfiguration(int argc, char const* argv[]);
162  explicit DefaultServerConfiguration(std::shared_ptr<options::Configuration> const& configuration_options);
163 
167  std::shared_ptr<frontend::Connector> the_connector() override;
168  std::shared_ptr<frontend::Connector> the_prompt_connector() override;
169  std::shared_ptr<graphics::Display> the_display() override;
170  std::shared_ptr<compositor::Compositor> the_compositor() override;
171  std::shared_ptr<input::InputManager> the_input_manager() override;
172  std::shared_ptr<MainLoop> the_main_loop() override;
173  std::shared_ptr<ServerStatusListener> the_server_status_listener() override;
174  std::shared_ptr<DisplayChanger> the_display_changer() override;
175  std::shared_ptr<graphics::Platform> the_graphics_platform() override;
176  std::shared_ptr<input::InputDispatcher> the_input_dispatcher() override;
177  std::shared_ptr<EmergencyCleanup> the_emergency_cleanup() override;
178  std::shared_ptr<cookie::Authority> the_cookie_authority() override;
187  auto the_fatal_error_strategy() -> void (*)(char const* reason, ...) override final;
188  std::shared_ptr<scene::ApplicationNotRespondingDetector> the_application_not_responding_detector() override;
194  virtual std::shared_ptr<compositor::RendererFactory> the_renderer_factory();
195  virtual std::shared_ptr<shell::DisplayConfigurationController> the_display_configuration_controller();
196  virtual std::shared_ptr<graphics::DisplayConfigurationPolicy> the_display_configuration_policy();
197  virtual std::shared_ptr<graphics::nested::HostConnection> the_host_connection();
198  virtual std::shared_ptr<graphics::GLConfig> the_gl_config();
204  virtual std::shared_ptr<graphics::DisplayReport> the_display_report();
205  virtual std::shared_ptr<graphics::Cursor> the_cursor();
206  virtual std::shared_ptr<graphics::Cursor> wrap_cursor(std::shared_ptr<graphics::Cursor> const& wrapped);
207  virtual std::shared_ptr<graphics::CursorImage> the_default_cursor_image();
208  virtual std::shared_ptr<input::CursorImages> the_cursor_images();
209  virtual std::shared_ptr<graphics::DisplayConfigurationReport> the_display_configuration_report();
210 
216  virtual std::shared_ptr<compositor::CompositorReport> the_compositor_report();
217  virtual std::shared_ptr<compositor::DisplayBufferCompositorFactory> the_display_buffer_compositor_factory();
218  virtual std::shared_ptr<compositor::DisplayBufferCompositorFactory> wrap_display_buffer_compositor_factory(
219  std::shared_ptr<compositor::DisplayBufferCompositorFactory> const& wrapped);
225  virtual std::shared_ptr<graphics::GraphicBufferAllocator> the_buffer_allocator();
226  virtual std::shared_ptr<compositor::Scene> the_scene();
227  virtual std::shared_ptr<compositor::FrameDroppingPolicyFactory> the_frame_dropping_policy_factory();
233  virtual std::shared_ptr<frontend::SessionMediatorReport> the_session_mediator_report();
234  virtual std::shared_ptr<frontend::MessageProcessorReport> the_message_processor_report();
235  virtual std::shared_ptr<frontend::SessionAuthorizer> the_session_authorizer();
236  // the_frontend_shell() is an adapter for the_shell().
237  // To customize this behaviour it is recommended you override wrap_shell().
238  std::shared_ptr<frontend::Shell> the_frontend_shell();
239  virtual std::shared_ptr<frontend::EventSink> the_global_event_sink();
240  virtual std::shared_ptr<frontend::DisplayChanger> the_frontend_display_changer();
241  virtual std::shared_ptr<frontend::Screencast> the_screencast();
245  virtual std::shared_ptr<frontend::ConnectionCreator> the_connection_creator();
246  virtual std::shared_ptr<frontend::ConnectionCreator> the_prompt_connection_creator();
247  virtual std::shared_ptr<frontend::ConnectorReport> the_connector_report();
251  // the_focus_controller() is an interface for the_shell().
252  std::shared_ptr<shell::FocusController> the_focus_controller();
253 
257  virtual auto the_shell() -> std::shared_ptr<shell::Shell>;
258  virtual auto the_window_manager_builder() -> shell::WindowManagerBuilder;
259  virtual std::shared_ptr<scene::SessionListener> the_session_listener();
260  virtual std::shared_ptr<shell::DisplayLayout> the_shell_display_layout();
261  virtual std::shared_ptr<scene::PromptSessionListener> the_prompt_session_listener();
262  virtual std::shared_ptr<scene::PromptSessionManager> the_prompt_session_manager();
263  virtual std::shared_ptr<shell::HostLifecycleEventListener> the_host_lifecycle_event_listener();
264  virtual std::shared_ptr<shell::PersistentSurfaceStore> the_persistent_surface_store();
265  virtual std::shared_ptr<shell::ShellReport> the_shell_report();
272  virtual std::shared_ptr<scene::PixelBuffer> the_pixel_buffer();
273  virtual std::shared_ptr<scene::SnapshotStrategy> the_snapshot_strategy();
274  virtual std::shared_ptr<scene::SessionContainer> the_session_container();
275  virtual std::shared_ptr<scene::SessionEventSink> the_session_event_sink();
276  virtual std::shared_ptr<scene::SessionEventHandlerRegister> the_session_event_handler_register();
277  virtual std::shared_ptr<scene::SurfaceFactory> the_surface_factory();
278  virtual std::shared_ptr<shell::SurfaceStack> the_surface_stack();
279  virtual std::shared_ptr<shell::SurfaceStack> wrap_surface_stack(std::shared_ptr<shell::SurfaceStack> const& wrapped);
285  virtual std::shared_ptr<scene::BufferStreamFactory> the_buffer_stream_factory();
286  virtual std::shared_ptr<scene::SceneReport> the_scene_report();
292  virtual std::shared_ptr<scene::SessionCoordinator> the_session_coordinator();
293  virtual std::shared_ptr<scene::CoordinateTranslator> the_coordinate_translator();
299  virtual std::shared_ptr<input::InputReport> the_input_report();
300  virtual std::shared_ptr<input::CompositeEventFilter> the_composite_event_filter();
301 
302  virtual std::shared_ptr<input::EventFilterChainDispatcher> the_event_filter_chain_dispatcher();
303 
304  virtual std::shared_ptr<shell::InputTargeter> the_input_targeter();
305  virtual std::shared_ptr<input::Scene> the_input_scene();
306  virtual std::shared_ptr<input::CursorListener> the_cursor_listener();
307  virtual std::shared_ptr<input::TouchVisualizer> the_touch_visualizer();
308  virtual std::shared_ptr<input::InputRegion> the_input_region();
309  virtual std::shared_ptr<input::InputSender> the_input_sender();
310  virtual std::shared_ptr<input::Seat> the_seat();
311 
312  // new input reading related parts:
313  virtual std::shared_ptr<dispatch::MultiplexingDispatchable> the_input_reading_multiplexer();
314  virtual std::shared_ptr<input::InputDeviceRegistry> the_input_device_registry();
315  virtual std::shared_ptr<input::InputDeviceHub> the_input_device_hub();
316  virtual std::shared_ptr<input::SurfaceInputDispatcher> the_surface_input_dispatcher();
322  virtual std::shared_ptr<logging::Logger> the_logger();
325  virtual std::shared_ptr<time::Clock> the_clock();
326  virtual std::shared_ptr<ServerActionQueue> the_server_action_queue();
327  virtual std::shared_ptr<SharedLibraryProberReport> the_shared_library_prober_report();
328 
329 private:
330  // We need to ensure the platform library is destroyed last as the
331  // DisplayConfiguration can hold weak_ptrs to objects created from the library
332  // TODO: We need a better way to manage the lifetimes of platform libraries
333  std::shared_ptr<mir::SharedLibrary> platform_library;
334 
335 protected:
336  std::shared_ptr<options::Option> the_options() const;
337  std::shared_ptr<graphics::nested::MirClientHostConnection> the_mir_client_host_connection();
338 
339  virtual std::shared_ptr<input::InputChannelFactory> the_input_channel_factory();
340  virtual std::shared_ptr<scene::MediatingDisplayChanger> the_mediating_display_changer();
341  virtual std::shared_ptr<frontend::ProtobufIpcFactory> new_ipc_factory(
342  std::shared_ptr<frontend::SessionAuthorizer> const& session_authorizer);
343 
348  virtual std::shared_ptr<graphics::DisplayConfigurationPolicy> wrap_display_configuration_policy(
349  std::shared_ptr<graphics::DisplayConfigurationPolicy> const& wrapped);
350 
351  virtual std::shared_ptr<shell::Shell> wrap_shell(
352  std::shared_ptr<shell::Shell> const& wrapped);
353 
354  virtual std::shared_ptr<input::CursorListener> wrap_cursor_listener(
355  std::shared_ptr<input::CursorListener> const& wrapped);
360 
381 
396 
428 
429 private:
430  std::shared_ptr<options::Configuration> const configuration_options;
431  std::shared_ptr<input::EventFilter> const default_filter;
432 
433  virtual std::string the_socket_file() const;
434 
435  // The following caches and factory functions are internal to the
436  // default implementations of corresponding the Mir components
437  CachedPtr<scene::BroadcastingSessionEventSink> broadcasting_session_event_sink;
438 
439  std::shared_ptr<scene::BroadcastingSessionEventSink> the_broadcasting_session_event_sink();
440 
441  auto report_factory(char const* report_opt) -> std::unique_ptr<report::ReportFactory>;
442 
444 };
445 }
446 
447 
448 #endif /* MIR_DEFAULT_SERVER_CONFIGURATION_H_ */
CachedPtr< dispatch::MultiplexingDispatchable > input_reading_multiplexer
Definition: default_server_configuration.h:367
Definition: shell.h:51
CachedPtr< logging::Logger > logger
Definition: default_server_configuration.h:406
All things Mir.
Definition: atomic_callback.h:25
Interface to the layout of the display outputs.
Definition: display_layout.h:36
CachedPtr< input::InputManager > input_manager
Definition: default_server_configuration.h:364
CachedPtr< input::DefaultInputDeviceHub > default_input_device_hub
Definition: default_server_configuration.h:366
Definition: session_coordinator.h:41
CachedPtr< shell::ShellReport > shell_report
Definition: default_server_configuration.h:425
Interface for extracting the pixels from a graphics::Buffer.
Definition: pixel_buffer.h:36
CachedPtr< compositor::Compositor > compositor
Definition: default_server_configuration.h:404
Support for the debug "surface to screen" coordinate translation interface.
Definition: coordinate_translator.h:40
CachedPtr< graphics::GLConfig > gl_config
Definition: default_server_configuration.h:415
Definition: surface_stack.h:68
Definition: scene_report.h:29
CachedPtr< graphics::DisplayReport > display_report
Definition: default_server_configuration.h:407
CachedPtr< input::InputReport > input_report
Definition: default_server_configuration.h:361
CachedPtr< scene::SessionContainer > session_container
Definition: default_server_configuration.h:398
CachedPtr< shell::SurfaceStack > surface_stack
Definition: default_server_configuration.h:394
CachedPtr< graphics::Cursor > cursor
Definition: default_server_configuration.h:378
CachedPtr< ServerStatusListener > server_status_listener
Definition: default_server_configuration.h:411
CachedPtr< input::InputRegion > input_region
Definition: default_server_configuration.h:370
CachedPtr< MainLoop > main_loop
Definition: default_server_configuration.h:410
CachedPtr< frontend::Screencast > screencast
Definition: default_server_configuration.h:389
CachedPtr< frontend::MessageProcessorReport > message_processor_report
Definition: default_server_configuration.h:384
CachedPtr< shell::HostLifecycleEventListener > host_lifecycle_event_listener
Definition: default_server_configuration.h:421
Definition: mir_client_host_connection.h:52
Definition: prompt_session_listener.h:31
Definition: server_configuration.h:66
CachedPtr< scene::MediatingDisplayChanger > mediating_display_changer
Definition: default_server_configuration.h:414
CachedPtr< graphics::Platform > graphics_platform
Definition: default_server_configuration.h:375
CachedPtr< SharedLibraryProberReport > shared_library_prober_report
Definition: default_server_configuration.h:423
Definition: host_connection.h:40
CachedPtr< scene::ApplicationNotRespondingDetector > application_not_responding_detector
Definition: default_server_configuration.h:426
CachedPtr< time::Clock > clock
Definition: default_server_configuration.h:409
An interface used to control the selection of keyboard input focus.
Definition: input_targeter.h:35
CachedPtr< input::InputSender > input_sender
Definition: default_server_configuration.h:369
Definition: focus_controller.h:38
CachedPtr< scene::SessionListener > session_listener
Definition: default_server_configuration.h:399
CachedPtr< graphics::DisplayConfigurationPolicy > display_configuration_policy
Definition: default_server_configuration.h:412
CachedPtr< input::SurfaceInputDispatcher > surface_input_dispatcher
Definition: default_server_configuration.h:365
A store for Surface information divorced from the lifetime of any given Session.
Definition: persistent_surface_store.h:46
CachedPtr< scene::CoordinateTranslator > coordinate_translator
Definition: default_server_configuration.h:419
CachedPtr< scene::PromptSessionManager > prompt_session_manager
Definition: default_server_configuration.h:417
Definition: surface_factory.h:32
CachedPtr< input::CursorImages > cursor_images
Definition: default_server_configuration.h:380
CachedPtr< frontend::Connector > prompt_connector
Definition: default_server_configuration.h:359
CachedPtr< shell::Shell > shell
Definition: default_server_configuration.h:424
CachedPtr< scene::PromptSessionListener > prompt_session_listener
Definition: default_server_configuration.h:416
CachedPtr< frontend::ConnectionCreator > connection_creator
Definition: default_server_configuration.h:387
Definition: session_container.h:32
Definition: surface_stack.h:40
CachedPtr< shell::InputTargeter > input_targeter
Definition: default_server_configuration.h:371
CachedPtr< frontend::Connector > connector
Definition: default_server_configuration.h:358
CachedPtr< scene::SceneReport > scene_report
Definition: default_server_configuration.h:395
CachedPtr< compositor::RendererFactory > renderer_factory
Definition: default_server_configuration.h:390
Definition: shell_report.h:38
CachedPtr< input::CompositeEventFilter > composite_event_filter
Definition: default_server_configuration.h:363
CachedPtr< input::Seat > seat
Definition: default_server_configuration.h:374
Definition: broadcasting_session_event_sink.h:32
CachedPtr< frontend::SessionMediatorReport > session_mediator_report
Definition: default_server_configuration.h:383
Definition: session_event_sink.h:30
CachedPtr< compositor::CompositorReport > compositor_report
Definition: default_server_configuration.h:405
CachedPtr< frontend::ConnectorReport > connector_report
Definition: default_server_configuration.h:382
CachedPtr< input::InputDispatcher > input_dispatcher
Definition: default_server_configuration.h:368
CachedPtr< scene::SessionCoordinator > session_coordinator
Definition: default_server_configuration.h:418
CachedPtr< scene::SurfaceFactory > surface_factory
Definition: default_server_configuration.h:397
CachedPtr< shell::DisplayLayout > shell_display_layout
Definition: default_server_configuration.h:402
CachedPtr< shell::PersistentSurfaceStore > surface_store
Definition: default_server_configuration.h:422
CachedPtr< graphics::Display > display
Definition: default_server_configuration.h:377
CachedPtr< input::TouchVisualizer > touch_visualizer
Definition: default_server_configuration.h:373
Definition: prompt_session_manager.h:34
CachedPtr< input::CursorListener > cursor_listener
Definition: default_server_configuration.h:372
CachedPtr< cookie::Authority > cookie_authority
Definition: default_server_configuration.h:427
CachedPtr< scene::PixelBuffer > pixel_buffer
Definition: default_server_configuration.h:400
Definition: mediating_display_changer.h:51
CachedPtr< graphics::CursorImage > default_cursor_image
Definition: default_server_configuration.h:379
CachedPtr< scene::SurfaceStack > scene_surface_stack
Definition: default_server_configuration.h:393
CachedPtr< frontend::EventSink > global_event_sink
Definition: default_server_configuration.h:386
Definition: frontend_shell.h:37
Definition: default_server_configuration.h:158
Definition: session_event_handler_register.h:31
CachedPtr< compositor::FrameDroppingPolicyFactory > frame_dropping_policy_factory
Definition: default_server_configuration.h:392
Definition: host_lifecycle_event_listener.h:29
CachedPtr< compositor::BufferStreamFactory > buffer_stream_factory
Definition: default_server_configuration.h:391
CachedPtr< compositor::DisplayBufferCompositorFactory > display_buffer_compositor_factory
Definition: default_server_configuration.h:403
Definition: display_configuration_controller.h:33
CachedPtr< input::EventFilterChainDispatcher > event_filter_chain_dispatcher
Definition: default_server_configuration.h:362
CachedPtr< scene::SnapshotStrategy > snapshot_strategy
Definition: default_server_configuration.h:401
Definition: snapshot_strategy.h:32
std::function< std::shared_ptr< WindowManager >(FocusController *focus_controller)> WindowManagerBuilder
WindowManagers are built while initializing an AbstractShell, so a builder functor is needed...
Definition: window_manager_builder.h:34
CachedPtr< EmergencyCleanup > emergency_cleanup
Definition: default_server_configuration.h:420
CachedPtr< graphics::GraphicBufferAllocator > buffer_allocator
Definition: default_server_configuration.h:376
Definition: session_listener.h:31
Definition: buffer_stream_factory.h:34
CachedPtr< graphics::nested::MirClientHostConnection > host_connection
Definition: default_server_configuration.h:413
CachedPtr< frontend::SessionAuthorizer > session_authorizer
Definition: default_server_configuration.h:385
CachedPtr< frontend::ConnectionCreator > prompt_connection_creator
Definition: default_server_configuration.h:388
CachedPtr< graphics::DisplayConfigurationReport > display_configuration_report
Definition: default_server_configuration.h:408

Copyright © 2012-2015 Canonical Ltd.
Generated on Wed Mar 30 00:29:56 UTC 2016