mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
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
This commit is contained in:
parent
9f87b987ef
commit
65cc312aa8
1 changed files with 40 additions and 0 deletions
40
omx/gstomx.c
40
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 */
|
||||
|
|
Loading…
Reference in a new issue