tracer: add missing hooks

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
This commit is contained in:
Marcin Kolny 2015-06-04 01:50:34 +02:00 committed by Stefan Sauer
parent 0913f699e2
commit e8d0b019b3
7 changed files with 129 additions and 10 deletions

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

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

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

View 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 */

View 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

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

View 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 */