18 #ifndef MIR_CLIENT_MIR_CONNECTION_H_
19 #define MIR_CLIENT_MIR_CONNECTION_H_
36 #include <unordered_set>
37 #include <unordered_map>
46 class ConnectParameters;
47 class PlatformOperationMessage;
48 class DisplayConfiguration;
53 class ConnectionConfiguration;
54 class ClientPlatformFactory;
55 class ClientBufferStream;
56 class ClientBufferStreamFactory;
57 class ConnectionSurfaceMap;
58 class DisplayConfiguration;
59 class EventHandlerRegister;
64 class DisplayServerDebug;
65 class MirBasicRpcChannel;
84 class ThreadedDispatcher;
113 const char* app_name,
126 void pong(int32_t serial);
133 unsigned int formats_size,
unsigned int& valid_formats);
138 mir::protobuf::BufferStream
const& protobuf_bs, std::string
const& surface_name,
mir::geometry::Size);
164 std::shared_ptr<mir::client::rpc::MirBasicRpcChannel>
rpc_channel()
const
170 std::shared_ptr<mir::logging::Logger>
const&
the_logger()
const;
176 {
MirConnection*
const self; ~Deregisterer(); } deregisterer;
180 std::shared_ptr<mir::SharedLibrary>
const platform_library;
182 mutable std::mutex mutex;
184 std::shared_ptr<mir::client::rpc::MirBasicRpcChannel>
const channel;
187 std::shared_ptr<mir::logging::Logger>
const logger;
188 std::unique_ptr<mir::protobuf::Void> void_response;
189 std::unique_ptr<mir::protobuf::Connection> connect_result;
190 std::atomic<bool> connect_done;
191 std::unique_ptr<mir::protobuf::Void> ignored;
192 std::unique_ptr<mir::protobuf::ConnectParameters> connect_parameters;
193 std::unique_ptr<mir::protobuf::PlatformOperationMessage> platform_operation_reply;
194 std::unique_ptr<mir::protobuf::DisplayConfiguration> display_configuration_response;
195 std::atomic<bool> disconnecting{
false};
197 std::shared_ptr<mir::client::ClientPlatformFactory>
const client_platform_factory;
198 std::shared_ptr<mir::client::ClientPlatform> platform;
199 std::shared_ptr<EGLNativeDisplayType> native_display;
201 std::shared_ptr<mir::input::receiver::InputPlatform>
const input_platform;
203 std::string error_message;
210 std::mutex release_wait_handle_guard;
211 std::vector<MirWaitHandle*> release_wait_handles;
213 std::shared_ptr<mir::client::DisplayConfiguration>
const display_configuration;
215 std::shared_ptr<mir::client::LifecycleControl>
const lifecycle_control;
217 std::shared_ptr<mir::client::PingHandler>
const ping_handler;
219 std::shared_ptr<mir::client::ConnectionSurfaceMap>
const surface_map;
221 std::shared_ptr<mir::client::EventHandlerRegister>
const event_handler_register;
223 std::unique_ptr<google::protobuf::Closure>
const pong_callback;
225 std::unique_ptr<mir::dispatch::ThreadedDispatcher>
const eventloop;
227 std::shared_ptr<mir::client::ClientBufferStreamFactory> buffer_stream_factory;
229 struct SurfaceRelease;
230 struct StreamRelease;
234 void set_error_message(std::string
const&
error);
235 void done_disconnect();
237 void released(SurfaceRelease);
238 void released(StreamRelease);
MirWaitHandle * connect(const char *app_name, mir_connected_callback callback, void *context)
Definition: mir_connection.cpp:305
All things Mir.
Definition: atomic_callback.h:25
Definition: client_types.h:289
Definition: mir_surface.h:77
Definition: mir_surface.h:136
mir::client::rpc::DisplayServer & display_server()
Definition: mir_connection.cpp:625
MirPromptSession * create_prompt_session()
Definition: mir_connection.cpp:250
Definition: mir_wait_handle.h:31
void release_consumer_stream(mir::client::ClientBufferStream *)
Definition: mir_connection.cpp:659
MirConnection & operator=(MirConnection const &)=delete
std::shared_ptr< mir::logging::Logger > const & the_logger() const
Definition: mir_connection.cpp:630
MirWaitHandle * create_surface(MirSurfaceSpec const &spec, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:153
void available_surface_formats(MirPixelFormat *formats, unsigned int formats_size, unsigned int &valid_formats)
Definition: mir_connection.cpp:459
MirWaitHandle * release_surface(MirSurface *surface, mir_surface_callback callback, void *context)
Definition: mir_connection.cpp:225
void done_display_configure()
Definition: mir_connection.cpp:580
MirWaitHandle * platform_operation(MirPlatformMessage const *request, mir_platform_operation_callback callback, void *context)
Definition: mir_connection.cpp:375
std::shared_ptr< mir::client::ClientPlatform > get_client_platform()
Definition: mir_connection.cpp:480
mir::client::ClientBufferStream * create_client_buffer_stream(int width, int height, MirPixelFormat format, MirBufferUsage buffer_usage, mir_buffer_stream_callback callback, void *context)
Definition: mir_connection.cpp:488
unsigned int width
Definition: black_arrow.c:4
EGLNativeDisplayType egl_native_display()
Definition: mir_connection.cpp:510
Definition: mir_display_server_debug.h:32
void pong(int32_t serial)
Definition: mir_connection.cpp:543
void populate(MirPlatformPackage &platform_package)
Definition: mir_connection.cpp:425
void register_ping_event_callback(mir_ping_event_callback callback, void *context)
Definition: mir_connection.cpp:538
void register_display_change_callback(mir_display_config_callback callback, void *context)
Definition: mir_connection.cpp:550
Definition: mir_prompt_session.h:49
Definition: client_context.h:29
MirWaitHandle * release_buffer_stream(mir::client::ClientBufferStream *, mir_buffer_stream_callback callback, void *context)
Definition: mir_connection.cpp:635
void on_surface_created(int id, MirSurface *surface)
Definition: mir_connection.cpp:528
std::shared_ptr< mir::client::rpc::MirBasicRpcChannel > rpc_channel() const
Definition: mir_connection.h:164
~MirConnection() noexcept
Definition: mir_connection.cpp:138
MirWaitHandle * disconnect()
Definition: mir_connection.cpp:340
MirWaitHandle * configure_display(MirDisplayConfiguration *configuration)
Definition: mir_connection.cpp:592
unsigned int height
Definition: black_arrow.c:5
Definition: client_buffer_stream.h:45
void on_stream_created(int id, mir::client::ClientBufferStream *stream)
Definition: mir_connection.cpp:523
MirConnection(std::string const &error_message)
Definition: mir_connection.cpp:97
error
Definition: connector_report_tp.h:60
char const * get_error_message()
Definition: mir_connection.cpp:164
MirPixelFormat egl_pixel_format(EGLDisplay, EGLConfig) const
Definition: mir_connection.cpp:517
Definition: mir_connection.h:88
void register_lifecycle_event_callback(mir_lifecycle_event_callback callback, void *context)
Definition: mir_connection.cpp:533
Definition: connection_configuration.h:55
static bool is_valid(MirConnection *connection)
Definition: mir_connection.cpp:408
MirDisplayConfiguration * create_copy_of_display_config()
Definition: mir_connection.cpp:453
Definition: mir_display_server.h:33
std::shared_ptr< mir::client::ClientBufferStream > make_consumer_stream(mir::protobuf::BufferStream const &protobuf_bs, std::string const &surface_name, mir::geometry::Size)
Definition: mir_connection.cpp:504