summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Kolny <marcin.kolny@flytronic.pl>2015-06-04 01:50:34 +0200
committerStefan Sauer <ensonic@users.sf.net>2015-08-26 22:38:39 +0200
commit8f699e3aeaf1ec5e6f7b86d1d20ca7c67a985483 (patch)
treea6faa473702453bb60d90b6136a75cc5388861ce
parentbaa29e46d431de26e034b7792b9073844e8e1141 (diff)
tracer: add missing hookstracer
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
-rw-r--r--docs/design/draft-tracing.txt13
-rw-r--r--gst/gstbin.c4
-rw-r--r--gst/gstelement.c4
-rw-r--r--gst/gstelementfactory.c3
-rw-r--r--gst/gstpad.c11
-rw-r--r--gst/gsttracerutils.c5
-rw-r--r--gst/gsttracerutils.h99
7 files changed, 129 insertions, 10 deletions
diff --git a/docs/design/draft-tracing.txt b/docs/design/draft-tracing.txt
index 2011dcfc3..3a6f692e5 100644
--- a/docs/design/draft-tracing.txt
+++ b/docs/design/draft-tracing.txt
@@ -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
----------
diff --git a/gst/gstbin.c b/gst/gstbin.c
index 2813f63c5..72cff448b 100644
--- a/gst/gstbin.c
+++ b/gst/gstbin.c
@@ -1301,7 +1301,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;
@@ -1625,7 +1627,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;
diff --git a/gst/gstelement.c b/gst/gstelement.c
index e6d1e3d8c..e422004dd 100644
--- a/gst/gstelement.c
+++ b/gst/gstelement.c
@@ -693,7 +693,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 */
@@ -805,7 +805,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;
diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c
index 486b9fe01..39d43ab93 100644
--- a/gst/gstelementfactory.c
+++ b/gst/gstelementfactory.c
@@ -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 */
diff --git a/gst/gstpad.c b/gst/gstpad.c
index be35b112d..698f9d937 100644
--- a/gst/gstpad.c
+++ b/gst/gstpad.c
@@ -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
diff --git a/gst/gsttracerutils.c b/gst/gsttracerutils.c
index ed27ba87a..e7afa49e8 100644
--- a/gst/gsttracerutils.c
+++ b/gst/gsttracerutils.c
@@ -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];
diff --git a/gst/gsttracerutils.h b/gst/gsttracerutils.h
index 3d78fc877..93f218f10 100644
--- a/gst/gsttracerutils.h
+++ b/gst/gsttracerutils.h
@@ -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 */