tracer: add missing hooks
authorMarcin Kolny <marcin.kolny@flytronic.pl>
Wed, 3 Jun 2015 23:50:34 +0000 (01:50 +0200)
committerStefan Sauer <ensonic@users.sf.net>
Mon, 5 Oct 2015 18:59:39 +0000 (20:59 +0200)
Add following hooks: element-new, element-add-pad, element-remove-pad,
bin-add-pre, bin-add-post, bin-remove-pre, bin-remove-post, pad-link-pre,
pad-link-post, pad-unlink-pre, pad-unlink-post.

https://bugzilla.gnome.org/show_bug.cgi?id=733187

docs/design/draft-tracing.txt
gst/gstbin.c
gst/gstelement.c
gst/gstelementfactory.c
gst/gstpad.c
gst/gsttracerutils.c
gst/gsttracerutils.h

index 2011dcf..3a6f692 100644 (file)
@@ -88,18 +88,19 @@ we can create them ad-hoc and avoid the GST_TRACE_TIMERS var.
 
 Hooks (* already implemented)
 -----
-- gst_bin_add
-- gst_bin_remove
-- gst_element_add_pad
+* gst_bin_add
+* gst_bin_remove
+* gst_element_add_pad
 * gst_element_post_message
 * gst_element_query
-- gst_element_remove_pad
-- gst_pad_link
+* gst_element_remove_pad
+* gst_element_factory_make
+* gst_pad_link
 * gst_pad_pull_range
 * gst_pad_push
 * gst_pad_push_list
 * gst_pad_push_event
-- gst_pad_unlink
+* gst_pad_unlink
 
 Tracer api
 ----------
index 9190bfe..2439b66 100644 (file)
@@ -1370,7 +1370,9 @@ gst_bin_add (GstBin * bin, GstElement * element)
       GST_STR_NULL (GST_ELEMENT_NAME (element)),
       GST_STR_NULL (GST_ELEMENT_NAME (bin)));
 
+  GST_TRACER_BIN_ADD_PRE (bin, element);
   result = bclass->add_element (bin, element);
+  GST_TRACER_BIN_ADD_POST (bin, element, result);
 
   return result;
 
@@ -1694,7 +1696,9 @@ gst_bin_remove (GstBin * bin, GstElement * element)
   GST_CAT_DEBUG (GST_CAT_PARENTAGE, "removing element %s from bin %s",
       GST_ELEMENT_NAME (element), GST_ELEMENT_NAME (bin));
 
+  GST_TRACER_BIN_REMOVE_PRE (bin, element);
   result = bclass->remove_element (bin, element);
+  GST_TRACER_BIN_REMOVE_POST (bin, result);
 
   return result;
 
index 2a78337..e7523bb 100644 (file)
@@ -696,7 +696,7 @@ gst_element_add_pad (GstElement * element, GstPad * pad)
 
   /* emit the PAD_ADDED signal */
   g_signal_emit (element, gst_element_signals[PAD_ADDED], 0, pad);
-
+  GST_TRACER_ELEMENT_ADD_PAD (element, pad);
   return TRUE;
 
   /* ERROR cases */
@@ -808,7 +808,7 @@ gst_element_remove_pad (GstElement * element, GstPad * pad)
 
   /* emit the PAD_REMOVED signal before unparenting and losing the last ref. */
   g_signal_emit (element, gst_element_signals[PAD_REMOVED], 0, pad);
-
+  GST_TRACER_ELEMENT_REMOVE_PAD (element, pad);
   gst_object_unparent (GST_OBJECT_CAST (pad));
 
   return TRUE;
index 486b9fe..39d43ab 100644 (file)
@@ -448,6 +448,9 @@ gst_element_factory_make (const gchar * factoryname, const gchar * name)
     goto create_failed;
 
   gst_object_unref (factory);
+
+  GST_TRACER_ELEMENT_NEW (element);
+
   return element;
 
   /* ERRORS */
index 3b0300c..c4f5562 100644 (file)
@@ -1987,6 +1987,8 @@ gst_pad_unlink (GstPad * srcpad, GstPad * sinkpad)
   g_return_val_if_fail (GST_IS_PAD (sinkpad), FALSE);
   g_return_val_if_fail (GST_PAD_IS_SINK (sinkpad), FALSE);
 
+  GST_TRACER_PAD_UNLINK_PRE (srcpad, sinkpad);
+
   GST_CAT_INFO (GST_CAT_ELEMENT_PADS, "unlinking %s:%s(%p) and %s:%s(%p)",
       GST_DEBUG_PAD_NAME (srcpad), srcpad,
       GST_DEBUG_PAD_NAME (sinkpad), sinkpad);
@@ -2054,6 +2056,7 @@ done:
             GST_STRUCTURE_CHANGE_TYPE_PAD_UNLINK, parent, FALSE));
     gst_object_unref (parent);
   }
+  GST_TRACER_PAD_UNLINK_POST (srcpad, sinkpad, result);
   return result;
 
   /* ERRORS */
@@ -2495,7 +2498,13 @@ link_failed:
 GstPadLinkReturn
 gst_pad_link (GstPad * srcpad, GstPad * sinkpad)
 {
-  return gst_pad_link_full (srcpad, sinkpad, GST_PAD_LINK_CHECK_DEFAULT);
+  GstPadLinkReturn ret;
+
+  GST_TRACER_PAD_LINK_PRE (srcpad, sinkpad);
+  ret = gst_pad_link_full (srcpad, sinkpad, GST_PAD_LINK_CHECK_DEFAULT);
+  GST_TRACER_PAD_LINK_POST (srcpad, sinkpad, ret);
+
+  return ret;
 }
 
 static void
index ed27ba8..e7afa49 100644 (file)
@@ -48,7 +48,10 @@ static const gchar *_quark_strings[] = {
   "pad-pull-range-pre", "pad-pull-range-post", "pad-push-event-pre",
   "pad-push-event-post", "pad-query-pre", "pad-query-post",
   "element-post-message-pre",
-  "element-post-message-post", "element-query-pre", "element-query-post"
+  "element-post-message-post", "element-query-pre", "element-query-post",
+  "element-new", "element-add-pad", "element-remove-pad", "bin-add-pre",
+  "bin-add-post", "bin-remove-pre", "bin-remove-post", "pad-link-pre",
+  "pad-link-post", "pad-unlink-pre", "pad-unlink-post"
 };
 
 GQuark _priv_gst_tracer_quark_table[GST_TRACER_QUARK_MAX];
index 3d78fc8..93f218f 100644 (file)
@@ -61,6 +61,17 @@ typedef enum _GstTracerQuarkId
   GST_TRACER_QUARK_HOOK_ELEMENT_POST_MESSAGE_POST,
   GST_TRACER_QUARK_HOOK_ELEMENT_QUERY_PRE,
   GST_TRACER_QUARK_HOOK_ELEMENT_QUERY_POST,
+  GST_TRACER_QUARK_HOOK_ELEMENT_NEW,
+  GST_TRACER_QUARK_HOOK_ELEMENT_ADD_PAD,
+  GST_TRACER_QUARK_HOOK_ELEMENT_REMOVE_PAD,
+  GST_TRACER_QUARK_HOOK_BIN_ADD_PRE,
+  GST_TRACER_QUARK_HOOK_BIN_ADD_POST,
+  GST_TRACER_QUARK_HOOK_BIN_REMOVE_PRE,
+  GST_TRACER_QUARK_HOOK_BIN_REMOVE_POST,
+  GST_TRACER_QUARK_HOOK_PAD_LINK_PRE,
+  GST_TRACER_QUARK_HOOK_PAD_LINK_POST,
+  GST_TRACER_QUARK_HOOK_PAD_UNLINK_PRE,
+  GST_TRACER_QUARK_HOOK_PAD_UNLINK_POST,
   GST_TRACER_QUARK_MAX
 } GstTracerQuarkId;
 
@@ -203,6 +214,83 @@ typedef void (*GstTracerHookElementQueryPost) (GObject *, GstClockTime,
     GstTracerHookElementQueryPost, (GST_TRACER_ARGS, element, res)); \
 }G_STMT_END
 
+typedef void (*GstTracerHookElementNew) (GObject *, GstClockTime,
+    GstElement *);
+#define GST_TRACER_ELEMENT_NEW(element) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_NEW), \
+    GstTracerHookElementNew, (GST_TRACER_ARGS, element)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookElementAddPad) (GObject *, GstClockTime,
+    GstElement *, GstPad *);
+#define GST_TRACER_ELEMENT_ADD_PAD(element, pad) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_ADD_PAD), \
+    GstTracerHookElementAddPad, (GST_TRACER_ARGS, element, pad)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookElementRemovePad) (GObject *, GstClockTime,
+    GstElement *, GstPad *);
+#define GST_TRACER_ELEMENT_REMOVE_PAD(element, pad) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_ELEMENT_REMOVE_PAD), \
+    GstTracerHookElementRemovePad, (GST_TRACER_ARGS, element, pad)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookBinAddPre) (GObject *, GstClockTime,
+    GstBin *, GstElement *);
+#define GST_TRACER_BIN_ADD_PRE(bin, element) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_ADD_PRE), \
+    GstTracerHookBinAddPre, (GST_TRACER_ARGS, bin, element)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookBinAddPost) (GObject *, GstClockTime,
+    GstBin *, GstElement *, gboolean);
+#define GST_TRACER_BIN_ADD_POST(bin, element, result) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_ADD_POST), \
+    GstTracerHookBinAddPost, (GST_TRACER_ARGS, bin, element, result)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookBinRemovePre) (GObject *, GstClockTime,
+    GstBin *, GstElement *);
+#define GST_TRACER_BIN_REMOVE_PRE(bin, element) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_REMOVE_PRE), \
+    GstTracerHookBinRemovePre, (GST_TRACER_ARGS, bin, element)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookBinRemovePost) (GObject *, GstClockTime,
+    GstBin *, gboolean);
+#define GST_TRACER_BIN_REMOVE_POST(bin, result) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_BIN_REMOVE_POST), \
+    GstTracerHookBinRemovePost, (GST_TRACER_ARGS, bin, result)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookPadLinkPre) (GObject *, GstClockTime,
+    GstPad *, GstPad *);
+#define GST_TRACER_PAD_LINK_PRE(srcpad, sinkpad) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_LINK_PRE), \
+    GstTracerHookPadLinkPre, (GST_TRACER_ARGS, srcpad, sinkpad)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookPadLinkPost) (GObject *, GstClockTime,
+    GstPad *, GstPad *, GstPadLinkReturn);
+#define GST_TRACER_PAD_LINK_POST(srcpad, sinkpad, result) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_LINK_POST), \
+    GstTracerHookPadLinkPost, (GST_TRACER_ARGS, srcpad, sinkpad, result)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookPadUnlinkPre) (GObject *, GstClockTime,
+    GstPad *, GstPad *);
+#define GST_TRACER_PAD_UNLINK_PRE(srcpad, sinkpad) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_UNLINK_PRE), \
+    GstTracerHookPadUnlinkPre, (GST_TRACER_ARGS, srcpad, sinkpad)); \
+}G_STMT_END
+
+typedef void (*GstTracerHookPadUnlinkPost) (GObject *, GstClockTime,
+    GstPad *, GstPad *, gboolean);
+#define GST_TRACER_PAD_UNLINK_POST(srcpad, sinkpad, result) G_STMT_START{ \
+  GST_TRACER_DISPATCH(GST_TRACER_QUARK(HOOK_PAD_UNLINK_POST), \
+    GstTracerHookPadUnlinkPost, (GST_TRACER_ARGS, srcpad, sinkpad, result)); \
+}G_STMT_END
+
 #else /* !GST_DISABLE_GST_DEBUG */
 
 #define GST_TRACER_PAD_PUSH_PRE(pad, buffer)
@@ -219,6 +307,17 @@ typedef void (*GstTracerHookElementQueryPost) (GObject *, GstClockTime,
 #define GST_TRACER_ELEMENT_POST_MESSAGE_POST(element, res)
 #define GST_TRACER_ELEMENT_QUERY_PRE(element, query)
 #define GST_TRACER_ELEMENT_QUERY_POST(element, res)
+#define GST_TRACER_ELEMENT_NEW(element),
+#define GST_TRACER_ELEMENT_ADD_PAD(element, pad),
+#define GST_TRACER_ELEMENT_REMOVE_PAD(element, pad),
+#define GST_TRACER_BIN_ADD_PRE(bin, element),
+#define GST_TRACER_BIN_ADD_POST(bin, element, res),
+#define GST_TRACER_BIN_REMOVE_PRE(bin, element),
+#define GST_TRACER_BIN_REMOVE_POST(bin, res),
+#define GST_TRACER_PAD_LINK_PRE(srcpad, sinkpad),
+#define GST_TRACER_PAD_LINK_POST(srcpad, sinkpad, res),
+#define GST_TRACER_PAD_UNLINK_PRE(srcpad, sinkpad),
+#define GST_TRACER_PAD_UNLINK_POST(srcpad, sinkpad, res),
 
 #endif /* GST_DISABLE_GST_DEBUG */