#!/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: Where json data has the following format: { "graph_name": "", "trace_name": "", "units": "", "mean": , "std": , "samples": [ { "time": , "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()