summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-08-19 20:09:46 +0200
committerwm4 <wm4@nowhere>2014-08-19 20:09:46 +0200
commit3c07e86fd3854b5e00e23982293fd937eb0444a9 (patch)
tree0695fe9a3edfcb024f88ac6c1d833d533df32cfd
parent3d968fc620da8781b06044af2ec38ea2a9f95d41 (diff)
downloadmpv-3c07e86fd3854b5e00e23982293fd937eb0444a9.tar.bz2
mpv-3c07e86fd3854b5e00e23982293fd937eb0444a9.tar.xz
TOOLS/stats-conv.py: improvements
This is still pretty useful for debugging timing-dependent things.
-rwxr-xr-xTOOLS/stats-conv.py49
1 files changed, 31 insertions, 18 deletions
diff --git a/TOOLS/stats-conv.py b/TOOLS/stats-conv.py
index 29a6b7ea7d..2903c0aa46 100755
--- a/TOOLS/stats-conv.py
+++ b/TOOLS/stats-conv.py
@@ -18,10 +18,11 @@ e.g.:
Currently, the following event types are supported:
- 'start' <name> start of the named event
- 'end' <name> end of the named event
- 'value' <float> <name> a normal value (as opposed to event)
- <event> singular event
+ 'start' <name> start of the named event
+ 'end' <name> end of the named event
+ 'value' <float> <name> a normal value (as opposed to event)
+ 'event-timed' <ts> <name> singular event at the given timestamp
+ <name> singular event
"""
@@ -29,19 +30,32 @@ class G:
events = {}
sevents = [] # events, deterministically sorted
start = None
+ # http://matplotlib.org/api/markers_api.html#module-matplotlib.markers
+ markers = ["o", "8", "s", "p", "*", "h", "+", "x", "D"]
+
+def find_marker():
+ if len(G.markers) == 0:
+ return "o"
+ m = G.markers[0]
+ G.markers = G.markers[1:]
+ return m
class Event:
pass
-def get_event(event):
+def get_event(event, evtype):
if event not in G.events:
e = Event()
G.events[event] = e
e.name = event
e.vals = []
- e.type = "unknown"
+ e.type = evtype
+ e.marker = "o"
+ e.numid = len(G.events)
G.sevents = list(G.events.values())
G.sevents.sort(key=lambda x: x.name)
+ if e.type == "event-signal":
+ e.marker = find_marker()
return G.events[event]
for line in [line.split("#")[0].strip() for line in open(filename, "r")]:
@@ -54,30 +68,29 @@ for line in [line.split("#")[0].strip() for line in open(filename, "r")]:
G.start = ts
ts = ts - G.start
if event.startswith("start "):
- e = get_event(event[6:])
- e.type = "event"
+ e = get_event(event[6:], "event")
e.vals.append((ts, 0))
e.vals.append((ts, 1))
elif event.startswith("end "):
- e = get_event(event[4:])
- e.type = "event"
+ e = get_event(event[4:], "event")
e.vals.append((ts, 1))
e.vals.append((ts, 0))
elif event.startswith("value "):
_, val, name = event.split(" ", 2)
val = float(val)
- e = get_event(name)
- e.type = "value"
+ e = get_event(name, "value")
e.vals.append((ts, val))
+ elif event.startswith("event-timed "):
+ _, val, name = event.split(" ", 2)
+ val = int(val) / 1000 - G.start
+ e = get_event(name, "event-signal")
+ e.vals.append((val, 1))
else:
- e = get_event(event)
- e.type = "event-signal"
+ e = get_event(event, "event-signal")
e.vals.append((ts, 1))
-ao_events = ["ao fill", "audio wait"]
for e in G.sevents:
- if e.name in ao_events:
- e.vals = [(x, y * 0.5) for (x, y) in e.vals]
+ e.vals = [(x, y * e.numid / len(G.events)) for (x, y) in e.vals]
plot.hold(True)
mainpl = plot.subplot(2, 1, 1)
@@ -89,7 +102,7 @@ for e in G.sevents:
plot.subplot(2, 1, 1)
pl, = plot.plot([x for x,y in e.vals], [y for x,y in e.vals], label=e.name)
if e.type == "event-signal":
- plot.setp(pl, marker = "o", linestyle = "None")
+ plot.setp(pl, marker = e.marker, linestyle = "None")
legend.append(pl)
plot.subplot(2, 1, 1)
plot.legend(legend, [pl.get_label() for pl in legend])