diff --git a/plugins/tracers/gstlatency.c b/plugins/tracers/gstlatency.c index 0a41caf548..e08ff32374 100644 --- a/plugins/tracers/gstlatency.c +++ b/plugins/tracers/gstlatency.c @@ -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; diff --git a/plugins/tracers/gstleaks.c b/plugins/tracers/gstleaks.c index 14f5a47d3d..1a949e5752 100644 --- a/plugins/tracers/gstleaks.c +++ b/plugins/tracers/gstleaks.c @@ -34,15 +34,19 @@ * 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); } diff --git a/plugins/tracers/gstlog.c b/plugins/tracers/gstlog.c index e23133c0e5..964999827e 100644 --- a/plugins/tracers/gstlog.c +++ b/plugins/tracers/gstlog.c @@ -309,9 +309,38 @@ 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", ¶ms, 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 diff --git a/plugins/tracers/gstrusage.c b/plugins/tracers/gstrusage.c index cb3fc6a7a1..a7b4a27253 100644 --- a/plugins/tracers/gstrusage.c +++ b/plugins/tracers/gstrusage.c @@ -256,6 +256,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", ¶ms, 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) { @@ -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) { diff --git a/plugins/tracers/gststats.c b/plugins/tracers/gststats.c index 5fd1350267..893e1e5ce6 100644 --- a/plugins/tracers/gststats.c +++ b/plugins/tracers/gststats.c @@ -520,9 +520,39 @@ 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", ¶ms, 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",