[mutter/wip/carlosg/rt-scheduler: 2/5] backends: Shuffle backend initialization
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/rt-scheduler: 2/5] backends: Shuffle backend initialization
- Date: Wed, 8 May 2019 14:47:52 +0000 (UTC)
commit f2cf718361a366493e632270f4bdf7205b65f747
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed May 8 14:02:31 2019 +0200
backends: Shuffle backend initialization
Move to post_init() everything that sprawls worker threads, the GInitable
init() function now creates the essentials to initialize the Clutter backend.
This is done so there is a point in time where Clutter backend and Cogl
renderer are created, but we still didn't clone() the main thread.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/460
src/backends/meta-backend.c | 90 ++++++++++++++++++++++++---------------------
1 file changed, 49 insertions(+), 41 deletions(-)
---
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index ae858aae5..04e8de486 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -153,8 +153,9 @@ struct _MetaBackendPrivate
};
typedef struct _MetaBackendPrivate MetaBackendPrivate;
-static void
-initable_iface_init (GInitableIface *initable_iface);
+static void initable_iface_init (GInitableIface *initable_iface);
+static void meta_backend_maybe_watch_upower (MetaBackend *backend);
+static void meta_backend_connect_to_system_bus (MetaBackend *backend);
G_DEFINE_ABSTRACT_TYPE_WITH_CODE (MetaBackend, meta_backend, G_TYPE_OBJECT,
G_ADD_PRIVATE (MetaBackend)
@@ -469,6 +470,17 @@ meta_backend_create_input_settings (MetaBackend *backend)
return META_BACKEND_GET_CLASS (backend)->create_input_settings (backend);
}
+static MetaMonitorManager *
+meta_backend_create_monitor_manager (MetaBackend *backend,
+ GError **error)
+{
+ if (g_getenv ("META_DUMMY_MONITORS"))
+ return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
+
+ return META_BACKEND_GET_CLASS (backend)->create_monitor_manager (backend,
+ error);
+}
+
static gboolean
meta_backend_real_post_init (MetaBackend *backend,
GError **error)
@@ -476,6 +488,18 @@ meta_backend_real_post_init (MetaBackend *backend,
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
ClutterDeviceManager *device_manager = clutter_device_manager_get_default ();
+ meta_backend_maybe_watch_upower (backend);
+
+ priv->settings = meta_settings_new (backend);
+
+ priv->orientation_manager = g_object_new (META_TYPE_ORIENTATION_MANAGER, NULL);
+
+ priv->monitor_manager = meta_backend_create_monitor_manager (backend, error);
+ if (!priv->monitor_manager)
+ return FALSE;
+
+ meta_backend_connect_to_system_bus (backend);
+
priv->stage = meta_stage_new (backend);
clutter_actor_realize (priv->stage);
META_BACKEND_GET_CLASS (backend)->select_stage_events (backend);
@@ -679,23 +703,21 @@ upower_vanished (GDBusConnection *connection,
}
static void
-meta_backend_constructed (GObject *object)
+meta_backend_maybe_watch_upower (MetaBackend *backend)
{
- MetaBackend *backend = META_BACKEND (object);
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
- MetaBackendClass *backend_class =
- META_BACKEND_GET_CLASS (backend);
+ MetaBackendClass *backend_class = META_BACKEND_GET_CLASS (backend);
- if (backend_class->is_lid_closed != meta_backend_real_is_lid_closed)
- return;
-
- priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
- "org.freedesktop.UPower",
- G_BUS_NAME_WATCHER_FLAGS_NONE,
- upower_appeared,
- upower_vanished,
- backend,
- NULL);
+ if (backend_class->is_lid_closed == meta_backend_real_is_lid_closed)
+ {
+ priv->upower_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+ "org.freedesktop.UPower",
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ upower_appeared,
+ upower_vanished,
+ backend,
+ NULL);
+ }
}
static void
@@ -705,7 +727,6 @@ meta_backend_class_init (MetaBackendClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = meta_backend_finalize;
- object_class->constructed = meta_backend_constructed;
klass->post_init = meta_backend_real_post_init;
klass->create_cursor_renderer = meta_backend_real_create_cursor_renderer;
@@ -748,17 +769,6 @@ meta_backend_class_init (MetaBackendClass *klass)
stage_views_disabled = g_strcmp0 (mutter_stage_views, "0") == 0;
}
-static MetaMonitorManager *
-meta_backend_create_monitor_manager (MetaBackend *backend,
- GError **error)
-{
- if (g_getenv ("META_DUMMY_MONITORS"))
- return g_object_new (META_TYPE_MONITOR_MANAGER_DUMMY, NULL);
-
- return META_BACKEND_GET_CLASS (backend)->create_monitor_manager (backend,
- error);
-}
-
static MetaRenderer *
meta_backend_create_renderer (MetaBackend *backend,
GError **error)
@@ -810,6 +820,17 @@ system_bus_gotten_cb (GObject *object,
NULL);
}
+static void
+meta_backend_connect_to_system_bus (MetaBackend *backend)
+{
+ MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
+
+ g_bus_get (G_BUS_TYPE_SYSTEM,
+ priv->cancellable,
+ system_bus_gotten_cb,
+ backend);
+}
+
static gboolean
meta_backend_initable_init (GInitable *initable,
GCancellable *cancellable,
@@ -818,18 +839,10 @@ meta_backend_initable_init (GInitable *initable,
MetaBackend *backend = META_BACKEND (initable);
MetaBackendPrivate *priv = meta_backend_get_instance_private (backend);
- priv->settings = meta_settings_new (backend);
-
#ifdef HAVE_EGL
priv->egl = g_object_new (META_TYPE_EGL, NULL);
#endif
- priv->orientation_manager = g_object_new (META_TYPE_ORIENTATION_MANAGER, NULL);
-
- priv->monitor_manager = meta_backend_create_monitor_manager (backend, error);
- if (!priv->monitor_manager)
- return FALSE;
-
priv->renderer = meta_backend_create_renderer (backend, error);
if (!priv->renderer)
return FALSE;
@@ -837,12 +850,7 @@ meta_backend_initable_init (GInitable *initable,
priv->cursor_tracker = g_object_new (META_TYPE_CURSOR_TRACKER, NULL);
priv->dnd = g_object_new (META_TYPE_DND, NULL);
-
priv->cancellable = g_cancellable_new ();
- g_bus_get (G_BUS_TYPE_SYSTEM,
- priv->cancellable,
- system_bus_gotten_cb,
- backend);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]