diff options
author | Jonas Ã…dahl <jadahl@gmail.com> | 2022-10-28 15:46:48 +0200 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2022-11-01 21:04:21 +0000 |
commit | 5767d2f129458637aa0300fe04e7100d1b1947cb (patch) | |
tree | 80c585079b11523cd85636c2d5be05360a14c36e /cogl | |
parent | 1efb93e145fdd2a7746f1af33e5c7bdabc79ea08 (diff) | |
download | mutter-5767d2f129458637aa0300fe04e7100d1b1947cb.tar.gz |
cogl/trace: Don't enable/disable in idle callback if thread matches
This makes it possible to start profiling immediately on startup, during
context/backend/display setup, as well as flush during tear down.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2678>
Diffstat (limited to 'cogl')
-rw-r--r-- | cogl/cogl/cogl-trace.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/cogl/cogl/cogl-trace.c b/cogl/cogl/cogl-trace.c index f2d0f789d..22aff2892 100644 --- a/cogl/cogl/cogl-trace.c +++ b/cogl/cogl/cogl-trace.c @@ -204,22 +204,30 @@ set_tracing_enabled_on_thread (GMainContext *main_context, const char *filename) { TraceData *data; - GSource *source; data = g_new0 (TraceData, 1); data->fd = fd; data->group = group ? strdup (group) : NULL; data->filename = filename ? strdup (filename) : NULL; - source = g_idle_source_new (); + if (main_context == g_main_context_get_thread_default ()) + { + enable_tracing_idle_callback (data); + trace_data_free (data); + } + else + { + GSource *source; + source = g_idle_source_new (); - g_source_set_callback (source, - enable_tracing_idle_callback, - data, - trace_data_free); + g_source_set_callback (source, + enable_tracing_idle_callback, + data, + trace_data_free); - g_source_attach (source, main_context); - g_source_unref (source); + g_source_attach (source, main_context); + g_source_unref (source); + } } void @@ -241,14 +249,21 @@ cogl_set_tracing_enabled_on_thread (GMainContext *main_context, void cogl_set_tracing_disabled_on_thread (GMainContext *main_context) { - GSource *source; + if (g_main_context_get_thread_default () == main_context) + { + disable_tracing_idle_callback (NULL); + } + else + { + GSource *source; - source = g_idle_source_new (); + source = g_idle_source_new (); - g_source_set_callback (source, disable_tracing_idle_callback, NULL, NULL); + g_source_set_callback (source, disable_tracing_idle_callback, NULL, NULL); - g_source_attach (source, main_context); - g_source_unref (source); + g_source_attach (source, main_context); + g_source_unref (source); + } } static void |