|  | #!/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() |