tracers: Allow setting a name for all tracer objects
authorNirbheek Chauhan <nirbheek@centricular.com>
Tue, 18 Jun 2019 22:17:18 +0000 (03:47 +0530)
committerNirbheek Chauhan <nirbheek@centricular.com>
Tue, 2 Jul 2019 09:43:26 +0000 (15:13 +0530)
This will be useful in combination with the next commit when we add
API to get a list of active tracers so that consumers of the API can
easily distinguish tracer objects.

plugins/tracers/gstlatency.c
plugins/tracers/gstleaks.c
plugins/tracers/gstlog.c
plugins/tracers/gstrusage.c
plugins/tracers/gststats.c

index 0a41caf..e08ff32 100644 (file)
@@ -508,9 +508,15 @@ gst_latency_tracer_constructed (GObject * object)
   params_struct = gst_structure_from_string (tmp, NULL);
   g_free (tmp);
 
-  /* Read the flags if available */
   if (params_struct) {
-    const gchar *flags = gst_structure_get_string (params_struct, "flags");
+    const gchar *name, *flags;
+    /* Set the name if assigned */
+    name = gst_structure_get_string (params_struct, "name");
+    if (name)
+      gst_object_set_name (GST_OBJECT (self), name);
+
+    /* Read the flags if available */
+    flags = gst_structure_get_string (params_struct, "flags");
 
     self->flags = 0;
 
index 14f5a47..1a949e5 100644 (file)
  * active at the same time.
  *
  * Parameters can also be passed to each tracer. The leaks tracer currently
- * accepts three params:
+ * accepts four params:
  * 1. filters: to filter which objects to record
  * 2. check-refs: whether to record every location where a leaked object was
  *    reffed and unreffed
  * 3. stack-traces-flags: full or none; see: #GstStackTraceFlags
+ * 4. name: set a name for the tracer object itself
  *
  * Examples:
  * ```
- * GST_TRACERS=leaks(filters="GstEvent,GstMessage",stack-traces-flags=full)
+ * GST_TRACERS='leaks(filters="GstEvent,GstMessage",stack-traces-flags=none)'
+ * ```
+ * ```
+ * GST_TRACERS='leaks(filters="GstBuffer",stack-traces-flags=full,check-refs=true);leaks(name=all-leaks)'
  * ```
  */
 
@@ -176,10 +180,16 @@ set_filters (GstLeaksTracer * self, const gchar * filters)
 static void
 set_params_from_structure (GstLeaksTracer * self, GstStructure * params)
 {
-  const gchar *filters = gst_structure_get_string (params, "filters");
+  const gchar *filters, *name;
 
+  filters = gst_structure_get_string (params, "filters");
   if (filters)
     set_filters (self, filters);
+
+  name = gst_structure_get_string (params, "name");
+  if (name)
+    gst_object_set_name (GST_OBJECT (self), name);
+
   gst_structure_get_boolean (params, "check-refs", &self->check_refs);
 }
 
index e23133c..9649998 100644 (file)
@@ -310,8 +310,37 @@ do_pad_unlink_post (GstTracer * self, guint64 ts, GstPad * src,
 /* tracer class */
 
 static void
+gst_log_tracer_constructed (GObject * object)
+{
+  GstLogTracer *self = GST_LOG_TRACER (object);
+  gchar *params, *tmp;
+  const gchar *name;
+  GstStructure *params_struct = NULL;
+
+  g_object_get (self, "params", &params, NULL);
+
+  if (!params)
+    return;
+
+  tmp = g_strdup_printf ("log,%s", params);
+  params_struct = gst_structure_from_string (tmp, NULL);
+  g_free (tmp);
+  if (!params_struct)
+    return;
+
+  /* Set the name if assigned */
+  name = gst_structure_get_string (params_struct, "name");
+  if (name)
+    gst_object_set_name (GST_OBJECT (self), name);
+  gst_structure_free (params_struct);
+}
+
+static void
 gst_log_tracer_class_init (GstLogTracerClass * klass)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->constructed = gst_log_tracer_constructed;
 }
 
 static void
index cb3fc6a..a7b4a27 100644 (file)
@@ -257,6 +257,32 @@ do_stats (GstTracer * obj, guint64 ts)
 /* tracer class */
 
 static void
+gst_rusage_tracer_constructed (GObject * object)
+{
+  GstRUsageTracer *self = GST_RUSAGE_TRACER (object);
+  gchar *params, *tmp;
+  const gchar *name;
+  GstStructure *params_struct = NULL;
+
+  g_object_get (self, "params", &params, NULL);
+
+  if (!params)
+    return;
+
+  tmp = g_strdup_printf ("rusage,%s", params);
+  params_struct = gst_structure_from_string (tmp, NULL);
+  g_free (tmp);
+  if (!params_struct)
+    return;
+
+  /* Set the name if assigned */
+  name = gst_structure_get_string (params_struct, "name");
+  if (name)
+    gst_object_set_name (GST_OBJECT (self), name);
+  gst_structure_free (params_struct);
+}
+
+static void
 gst_rusage_tracer_finalize (GObject * obj)
 {
   GstRUsageTracer *self = GST_RUSAGE_TRACER (obj);
@@ -272,6 +298,7 @@ gst_rusage_tracer_class_init (GstRUsageTracerClass * klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
+  gobject_class->constructed = gst_rusage_tracer_constructed;
   gobject_class->finalize = gst_rusage_tracer_finalize;
 
   if ((num_cpus = sysconf (_SC_NPROCESSORS_ONLN)) == -1) {
index 5fd1350..893e1e5 100644 (file)
@@ -521,8 +521,38 @@ do_query_post (GstStatsTracer * self, guint64 ts, GstPad * this_pad,
 /* tracer class */
 
 static void
+gst_stats_tracer_constructed (GObject * object)
+{
+  GstStatsTracer *self = GST_STATS_TRACER (object);
+  gchar *params, *tmp;
+  const gchar *name;
+  GstStructure *params_struct = NULL;
+
+  g_object_get (self, "params", &params, NULL);
+
+  if (!params)
+    return;
+
+  tmp = g_strdup_printf ("stats,%s", params);
+  params_struct = gst_structure_from_string (tmp, NULL);
+  g_free (tmp);
+  if (!params_struct)
+    return;
+
+  /* Set the name if assigned */
+  name = gst_structure_get_string (params_struct, "name");
+  if (name)
+    gst_object_set_name (GST_OBJECT (self), name);
+  gst_structure_free (params_struct);
+}
+
+static void
 gst_stats_tracer_class_init (GstStatsTracerClass * klass)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+  gobject_class->constructed = gst_stats_tracer_constructed;
+
   /* announce trace formats */
   /* *INDENT-OFF* */
   tr_buffer = gst_tracer_record_new ("buffer.class",