tracers: Allow setting a name for all tracer objects

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.
This commit is contained in:
Nirbheek Chauhan 2019-06-19 03:47:18 +05:30
parent 8a9b20a18b
commit 5cdf1b7db8
5 changed files with 107 additions and 5 deletions

View 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;

View file

@ -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);
}

View file

@ -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", &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

View file

@ -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", &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)
{
@ -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) {

View file

@ -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", &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",