[gnome-builder] plugins/sysprof: use sysprof-agent to profile processes



commit 3d65abf509c7394886b1e5a591ec7cd0589e5630
Author: Christian Hergert <chergert redhat com>
Date:   Thu Jul 21 19:04:59 2022 -0700

    plugins/sysprof: use sysprof-agent to profile processes
    
    gnome-builder-sysprof is useful enough generally to get into SDKs that I've
    moved it into Sysprof directly. That way we can hopefully do more things
    like memprof on GNOME apps if we get it in gnome-build-meta.
    
    This switches to sysprof-agent and sets up the proper D-Bus API for it
    to work instead of our little internal thing.
    
    If we don't find sysprof-agent in the runtime, we just use our bundled
    version within the Builder file-system namespace (which limits us, but
    works the same as this did previously).

 build-aux/flatpak/org.gnome.Builder.Devel.json     |  4 ++--
 src/plugins/sysprof/gbp-sysprof-tool.c             | 23 ++++++++--------------
 src/plugins/sysprof/meson.build                    | 12 ++---------
 ...der.Sysprof.xml => org.gnome.Sysprof.Agent.xml} |  2 +-
 4 files changed, 13 insertions(+), 28 deletions(-)
---
diff --git a/build-aux/flatpak/org.gnome.Builder.Devel.json b/build-aux/flatpak/org.gnome.Builder.Devel.json
index b74302c37..18fa957d1 100644
--- a/build-aux/flatpak/org.gnome.Builder.Devel.json
+++ b/build-aux/flatpak/org.gnome.Builder.Devel.json
@@ -343,12 +343,12 @@
                 "--libdir=/app/lib",
                 "--buildtype=debugoptimized",
                 "-Dgtk=true",
-                "-Dsysprofd=host"
+                "-Dsysprofd=host",
+                "-Dagent=true"
             ],
             "buildsystem" : "meson",
             "builddir" : true,
             "cleanup" : [
-                "/bin/*",
                 "/libexec/sysprof",
                 "/share/appdata",
                 "/share/applications",
diff --git a/src/plugins/sysprof/gbp-sysprof-tool.c b/src/plugins/sysprof/gbp-sysprof-tool.c
index 26127fd33..a40d99713 100644
--- a/src/plugins/sysprof/gbp-sysprof-tool.c
+++ b/src/plugins/sysprof/gbp-sysprof-tool.c
@@ -49,10 +49,7 @@ struct _GbpSysprofTool
   GDBusConnection *connection;
 
   /* IPC service on @connection */
-  IpcSysprof *sysprof;
-
-  /* If we found sysprof-agent in the runtime */
-  guint has_agent : 1;
+  IpcAgent *sysprof;
 };
 
 G_DEFINE_FINAL_TYPE (GbpSysprofTool, gbp_sysprof_tool, IDE_TYPE_RUN_TOOL)
@@ -103,10 +100,7 @@ gbp_sysprof_tool_handler (IdeRunContext       *run_context,
     settings = g_settings_new ("org.gnome.builder.sysprof");
 
   /* Run sysprof-agent/gnome-builder-sysprof */
-  if (self->has_agent)
-    ide_run_context_append_argv (run_context, "sysprof-agent");
-  else
-    ide_run_context_append_argv (run_context, PACKAGE_LIBEXECDIR"/gnome-builder-sysprof");
+  ide_run_context_append_argv (run_context, "sysprof-agent");
 
   /* Pass along FDs after stderr to next process */
   n_fds = ide_unix_fd_map_get_length (unix_fd_map);
@@ -205,14 +199,13 @@ gbp_sysprof_tool_prepare_to_run (IdeRunTool    *run_tool,
    * a chance to make things like LD_PRELOAD work. Otherwise, fallback to
    * using our own wrapper in our context which is more restrictive.
    */
-  self->has_agent = ide_pipeline_contains_program_in_path (pipeline, "sysprof-agent", NULL);
-
-  if (self->has_agent)
+  if (ide_pipeline_contains_program_in_path (pipeline, "sysprof-agent", NULL))
     ide_run_context_push (run_context,
                           gbp_sysprof_tool_handler,
                           g_object_ref (run_tool),
                           g_object_unref);
   else
+    /* Use our bundled version */
     ide_run_context_push_at_base (run_context,
                                   gbp_sysprof_tool_handler,
                                   g_object_ref (run_tool),
@@ -232,7 +225,7 @@ gbp_sysprof_tool_force_exit (IdeRunTool *run_tool)
   g_assert (GBP_IS_SYSPROF_TOOL (self));
 
   if (self->sysprof)
-    ipc_sysprof_call_force_exit (self->sysprof, 0, -1, NULL, NULL, NULL);
+    ipc_agent_call_force_exit (self->sysprof, 0, -1, NULL, NULL, NULL);
   else if (self->subprocess)
     ide_subprocess_force_exit (self->subprocess);
   else
@@ -253,7 +246,7 @@ gbp_sysprof_tool_send_signal (IdeRunTool *run_tool,
   g_assert (GBP_IS_SYSPROF_TOOL (self));
 
   if (self->sysprof)
-    ipc_sysprof_call_send_signal (self->sysprof, signum, 0, -1, NULL, NULL, NULL);
+    ipc_agent_call_send_signal (self->sysprof, signum, 0, -1, NULL, NULL, NULL);
   else if (self->subprocess)
     ide_subprocess_send_signal (self->subprocess, signum);
   else
@@ -268,7 +261,7 @@ gbp_sysprof_tool_started (IdeRunTool    *run_tool,
 {
   GbpSysprofTool *self = (GbpSysprofTool *)run_tool;
   g_autoptr(GDBusConnection) connection = NULL;
-  g_autoptr(IpcSysprof) sysprof = NULL;
+  g_autoptr(IpcAgent) sysprof = NULL;
   g_autoptr(GError) error = NULL;
 
   IDE_ENTRY;
@@ -296,7 +289,7 @@ gbp_sysprof_tool_started (IdeRunTool    *run_tool,
       IDE_EXIT;
     }
 
-  sysprof = ipc_sysprof_proxy_new_sync (connection,
+  sysprof = ipc_agent_proxy_new_sync (connection,
                                         G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
                                         NULL, "/", NULL, &error);
 
diff --git a/src/plugins/sysprof/meson.build b/src/plugins/sysprof/meson.build
index 73e00092c..c54dc33a3 100644
--- a/src/plugins/sysprof/meson.build
+++ b/src/plugins/sysprof/meson.build
@@ -12,8 +12,8 @@ plugins_deps += [
 ]
 
 ipc_sysprof_src = gnome.gdbus_codegen('ipc-sysprof',
-           sources: 'org.gnome.Builder.Sysprof.xml',
-  interface_prefix: 'org.gnome.Builder.',
+           sources: 'org.gnome.Sysprof.Agent.xml',
+  interface_prefix: 'org.gnome.Sysprof.',
          namespace: 'Ipc',
         extra_args: ['--glib-min-required=@0@'.format(glib_req_version)],
 )
@@ -37,12 +37,4 @@ plugins_sources += plugin_sysprof_resources
 
 install_data(['org.gnome.builder.sysprof.gschema.xml'], install_dir: schema_dir)
 
-gnome_builder_sysprof_sources = ['gnome-builder-sysprof.c', ipc_sysprof_src]
-gnome_builder_sysprof_deps = [libsysprof_dep]
-gnome_builder_sysprof = executable('gnome-builder-sysprof', gnome_builder_sysprof_sources,
-           install: true,
-       install_dir: get_option('libexecdir'),
-      dependencies: gnome_builder_sysprof_deps,
-)
-
 endif
diff --git a/src/plugins/sysprof/org.gnome.Builder.Sysprof.xml 
b/src/plugins/sysprof/org.gnome.Sysprof.Agent.xml
similarity index 96%
rename from src/plugins/sysprof/org.gnome.Builder.Sysprof.xml
rename to src/plugins/sysprof/org.gnome.Sysprof.Agent.xml
index b2c2d1ffb..2a87bbc14 100644
--- a/src/plugins/sysprof/org.gnome.Builder.Sysprof.xml
+++ b/src/plugins/sysprof/org.gnome.Sysprof.Agent.xml
@@ -20,7 +20,7 @@
 
     SPDX-License-Identifier: GPL-3.0-or-later
   -->
-  <interface name="org.gnome.Builder.Sysprof">
+  <interface name="org.gnome.Sysprof.Agent">
     <method name="ForceExit"/>
     <method name="SendSignal">
       <arg name="signum" direction="in" type="i">


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]