Improve perf metrics plotter

Add ability to specify which metrics to plot on the plotter level and
add sorting of plottable data because there is no guarantee on the perf
writer side that output is sorted by time.

Bug: webrtc:11959
Change-Id: I87e6f5720fff2b259f58e3fc5f7ed2462568e0d3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185963
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32233}
This commit is contained in:
Artem Titov
2020-09-29 15:14:06 +02:00
committed by Commit Bot
parent 10ea118410
commit 0b9e354d61

View File

@ -24,6 +24,7 @@ Where json data has the following format:
}
"""
import argparse
import fileinput
import json
import matplotlib.pyplot as plt
@ -38,8 +39,19 @@ MICROSECONDS_IN_SECOND = 1e6
def main():
parser = argparse.ArgumentParser(
description='Plots metrics exported from WebRTC perf tests')
parser.add_argument('-m', '--metrics', type=str, nargs='*',
help='Metrics to plot. If nothing specified then will plot all available')
args = parser.parse_args()
metrics_to_plot = set()
if args.metrics:
for metric in args.metrics:
metrics_to_plot.add(metric)
metrics = []
for line in fileinput.input():
for line in fileinput.input('-'):
line = line.strip()
if line.startswith(LINE_PREFIX):
line = line.replace(LINE_PREFIX, '')
@ -48,13 +60,18 @@ def main():
print line
for metric in metrics:
if len(metrics_to_plot) > 0 and metric[GRAPH_NAME] not in metrics_to_plot:
continue
figure = plt.figure()
figure.canvas.set_window_title(metric[TRACE_NAME])
x_values = []
y_values = []
start_x = None
for sample in metric['samples']:
samples = metric['samples']
samples.sort(key=lambda x: x['time'])
for sample in samples:
if start_x is None:
start_x = sample['time']
# Time is us, we want to show it in seconds.