You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
#!/usr/bin/env python
|
|
# Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by a BSD-style license
|
|
# that can be found in the LICENSE file in the root of the source
|
|
# tree. An additional intellectual property rights grant can be found
|
|
# in the file PATENTS. All contributing project authors may
|
|
# be found in the AUTHORS file in the root of the source tree.
|
|
"""Plots metrics from stdin.
|
|
|
|
Expected format:
|
|
PLOTTABLE_DATA: <json data>
|
|
Where json data has the following format:
|
|
{
|
|
"graph_name": "<graph name>",
|
|
"trace_name": "<test suite name>",
|
|
"units": "<units>",
|
|
"mean": <mean value>,
|
|
"std": <standard deviation value>,
|
|
"samples": [
|
|
{ "time": <sample time in us>, "value": <sample value> },
|
|
...
|
|
]
|
|
}
|
|
"""
|
|
|
|
import fileinput
|
|
import json
|
|
import matplotlib.pyplot as plt
|
|
|
|
LINE_PREFIX = 'PLOTTABLE_DATA: '
|
|
|
|
GRAPH_NAME = 'graph_name'
|
|
TRACE_NAME = 'trace_name'
|
|
UNITS = 'units'
|
|
|
|
MICROSECONDS_IN_SECOND = 1e6
|
|
|
|
|
|
def main():
|
|
metrics = []
|
|
for line in fileinput.input():
|
|
line = line.strip()
|
|
if line.startswith(LINE_PREFIX):
|
|
line = line.replace(LINE_PREFIX, '')
|
|
metrics.append(json.loads(line))
|
|
else:
|
|
print line
|
|
|
|
for metric in metrics:
|
|
figure = plt.figure()
|
|
figure.canvas.set_window_title(metric[TRACE_NAME])
|
|
|
|
x_values = []
|
|
y_values = []
|
|
start_x = None
|
|
for sample in metric['samples']:
|
|
if start_x is None:
|
|
start_x = sample['time']
|
|
# Time is us, we want to show it in seconds.
|
|
x_values.append((sample['time'] - start_x) / MICROSECONDS_IN_SECOND)
|
|
y_values.append(sample['value'])
|
|
|
|
plt.ylabel('%s (%s)' % (metric[GRAPH_NAME], metric[UNITS]))
|
|
plt.xlabel('time (s)')
|
|
plt.title(metric[GRAPH_NAME])
|
|
plt.plot(x_values, y_values)
|
|
|
|
plt.show()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|