summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2017-10-30 11:59:19 +0100
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2018-01-29 17:16:35 +0000
commit65cc312aa8453677a5b72df89db94ba3fab49b86 (patch)
treedd82146e67815a25421ce993c82efdf4c173ded5
parent9f87b987ef15cf04f573a759a5efe73ac3b8ce2d (diff)
downloadgst-omx-65cc312aa8453677a5b72df89db94ba3fab49b86.tar.gz
add OMX_PERFORMANCE debug category
Can be used to log buffers exchange between OMX and gst-omx to profile performances of the OMX component. Ideally this should be done using tracer hooks but it's currently not possible to define custom hooks outside of core. Use GST_DEBUG="OMX_PERFORMANCE:8" to enable it. See also https://github.com/gdesmott/gst-log-parser/blob/master/src/bin/omx-perf.rs as a simple program consuming those logs to generate gnuplot files and stats. https://bugzilla.gnome.org/show_bug.cgi?id=791093
-rw-r--r--omx/gstomx.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/omx/gstomx.c b/omx/gstomx.c
index 01718de..1076153 100644
--- a/omx/gstomx.c
+++ b/omx/gstomx.c
@@ -53,6 +53,8 @@
GST_DEBUG_CATEGORY (gstomx_debug);
#define GST_CAT_DEFAULT gstomx_debug
+GST_DEBUG_CATEGORY_STATIC (OMX_PERFORMANCE);
+
G_LOCK_DEFINE_STATIC (core_handles);
static GHashTable *core_handles;
@@ -634,6 +636,37 @@ gst_omx_buffer_unmap (GstOMXBuffer * buffer)
}
}
+static void
+log_omx_performance (GstOMXComponent * comp, const gchar * event,
+ GstOMXBuffer * buf)
+{
+ GstStructure *s;
+
+ /* Don't bother creating useless structs if not needed */
+ if (gst_debug_category_get_threshold (OMX_PERFORMANCE) < GST_LEVEL_TRACE)
+ return;
+
+ if (buf) {
+ /* *INDENT-OFF* */
+ s = gst_structure_new (event,
+ "GstOMXBuffer", G_TYPE_POINTER, buf,
+ "OMX-buffer", G_TYPE_POINTER, buf->omx_buf,
+ "TimeStamp", G_TYPE_UINT64, GST_OMX_GET_TICKS (buf->omx_buf->nTimeStamp),
+ "AllocLen", G_TYPE_UINT, buf->omx_buf->nAllocLen,
+ "FilledLen", G_TYPE_UINT, buf->omx_buf->nFilledLen,
+ "flags", G_TYPE_UINT, buf->omx_buf->nFlags,
+ "flags-str", G_TYPE_STRING, gst_omx_buffer_flags_to_string (buf->omx_buf->nFlags),
+ NULL);
+ /* *INDENT-ON* */
+ } else {
+ s = gst_structure_new_empty (event);
+ }
+
+ GST_CAT_TRACE_OBJECT (OMX_PERFORMANCE, comp->parent, "%" GST_PTR_FORMAT, s);
+
+ gst_structure_free (s);
+}
+
static OMX_ERRORTYPE
EmptyBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
OMX_BUFFERHEADERTYPE * pBuffer)
@@ -667,6 +700,7 @@ EmptyBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
msg->content.buffer_done.buffer = pBuffer;
msg->content.buffer_done.empty = OMX_TRUE;
+ log_omx_performance (comp, "EmptyBufferDone", buf);
GST_LOG_OBJECT (comp->parent, "%s port %u emptied buffer %p (%p)",
comp->name, buf->port->index, buf, buf->omx_buf->pBuffer);
@@ -705,6 +739,7 @@ FillBufferDone (OMX_HANDLETYPE hComponent, OMX_PTR pAppData,
msg->content.buffer_done.buffer = pBuffer;
msg->content.buffer_done.empty = OMX_FALSE;
+ log_omx_performance (comp, "FillBufferDone", buf);
GST_LOG_OBJECT (comp->parent, "%s port %u filled buffer %p (%p)", comp->name,
buf->port->index, buf, buf->omx_buf->pBuffer);
@@ -1498,8 +1533,10 @@ gst_omx_port_release_buffer (GstOMXPort * port, GstOMXBuffer * buf)
buf->used = TRUE;
if (port->port_def.eDir == OMX_DirInput) {
+ log_omx_performance (comp, "EmptyThisBuffer", buf);
err = OMX_EmptyThisBuffer (comp->handle, buf->omx_buf);
} else {
+ log_omx_performance (comp, "FillThisBuffer", buf);
err = OMX_FillThisBuffer (comp->handle, buf->omx_buf);
}
GST_DEBUG_OBJECT (comp->parent, "Released buffer %p to %s port %u: %s "
@@ -2280,6 +2317,7 @@ gst_omx_port_populate_unlocked (GstOMXPort * port)
*/
gst_omx_buffer_reset (buf);
+ log_omx_performance (comp, "FillThisBuffer", buf);
err = OMX_FillThisBuffer (comp->handle, buf->omx_buf);
if (err != OMX_ErrorNone) {
@@ -2981,6 +3019,8 @@ plugin_init (GstPlugin * plugin)
GST_DEBUG_CATEGORY_INIT (gstomx_debug, "omx", 0, "gst-omx");
GST_DEBUG_CATEGORY_INIT (gst_omx_video_debug_category, "omxvideo", 0,
"gst-omx-video");
+ GST_DEBUG_CATEGORY_INIT (OMX_PERFORMANCE, "OMX_PERFORMANCE", 0,
+ "gst-omx performace");
/* Read configuration file gstomx.conf from the preferred
* configuration directories */