From 8332b44a2ab6ba84aa362df3cc494be6ee85dfa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= Date: Fri, 23 Apr 2021 15:34:26 -0400 Subject: [PATCH] tracers: Add tracepoint when a plugin feature it loaded This makes it possible to trace which ones are loaded in a specific program to make nice statistics. Part-of: --- gst/gstpluginfeature.c | 2 ++ gst/gsttracerutils.c | 2 +- gst/gsttracerutils.h | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/gst/gstpluginfeature.c b/gst/gstpluginfeature.c index e7c741de8b..ac61cc0e11 100644 --- a/gst/gstpluginfeature.c +++ b/gst/gstpluginfeature.c @@ -124,6 +124,8 @@ gst_plugin_feature_load (GstPluginFeature * feature) else if (!real_feature->loaded) goto not_found; + GST_TRACER_PLUGIN_FEATURE_LOADED (real_feature); + return real_feature; /* ERRORS */ diff --git a/gst/gsttracerutils.c b/gst/gsttracerutils.c index ea9c9e320a..cc92e6448d 100644 --- a/gst/gsttracerutils.c +++ b/gst/gsttracerutils.c @@ -54,7 +54,7 @@ static const gchar *_quark_strings[] = { "element-change-state-pre", "element-change-state-post", "mini-object-created", "mini-object-destroyed", "object-created", "object-destroyed", "mini-object-reffed", "mini-object-unreffed", - "object-reffed", "object-unreffed", + "object-reffed", "object-unreffed", "plugin-feature-loaded" }; GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX]; diff --git a/gst/gsttracerutils.h b/gst/gsttracerutils.h index a2a5ed6d2a..48b0864015 100644 --- a/gst/gsttracerutils.h +++ b/gst/gsttracerutils.h @@ -79,6 +79,7 @@ typedef enum /*< skip >*/ GST_TRACER_QUARK_HOOK_MINI_OBJECT_UNREFFED, GST_TRACER_QUARK_HOOK_OBJECT_REFFED, GST_TRACER_QUARK_HOOK_OBJECT_UNREFFED, + GST_TRACER_QUARK_HOOK_PLUGIN_FEATURE_LOADED, GST_TRACER_QUARK_MAX } GstTracerQuarkId; @@ -689,11 +690,38 @@ typedef void (*GstTracerHookObjectCreated) (GObject *self, GstClockTime ts, */ typedef void (*GstTracerHookObjectDestroyed) (GObject *self, GstClockTime ts, GstObject *object); + #define GST_TRACER_OBJECT_DESTROYED(object) G_STMT_START{ \ GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_OBJECT_DESTROYED), \ GstTracerHookObjectDestroyed, (GST_TRACER_ARGS, object)); \ }G_STMT_END +/** + * GstTracerHookPluginFeatureLoaded: + * @self: the tracer instance + * @ts: the current timestamp + * @feature: the plugin feature that was loaded + * + * Hook called when a GstPluginFeature is loaded named + * "plugin-feature-loaded". + * + * Since: 1.20 + */ +typedef void (*GstTracerHookPluginFeatureLoaded) (GObject *self, GstClockTime ts, + GstPluginFeature *feature); +/** + * GST_TRACER_PLUGIN_FEATURE_LOADED: + * @feature: The feature that this tracer is called for + * + * Add a tracepoint when a plugin feature is loaded. + * + * Since: 1.20 + */ +#define GST_TRACER_PLUGIN_FEATURE_LOADED(feature) G_STMT_START{ \ + GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PLUGIN_FEATURE_LOADED), \ + GstTracerHookPluginFeatureLoaded, (GST_TRACER_ARGS, feature)); \ +}G_STMT_END + #else /* !GST_DISABLE_GST_TRACER_HOOKS */ @@ -743,6 +771,7 @@ _priv_gst_tracing_deinit (void) #define GST_TRACER_OBJECT_DESTROYED(object) #define GST_TRACER_OBJECT_REFFED(object, new_refcount) #define GST_TRACER_OBJECT_UNREFFED(object, new_refcount) +#define GST_TRACER_PLUGIN_FEATURE_LOADED(feature) #endif /* GST_DISABLE_GST_TRACER_HOOKS */