main: setup GJS profiler when GJS_TRACE_FD is set
This is the same environment variable that will be used in GJS to auto- connect Sysprof to the GJS profiler when the gjs binary is used. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/573
This commit is contained in:
parent
6f6b6fb9d6
commit
751cd2f1c1
@ -20,7 +20,7 @@ gcr_req = '>= 3.7.5'
|
|||||||
gdesktop_req = '>= 3.7.90'
|
gdesktop_req = '>= 3.7.90'
|
||||||
gio_req = '>= 2.56.0'
|
gio_req = '>= 2.56.0'
|
||||||
gi_req = '>= 1.49.1'
|
gi_req = '>= 1.49.1'
|
||||||
gjs_req = '>= 1.57.2'
|
gjs_req = '>= 1.57.3'
|
||||||
gtk_req = '>= 3.15.0'
|
gtk_req = '>= 3.15.0'
|
||||||
json_glib_req = '>= 0.13.2'
|
json_glib_req = '>= 0.13.2'
|
||||||
mutter_req = '>= 3.33.2'
|
mutter_req = '>= 3.33.2'
|
||||||
|
58
src/main.c
58
src/main.c
@ -198,6 +198,62 @@ shell_fonts_init (void)
|
|||||||
cogl_pango_font_map_set_use_mipmapping (fontmap, FALSE);
|
cogl_pango_font_map_set_use_mipmapping (fontmap, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_profiler_init (void)
|
||||||
|
{
|
||||||
|
ShellGlobal *global;
|
||||||
|
GjsProfiler *profiler;
|
||||||
|
GjsContext *context;
|
||||||
|
const char *enabled;
|
||||||
|
const char *fd_str;
|
||||||
|
int fd = -1;
|
||||||
|
|
||||||
|
/* Sysprof uses the "GJS_TRACE_FD=N" environment variable to connect GJS
|
||||||
|
* profiler data to the combined Sysprof capture. Since we are in control of
|
||||||
|
* the GjsContext, we need to proxy this FD across to the GJS profiler.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fd_str = g_getenv ("GJS_TRACE_FD");
|
||||||
|
enabled = g_getenv ("GJS_ENABLE_PROFILER");
|
||||||
|
if (fd_str == NULL || enabled == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
global = shell_global_get ();
|
||||||
|
g_return_if_fail (global);
|
||||||
|
|
||||||
|
context = _shell_global_get_gjs_context (global);
|
||||||
|
g_return_if_fail (context);
|
||||||
|
|
||||||
|
profiler = gjs_context_get_profiler (context);
|
||||||
|
g_return_if_fail (profiler);
|
||||||
|
|
||||||
|
if (fd_str)
|
||||||
|
{
|
||||||
|
fd = atoi (fd_str);
|
||||||
|
|
||||||
|
if (fd > 2)
|
||||||
|
{
|
||||||
|
gjs_profiler_set_fd (profiler, fd);
|
||||||
|
gjs_profiler_start (profiler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
shell_profiler_shutdown (void)
|
||||||
|
{
|
||||||
|
ShellGlobal *global;
|
||||||
|
GjsProfiler *profiler;
|
||||||
|
GjsContext *context;
|
||||||
|
|
||||||
|
global = shell_global_get ();
|
||||||
|
context = _shell_global_get_gjs_context (global);
|
||||||
|
profiler = gjs_context_get_profiler (context);
|
||||||
|
|
||||||
|
if (profiler)
|
||||||
|
gjs_profiler_stop (profiler);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
malloc_statistics_callback (ShellPerfLog *perf_log,
|
malloc_statistics_callback (ShellPerfLog *perf_log,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
@ -496,7 +552,9 @@ main (int argc, char **argv)
|
|||||||
dump_gjs_stack_on_signal (SIGSEGV);
|
dump_gjs_stack_on_signal (SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
shell_profiler_init ();
|
||||||
ecode = meta_run ();
|
ecode = meta_run ();
|
||||||
|
shell_profiler_shutdown ();
|
||||||
|
|
||||||
g_debug ("Doing final cleanup");
|
g_debug ("Doing final cleanup");
|
||||||
_shell_global_destroy_gjs_context (shell_global_get ());
|
_shell_global_destroy_gjs_context (shell_global_get ());
|
||||||
|
Loading…
Reference in New Issue
Block a user