[mutter/wip/carlosg/rt-scheduler: 2/5] backends: Shuffle backend initialization



commit 03d044e29d5c3913fb8b1f5e8d7fd07ae0685f11
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 afb8b73aa..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,
@@ -822,14 +843,6 @@ meta_backend_initable_init (GInitable     *initable,
   priv->egl = g_object_new (META_TYPE_EGL, NULL);
 #endif
 
-  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;
-
   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]