tracer: simplify hook api
[platform/upstream/gstreamer.git] / plugins / tracers / gstlog.c
1 /* GStreamer
2  * Copyright (C) 2013 Stefan Sauer <ensonic@users.sf.net>
3  *
4  * gstlog.c: tracing module that logs events
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the
18  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  */
21 /**
22  * SECTION:gstlog
23  * @short_description: log hook event
24  *
25  * A tracing module that logs all data from all hooks. 
26  */
27
28 #ifdef HAVE_CONFIG_H
29 #  include "config.h"
30 #endif
31
32 #include "gstlog.h"
33
34 #include <gst/printf/printf.h>
35
36 GST_DEBUG_CATEGORY_STATIC (gst_log_debug);
37 #define GST_CAT_DEFAULT gst_log_debug
38 GST_DEBUG_CATEGORY_STATIC (GST_CAT_BUFFER);
39 GST_DEBUG_CATEGORY_STATIC (GST_CAT_BUFFER_LIST);
40 GST_DEBUG_CATEGORY_STATIC (GST_CAT_EVENT);
41 GST_DEBUG_CATEGORY_STATIC (GST_CAT_MESSAGE);
42 GST_DEBUG_CATEGORY_STATIC (GST_CAT_QUERY);
43
44 #define _do_init \
45     GST_DEBUG_CATEGORY_INIT (gst_log_debug, "log", 0, "log tracer"); \
46     GST_DEBUG_CATEGORY_GET (GST_CAT_BUFFER, "GST_BUFFER"); \
47     GST_DEBUG_CATEGORY_GET (GST_CAT_BUFFER_LIST, "GST_BUFFER_LIST"); \
48     GST_DEBUG_CATEGORY_GET (GST_CAT_EVENT, "GST_EVENT"); \
49     GST_DEBUG_CATEGORY_GET (GST_CAT_MESSAGE, "GST_MESSAGE"); \
50     GST_DEBUG_CATEGORY_GET (GST_CAT_QUERY, "query");
51 #define gst_log_tracer_parent_class parent_class
52 G_DEFINE_TYPE_WITH_CODE (GstLogTracer, gst_log_tracer, GST_TYPE_TRACER,
53     _do_init);
54
55 static void
56 do_log (GstDebugCategory * cat, const char *format, va_list var_args)
57 {
58   gst_debug_log_valist (cat, GST_LEVEL_TRACE, "", "", 0, NULL,
59       format, var_args);
60 }
61
62 static void
63 do_push_buffer_pre (GstTracer * self, va_list var_args)
64 {
65   do_log (GST_CAT_BUFFER,
66       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT,
67       var_args);
68 }
69
70 static void
71 do_push_buffer_post (GstTracer * self, va_list var_args)
72 {
73   do_log (GST_CAT_BUFFER,
74       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
75 }
76
77 static void
78 do_push_buffer_list_pre (GstTracer * self, va_list var_args)
79 {
80   do_log (GST_CAT_BUFFER_LIST,
81       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", list=%p", var_args);
82 }
83
84 static void
85 do_push_buffer_list_post (GstTracer * self, va_list var_args)
86 {
87   do_log (GST_CAT_BUFFER_LIST,
88       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
89 }
90
91 static void
92 do_pull_range_pre (GstTracer * self, va_list var_args)
93 {
94   do_log (GST_CAT_BUFFER,
95       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", offset=%" G_GUINT64_FORMAT
96       ", size=%u", var_args);
97 }
98
99 static void
100 do_pull_range_post (GstTracer * self, va_list var_args)
101 {
102   do_log (GST_CAT_BUFFER,
103       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", buffer=%" GST_PTR_FORMAT
104       ", res=%d", var_args);
105 }
106
107 static void
108 do_push_event_pre (GstTracer * self, va_list var_args)
109 {
110   do_log (GST_CAT_EVENT,
111       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", event=%" GST_PTR_FORMAT,
112       var_args);
113 }
114
115 static void
116 do_push_event_post (GstTracer * self, va_list var_args)
117 {
118   do_log (GST_CAT_EVENT,
119       "%" GST_TIME_FORMAT ", pad=%" GST_PTR_FORMAT ", res=%d", var_args);
120 }
121
122 static void
123 do_post_message_pre (GstTracer * self, va_list var_args)
124 {
125   do_log (GST_CAT_EVENT,
126       "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", message=%"
127       GST_PTR_FORMAT, var_args);
128 }
129
130 static void
131 do_post_message_post (GstTracer * self, va_list var_args)
132 {
133   do_log (GST_CAT_EVENT,
134       "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", var_args);
135 }
136
137 static void
138 do_query_pre (GstTracer * self, va_list var_args)
139 {
140   do_log (GST_CAT_QUERY,
141       "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", query=%"
142       GST_PTR_FORMAT, var_args);
143 }
144
145 static void
146 do_query_post (GstTracer * self, va_list var_args)
147 {
148   do_log (GST_CAT_QUERY,
149       "%" GST_TIME_FORMAT ", element=%" GST_PTR_FORMAT ", res=%d", var_args);
150 }
151
152
153 /* tracer class */
154
155 static void
156 gst_log_tracer_class_init (GstLogTracerClass * klass)
157 {
158 }
159
160 static void
161 gst_log_tracer_init (GstLogTracer * self)
162 {
163   GstTracer *tracer = GST_TRACER (self);
164
165   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_PRE,
166       do_push_buffer_pre);
167   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_POST,
168       do_push_buffer_post);
169   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_LIST_PRE,
170       do_push_buffer_list_pre);
171   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_LIST_POST,
172       do_push_buffer_list_post);
173   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PULL_RANGE_PRE,
174       do_pull_range_pre);
175   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PULL_RANGE_POST,
176       do_pull_range_post);
177   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_EVENT_PRE,
178       do_push_event_pre);
179   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_PAD_PUSH_EVENT_POST,
180       do_push_event_post);
181   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_ELEMENT_POST_MESSAGE_PRE,
182       do_post_message_pre);
183   gst_tracer_register_hook (tracer,
184       GST_TRACER_HOOK_ID_ELEMENT_POST_MESSAGE_POST, do_post_message_post);
185   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_ELEMENT_QUERY_PRE,
186       do_query_pre);
187   gst_tracer_register_hook (tracer, GST_TRACER_HOOK_ID_ELEMENT_QUERY_POST,
188       do_query_post);
189 }