X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=plugins%2Ftracers%2Fgstlog.c;h=631e58d80e65955c458c8987fa13124fcb5b5854;hb=33616d47becf743c038d10819e013bf0d0314804;hp=982a9e95c206760a81783ab93c4928cfa44eb792;hpb=6ea2b41364b4c60677e408a311bf02629007c561;p=platform%2Fupstream%2Fgstreamer.git diff --git a/plugins/tracers/gstlog.c b/plugins/tracers/gstlog.c index 982a9e9..631e58d 100644 --- a/plugins/tracers/gstlog.c +++ b/plugins/tracers/gstlog.c @@ -22,7 +22,7 @@ * SECTION:gstlog * @short_description: log hook event * - * A tracing module that logs all data from all hooks. + * A tracing module that logs all data from all hooks. */ #ifdef HAVE_CONFIG_H @@ -35,11 +35,16 @@ GST_DEBUG_CATEGORY_STATIC (gst_log_debug); #define GST_CAT_DEFAULT gst_log_debug +GST_DEBUG_CATEGORY_STATIC (GST_CAT_BIN); GST_DEBUG_CATEGORY_STATIC (GST_CAT_BUFFER); GST_DEBUG_CATEGORY_STATIC (GST_CAT_BUFFER_LIST); GST_DEBUG_CATEGORY_STATIC (GST_CAT_EVENT); GST_DEBUG_CATEGORY_STATIC (GST_CAT_MESSAGE); GST_DEBUG_CATEGORY_STATIC (GST_CAT_QUERY); +GST_DEBUG_CATEGORY_STATIC (GST_CAT_STATES); +GST_DEBUG_CATEGORY_STATIC (GST_CAT_PADS); +GST_DEBUG_CATEGORY_STATIC (GST_CAT_ELEMENT_PADS); +GST_DEBUG_CATEGORY_STATIC (GST_CAT_ELEMENT_FACTORY); #define _do_init \ GST_DEBUG_CATEGORY_INIT (gst_log_debug, "log", 0, "log tracer"); \ @@ -47,101 +52,326 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_QUERY); GST_DEBUG_CATEGORY_GET (GST_CAT_BUFFER_LIST, "GST_BUFFER_LIST"); \ GST_DEBUG_CATEGORY_GET (GST_CAT_EVENT, "GST_EVENT"); \ GST_DEBUG_CATEGORY_GET (GST_CAT_MESSAGE, "GST_MESSAGE"); \ - GST_DEBUG_CATEGORY_GET (GST_CAT_QUERY, "query"); + GST_DEBUG_CATEGORY_GET (GST_CAT_STATES, "GST_STATES"); \ + GST_DEBUG_CATEGORY_GET (GST_CAT_PADS, "GST_PADS"); \ + GST_DEBUG_CATEGORY_GET (GST_CAT_ELEMENT_PADS, "GST_ELEMENT_PADS"); \ + GST_DEBUG_CATEGORY_GET (GST_CAT_ELEMENT_FACTORY, "GST_ELEMENT_FACTORY"); \ + GST_DEBUG_CATEGORY_GET (GST_CAT_QUERY, "query"); \ + GST_DEBUG_CATEGORY_GET (GST_CAT_BIN, "bin"); #define gst_log_tracer_parent_class parent_class G_DEFINE_TYPE_WITH_CODE (GstLogTracer, gst_log_tracer, GST_TYPE_TRACER, _do_init); -static void gst_log_tracer_invoke (GstTracer * self, GstTracerHookId id, - GstTracerMessageId mid, va_list var_args); +static void +do_log (GstDebugCategory * cat, const char *func, GObject * obj, + const char *fmt, ...) +{ + va_list var_args; + + va_start (var_args, fmt); + gst_debug_log_valist (cat, GST_LEVEL_TRACE, "", func, 0, obj, fmt, var_args); + va_end (var_args); +} static void -gst_log_tracer_class_init (GstLogTracerClass * klass) +do_push_buffer_pre (GstTracer * self, guint64 ts, GstPad * pad, + GstBuffer * buffer) +{ + do_log (GST_CAT_BUFFER, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), pad, buffer); +} + +static void +do_push_buffer_post (GstTracer * self, guint64 ts, GstPad * pad, + GstFlowReturn res) +{ + do_log (GST_CAT_BUFFER, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), pad, res); +} + +static void +do_push_buffer_list_pre (GstTracer * self, guint64 ts, GstPad * pad, + GstBufferList * list) +{ + do_log (GST_CAT_BUFFER_LIST, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", list=%p", + GST_TIME_ARGS (ts), pad, list); +} + +static void +do_push_buffer_list_post (GstTracer * self, guint64 ts, GstPad * pad, + GstFlowReturn res) +{ + do_log (GST_CAT_BUFFER_LIST, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), pad, res); +} + +static void +do_pull_range_pre (GstTracer * self, guint64 ts, GstPad * pad, guint64 offset, + guint size) +{ + do_log (GST_CAT_BUFFER, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", offset=%" G_GUINT64_FORMAT + ", size=%u", GST_TIME_ARGS (ts), pad, offset, size); +} + +static void +do_pull_range_post (GstTracer * self, guint64 ts, GstPad * pad, + GstBuffer * buffer, GstFlowReturn res) +{ + do_log (GST_CAT_BUFFER, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT + ", res=%d", GST_TIME_ARGS (ts), pad, buffer, res); +} + +static void +do_push_event_pre (GstTracer * self, guint64 ts, GstPad * pad, GstEvent * event) { - GstTracerClass *gst_tracer_class = GST_TRACER_CLASS (klass); + do_log (GST_CAT_EVENT, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", event=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), pad, event); +} + +static void +do_push_event_post (GstTracer * self, guint64 ts, GstPad * pad, gboolean res) +{ + do_log (GST_CAT_EVENT, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), pad, res); +} - gst_tracer_class->invoke = gst_log_tracer_invoke; +static void +do_pad_query_pre (GstTracer * self, guint64 ts, GstPad * pad, GstQuery * query) +{ + do_log (GST_CAT_QUERY, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", query=%" + GST_PTR_FORMAT, GST_TIME_ARGS (ts), pad, query); +} + +static void +do_pad_query_post (GstTracer * self, guint64 ts, GstPad * pad, gboolean res) +{ + do_log (GST_CAT_QUERY, GST_FUNCTION, (GObject *) pad, + "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), pad, res); +} + +static void +do_post_message_pre (GstTracer * self, guint64 ts, GstElement * elem, + GstMessage * msg) +{ + do_log (GST_CAT_MESSAGE, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", message=%" + GST_PTR_FORMAT, GST_TIME_ARGS (ts), elem, msg); +} + +static void +do_post_message_post (GstTracer * self, guint64 ts, GstElement * elem, + gboolean res) +{ + do_log (GST_CAT_MESSAGE, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), elem, res); +} + +static void +do_element_query_pre (GstTracer * self, guint64 ts, GstElement * elem, + GstQuery * query) +{ + do_log (GST_CAT_QUERY, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", query=%" + GST_PTR_FORMAT, GST_TIME_ARGS (ts), elem, query); +} + +static void +do_element_query_post (GstTracer * self, guint64 ts, GstElement * elem, + gboolean res) +{ + do_log (GST_CAT_QUERY, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), elem, res); +} + +static void +do_element_new (GstTracer * self, guint64 ts, GstElement * elem) +{ + do_log (GST_CAT_ELEMENT_FACTORY, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), elem); +} + +static void +do_element_add_pad (GstTracer * self, guint64 ts, GstElement * elem, + GstPad * pad) +{ + do_log (GST_CAT_ELEMENT_PADS, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", pad=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), elem, pad); +} + +static void +do_element_remove_pad (GstTracer * self, guint64 ts, GstElement * elem, + GstPad * pad) +{ + do_log (GST_CAT_ELEMENT_PADS, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", pad=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), elem, pad); +} + +static void +do_element_change_state_pre (GstTracer * self, guint64 ts, GstElement * elem, + GstStateChange change) +{ + do_log (GST_CAT_STATES, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", change=%d", + GST_TIME_ARGS (ts), elem, (gint) change); +} + +static void +do_element_change_state_post (GstTracer * self, guint64 ts, GstElement * elem, + GstStateChange change, GstStateChangeReturn res) +{ + do_log (GST_CAT_STATES, GST_FUNCTION, (GObject *) elem, + "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", change=%d, res=%d", + GST_TIME_ARGS (ts), elem, (gint) change, (gint) res); +} + +static void +do_bin_add_pre (GstTracer * self, guint64 ts, GstBin * bin, GstElement * elem) +{ + do_log (GST_CAT_BIN, GST_FUNCTION, (GObject *) bin, + "%" GST_TIME_FORMAT ", bin=%" GST_PTR_FORMAT ", element=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), bin, elem); +} + +static void +do_bin_add_post (GstTracer * self, guint64 ts, GstBin * bin, GstElement * elem, + gboolean res) +{ + do_log (GST_CAT_BIN, GST_FUNCTION, (GObject *) bin, + "%" GST_TIME_FORMAT ", bin=%" GST_PTR_FORMAT ", element=%" GST_PTR_FORMAT + ", res=%d", GST_TIME_ARGS (ts), bin, elem, res); +} + +static void +do_bin_remove_pre (GstTracer * self, guint64 ts, GstBin * bin, + GstElement * elem) +{ + do_log (GST_CAT_BIN, GST_FUNCTION, (GObject *) bin, + "%" GST_TIME_FORMAT ", bin=%" GST_PTR_FORMAT ", element=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), bin, elem); +} + +static void +do_bin_remove_post (GstTracer * self, guint64 ts, GstBin * bin, gboolean res) +{ + do_log (GST_CAT_BIN, GST_FUNCTION, (GObject *) bin, + "%" GST_TIME_FORMAT ", bin=%" GST_PTR_FORMAT ", res=%d", + GST_TIME_ARGS (ts), bin, res); +} + +static void +do_pad_link_pre (GstTracer * self, guint64 ts, GstPad * src, GstPad * sink) +{ + do_log (GST_CAT_PADS, GST_FUNCTION, (GObject *) src, + "%" GST_TIME_FORMAT ", src=%" GST_PTR_FORMAT ", sink=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), src, sink); +} + +static void +do_pad_link_post (GstTracer * self, guint64 ts, GstPad * src, GstPad * sink, + GstPadLinkReturn res) +{ + do_log (GST_CAT_PADS, GST_FUNCTION, (GObject *) src, + "%" GST_TIME_FORMAT ", src=%" GST_PTR_FORMAT ", sink=%" GST_PTR_FORMAT + ", res=%d", GST_TIME_ARGS (ts), src, sink, (gint) res); +} + +static void +do_pad_unlink_pre (GstTracer * self, guint64 ts, GstPad * src, + GstElement * sink) +{ + do_log (GST_CAT_PADS, GST_FUNCTION, (GObject *) src, + "%" GST_TIME_FORMAT ", src=%" GST_PTR_FORMAT ", sink=%" GST_PTR_FORMAT, + GST_TIME_ARGS (ts), src, sink); +} + +static void +do_pad_unlink_post (GstTracer * self, guint64 ts, GstPad * src, + GstElement * sink, gboolean res) +{ + do_log (GST_CAT_PADS, GST_FUNCTION, (GObject *) src, + "%" GST_TIME_FORMAT ", src=%" GST_PTR_FORMAT ", sink=%" GST_PTR_FORMAT + ", res=%d", GST_TIME_ARGS (ts), src, sink, (gint) res); +} + +/* tracer class */ + +static void +gst_log_tracer_class_init (GstLogTracerClass * klass) +{ } static void gst_log_tracer_init (GstLogTracer * self) { - g_object_set (self, "mask", GST_TRACER_HOOK_ALL, NULL); -} - -static void -gst_log_tracer_invoke (GstTracer * self, GstTracerHookId hid, - GstTracerMessageId mid, va_list var_args) -{ - const gchar *fmt = NULL; - GstDebugCategory *cat = GST_CAT_DEFAULT; - guint64 ts = va_arg (var_args, guint64); - - /* TODO(ensonic): log to different categories depending on 'mid' - * GST_TRACER_HOOK_ID_QUERIES -> (static category) - * GST_TRACER_HOOK_ID_TOPLOGY -> ? - */ - switch (mid) { - case GST_TRACER_MESSAGE_ID_PAD_PUSH_PRE: - cat = GST_CAT_BUFFER; - fmt = "pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT; - break; - case GST_TRACER_MESSAGE_ID_PAD_PUSH_POST: - cat = GST_CAT_BUFFER; - fmt = "pad=%" GST_PTR_FORMAT ", res=%d"; - break; - case GST_TRACER_MESSAGE_ID_PAD_PUSH_LIST_PRE: - cat = GST_CAT_BUFFER_LIST; - fmt = "pad=%" GST_PTR_FORMAT ", list=%p"; - break; - case GST_TRACER_MESSAGE_ID_PAD_PUSH_LIST_POST: - cat = GST_CAT_BUFFER_LIST; - fmt = "pad=%" GST_PTR_FORMAT ", res=%d"; - break; - case GST_TRACER_MESSAGE_ID_PAD_PULL_RANGE_PRE: - cat = GST_CAT_BUFFER; - fmt = "pad=%" GST_PTR_FORMAT ", offset=%" G_GUINT64_FORMAT ", size=%u"; - break; - case GST_TRACER_MESSAGE_ID_PAD_PULL_RANGE_POST: - cat = GST_CAT_BUFFER; - fmt = "pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT ", res=%d"; - break; - case GST_TRACER_MESSAGE_ID_PAD_PUSH_EVENT_PRE: - cat = GST_CAT_EVENT; - fmt = "pad=%" GST_PTR_FORMAT ", event=%" GST_PTR_FORMAT; - break; - case GST_TRACER_MESSAGE_ID_PAD_PUSH_EVENT_POST: - cat = GST_CAT_EVENT; - fmt = "pad=%" GST_PTR_FORMAT ", res=%d"; - break; - case GST_TRACER_MESSAGE_ID_ELEMENT_POST_MESSAGE_PRE: - cat = GST_CAT_MESSAGE; - fmt = "element=%" GST_PTR_FORMAT ", message=%" GST_PTR_FORMAT; - break; - case GST_TRACER_MESSAGE_ID_ELEMENT_POST_MESSAGE_POST: - cat = GST_CAT_MESSAGE; - fmt = "element=%" GST_PTR_FORMAT ", res=%d"; - break; - case GST_TRACER_MESSAGE_ID_ELEMENT_QUERY_PRE: - cat = GST_CAT_QUERY; - fmt = "element=%" GST_PTR_FORMAT ", query=%" GST_PTR_FORMAT; - break; - case GST_TRACER_MESSAGE_ID_ELEMENT_QUERY_POST: - cat = GST_CAT_QUERY; - fmt = "element=%" GST_PTR_FORMAT ", res=%d"; - break; - default: - break; - } - if (fmt) { - gchar *str; - - __gst_vasprintf (&str, fmt, var_args); - GST_CAT_TRACE (cat, "[%d,%d] %" GST_TIME_FORMAT ", %s", - hid, mid, GST_TIME_ARGS (ts), str); - g_free (str); - } else { - GST_CAT_TRACE (cat, "[%d,%d] %" GST_TIME_FORMAT, - hid, mid, GST_TIME_ARGS (ts)); - } + GstTracer *tracer = GST_TRACER (self); + + gst_tracing_register_hook (tracer, "pad-push-pre", + G_CALLBACK (do_push_buffer_pre)); + gst_tracing_register_hook (tracer, "pad-push-post", + G_CALLBACK (do_push_buffer_post)); + gst_tracing_register_hook (tracer, "pad-push-list-pre", + G_CALLBACK (do_push_buffer_list_pre)); + gst_tracing_register_hook (tracer, "pad-push-list-post", + G_CALLBACK (do_push_buffer_list_post)); + gst_tracing_register_hook (tracer, "pad-pull-range-pre", + G_CALLBACK (do_pull_range_pre)); + gst_tracing_register_hook (tracer, "pad-pull-range-post", + G_CALLBACK (do_pull_range_post)); + gst_tracing_register_hook (tracer, "pad-push-event-pre", + G_CALLBACK (do_push_event_pre)); + gst_tracing_register_hook (tracer, "pad-push-event-post", + G_CALLBACK (do_push_event_post)); + gst_tracing_register_hook (tracer, "pad-query-pre", + G_CALLBACK (do_pad_query_pre)); + gst_tracing_register_hook (tracer, "pad-query-post", + G_CALLBACK (do_pad_query_post)); + gst_tracing_register_hook (tracer, "element-post-message-pre", + G_CALLBACK (do_post_message_pre)); + gst_tracing_register_hook (tracer, "element-post-message-post", + G_CALLBACK (do_post_message_post)); + gst_tracing_register_hook (tracer, "element-query-pre", + G_CALLBACK (do_element_query_pre)); + gst_tracing_register_hook (tracer, "element-query-post", + G_CALLBACK (do_element_query_post)); + gst_tracing_register_hook (tracer, "element-new", + G_CALLBACK (do_element_new)); + gst_tracing_register_hook (tracer, "element-add-pad", + G_CALLBACK (do_element_add_pad)); + gst_tracing_register_hook (tracer, "element-remove-pad", + G_CALLBACK (do_element_remove_pad)); + gst_tracing_register_hook (tracer, "element-change-state-pre", + G_CALLBACK (do_element_change_state_pre)); + gst_tracing_register_hook (tracer, "element-change-state-post", + G_CALLBACK (do_element_change_state_post)); + gst_tracing_register_hook (tracer, "bin-add-pre", + G_CALLBACK (do_bin_add_pre)); + gst_tracing_register_hook (tracer, "bin-add-post", + G_CALLBACK (do_bin_add_post)); + gst_tracing_register_hook (tracer, "bin-remove-pre", + G_CALLBACK (do_bin_remove_pre)); + gst_tracing_register_hook (tracer, "bin-remove-post", + G_CALLBACK (do_bin_remove_post)); + gst_tracing_register_hook (tracer, "pad-link-pre", + G_CALLBACK (do_pad_link_pre)); + gst_tracing_register_hook (tracer, "pad-link-post", + G_CALLBACK (do_pad_link_post)); + gst_tracing_register_hook (tracer, "pad-unlink-pre", + G_CALLBACK (do_pad_unlink_pre)); + gst_tracing_register_hook (tracer, "pad-unlink-post", + G_CALLBACK (do_pad_unlink_post)); }