[glib/nacho/gtask-performance] gtask: use strdup_printf in g_task_return only if needed




commit 9b63f4c561c436cb3673f90c4234a2b97ac5ea92
Author: Ignacio Casal Quinteiro <qignacio amazon com>
Date:   Fri May 13 16:43:38 2022 +0200

    gtask: use strdup_printf in g_task_return only if needed
    
    If the task name is NULL there is no need to allocate the string
    since this can be expensive if called very often

 gio/gtask.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)
---
diff --git a/gio/gtask.c b/gio/gtask.c
index 80c0863ff6..365f200add 100644
--- a/gio/gtask.c
+++ b/gio/gtask.c
@@ -1257,7 +1257,6 @@ g_task_return (GTask           *task,
                GTaskReturnType  type)
 {
   GSource *source;
-  gchar *source_name = NULL;
 
   if (type != G_TASK_RETURN_FROM_THREAD)
     task->ever_returned = TRUE;
@@ -1306,10 +1305,22 @@ g_task_return (GTask           *task,
 
   /* Otherwise, complete in the next iteration */
   source = g_idle_source_new ();
-  source_name = g_strdup_printf ("[gio] %s complete_in_idle_cb",
-                                 (task->name != NULL) ? task->name : "(unnamed)");
-  g_source_set_name (source, source_name);
-  g_free (source_name);
+
+  /* Note: in case the task name is NULL we set it as a const string instead
+   * of going through the concat path which is more expensive and may show in the
+   * profiler if g_task_return is called very often
+   */
+  if (task->name == NULL)
+    g_source_set_static_name (source, "[gio] (unnamed) complete_in_idle_cb");
+  else
+    {
+      gchar *source_name;
+
+      source_name = g_strconcat ("[gio] ", task->name, " complete_in_idle_cb", NULL);
+      g_source_set_name (source, source_name);
+      g_free (source_name);
+    }
+
   g_task_attach_source (task, source, complete_in_idle_cb);
   g_source_unref (source);
 }


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