diff options
author | Stefan Sauer <ensonic@users.sf.net> | 2012-12-17 21:17:41 +0100 |
---|---|---|
committer | Stefan Sauer <ensonic@users.sf.net> | 2012-12-17 21:17:41 +0100 |
commit | 29a34058a9a128532e19a4ee24b32d0528877ba1 (patch) | |
tree | 898f34dfeb82c5d3353ebc4889ba26c4dda0c2f0 | |
parent | c1c19f4bd2e1aa2f51ffc88821bd2b83a1be6385 (diff) |
trace: also track calls to _send_event, but filter nested calls
-rw-r--r-- | src/gsttracelib.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/gsttracelib.c b/src/gsttracelib.c index 7861a4a..76e8d22 100644 --- a/src/gsttracelib.c +++ b/src/gsttracelib.c @@ -367,14 +367,13 @@ _log_common (GstClockTimeDiff treal) * cpufreq-selector -g ondemand */ /* this is the total average, apply a window */ //cpuload = (guint) gst_util_uint64_scale (tusersys, G_GINT64_CONSTANT(100), treal); aspent+=dspent; areal+=dreal; - if(areal > GST_SECOND) { - //if(areal > (GST_MSECOND*500)) { + if(areal > GST_MSECOND * 50) { cpuload = (guint) gst_util_uint64_scale (aspent, G_GINT64_CONSTANT(100), areal); /* we only want cpu-load in playing, otherwise max is almost always 100 */ if (check_cpuload && (cpuload <= 100)) { if (cpuload > stats->max_cpuload) { stats->max_cpuload = cpuload; if (cpuload > max_cpuload) { @@ -1206,28 +1205,21 @@ gst_pad_pull_range (GstPad * pad, guint64 offset, guint size, GstBuffer ** buffe } else { stats->last_ts = elapsed1; } return ret; } -/* gst_pad_push_event(pad) calls gst_pad_send_event(peer); - * but not in all code-paths' - */ -static gboolean (*orig_pad_push_event) (GstPad *, GstEvent *); - -gboolean -gst_pad_push_event (GstPad *pad, GstEvent *event) +void +gst_pad_send_or_push_event_common (GstPad *pad, GstEvent *event, GstClockTimeDiff elapsed) { - GstClockTimeDiff elapsed = _get_elapsed(); GstObject *parent; GstElement *element; GsttlElementStats *stats, *that_stats; GstPad *real_pad = pad; GstPad *peer_pad = GST_PAD_PEER (pad); GsttlPadStats *pad_stats,*peer_pad_stats; - gboolean ret; parent = _get_real_pad_parent(real_pad); if(element = GST_ELEMENT (parent)) { stats = _get_element_stats (element); pad_stats = _get_pad_stats (pad); peer_pad_stats = _get_pad_stats (peer_pad); @@ -1282,21 +1274,62 @@ gst_pad_push_event (GstPad *pad, GstEvent *event) stats->num_events++; num_events++; /* switch cpu-load logging on/off */ _check_playing (element); } +} + + +/* gst_pad_push_event(pad) calls gst_pad_send_event(peer); + * but not in all code-paths', we track both, but handle the case where one calls + * the other */ +static gboolean (*orig_pad_push_event) (GstPad *, GstEvent *); +static gboolean _in_push_event = FALSE; + +gboolean +gst_pad_push_event (GstPad *pad, GstEvent *event) +{ + GstClockTimeDiff elapsed = _get_elapsed(); + gboolean ret; + + gst_pad_send_or_push_event_common (pad, event, elapsed); _log_common(elapsed); + _in_push_event = TRUE; ret = orig_pad_push_event (pad, event); elapsed = _get_elapsed(); _log_common(elapsed); + _in_push_event = FALSE; + + return ret; +} + +static gboolean (*orig_pad_send_event) (GstPad *, GstEvent *); + +gboolean +gst_pad_send_event (GstPad *pad, GstEvent *event) +{ + GstClockTimeDiff elapsed = _get_elapsed(); + gboolean ret; + + if (_in_push_event) { + return orig_pad_send_event (pad, event); + } + + gst_pad_send_or_push_event_common (pad, event, elapsed); + + _log_common(elapsed); + ret = orig_pad_send_event (pad, event); + elapsed = _get_elapsed(); + _log_common(elapsed); return ret; } + static gboolean (*orig_element_post_message) (GstElement *, GstMessage *); gboolean gst_element_post_message (GstElement *element, GstMessage *message) { GstClockTimeDiff elapsed = _get_elapsed(); |