Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(373)

Unified Diff: webrtc/modules/remote_bitrate_estimator/test/plot_dynamics.py

Issue 1237903003: Modified histogram shell plot script, added python dynamics plot script (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/remote_bitrate_estimator/test/plot_dynamics.py
diff --git a/webrtc/modules/remote_bitrate_estimator/test/plot_dynamics.py b/webrtc/modules/remote_bitrate_estimator/test/plot_dynamics.py
new file mode 100644
index 0000000000000000000000000000000000000000..f825be41fdc90665e8928b09bd1902894182f83a
--- /dev/null
+++ b/webrtc/modules/remote_bitrate_estimator/test/plot_dynamics.py
@@ -0,0 +1,154 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 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.
+
+# This script is used to plot simulation dynamics.
+# Able to plot each flow separately. Other plot boxes can be added,
+# currently one for Throughput, one for Latency and one for Packet Loss.
+
+import matplotlib
+import matplotlib.pyplot as plt
+import math
+import numpy
+import re
+import sys
+
+
+class Variable:
+ def __init__(self, variable):
+ self._ID = variable[0]
+ self._xlabel = variable[1]
+ self._ylabel = variable[2]
+ self._subplot = variable[3]
+ self._y_max = variable[4]
+ self._samples = dict()
+
+ def getID(self):
+ return self._ID
+
+ def getXLabel(self):
+ return self._xlabel
+
+ def getYLabel(self):
+ return self._ylabel
+
+ def getSubplot(self):
+ return self._subplot
+
+ def getYMax(self):
+ return self._y_max
+
+ def getNumberOfFlows(self):
+ return len(self._samples)
+
+
+ def addSample(self, line):
+ groups = re.search(r'/\d_(\w+)#\d@(\w*)', line)
+ var_name = groups.group(1)
+ alg_name = groups.group(2)
+
+ if alg_name not in self._samples.keys():
+ self._samples[alg_name] = {}
+
+ if var_name not in self._samples[alg_name].keys():
+ self._samples[alg_name][var_name] = []
+
+ sample = re.search(r'(\d+\.\d+)\t([-]?\d+\.\d+)', line)
+ s = (sample.group(1),sample.group(2))
+ self._samples[alg_name][var_name].append(s)
+
+def plotVar(v, ax, show_legend, show_x_label):
+ if show_x_label:
+ ax.set_xlabel(v.getXLabel(), fontsize='large')
+ ax.set_ylabel(v.getYLabel(), fontsize='large')
+
+ for alg in v._samples.keys():
+ i = 1
+ for series in v._samples[alg].keys():
+ x = [sample[0] for sample in v._samples[alg][series]]
+ y = [sample[1] for sample in v._samples[alg][series]]
+ x = numpy.array(x)
+ y = numpy.array(y)
+ line = plt.plot(x, y, label=alg, linewidth=4.0)
+ colormap = {'Available1':'#AAAAAA',
+ 'Available2':'#AAAAAA',
+ 'GCC1':'#80D000',
+ 'GCC2':'#008000',
+ 'GCC3':'#00F000',
+ 'GCC4':'#00B000',
+ 'GCC5':'#70B020',
+ 'NADA1':'#0000AA',
+ 'NADA2':'#A0A0FF',
+ 'NADA3':'#0000FF',
+ 'NADA4':'#C0A0FF',
+ 'NADA5':'#9060B0',
+ 'TCP1':'#AAAAAA',
+ 'TCP2':'#AAAAAA',
+ 'TCP3':'#AAAAAA',
+ 'TCP4':'#AAAAAA',
+ 'TCP5':'#AAAAAA',
+ 'TCP6':'#AAAAAA',
+ 'TCP7':'#AAAAAA',
+ 'TCP8':'#AAAAAA',
+ 'TCP9':'#AAAAAA',
+ 'TCP10':'#AAAAAA',}
+
+ plt.setp(line, color=colormap[alg + str(i)])
+ if alg.startswith('Available'):
+ plt.setp(line, linestyle='--')
+ plt.grid(True)
+
+ x1, x2, y1, y2 = plt.axis()
+ if v.getYMax() >= 0:
+ y2 = v.getYMax()
+ plt.axis((0, x2, 0, y2))
+ i += 1
+
+ if show_legend:
+ legend = plt.legend(loc='upper right', shadow=True,
+ fontsize='large', ncol=len(v._samples))
+
+if __name__ == '__main__':
+
+ variables = [
+ ('Throughput_kbps', "Time (s)", "Throughput (kbps)", 1, 4000),
+ ('Delay_ms', "Time (s)", "One-way Delay (ms)", 2, 500),
+ ('Packet_Loss', "Time (s)", "Packet Loss Ratio", 3, 1.0),
+ ]
+
+ var = []
+
+ # Create objects.
+ for variable in variables:
+ var.append(Variable(variable))
+
+ # Add samples to the objects.
+ for line in sys.stdin:
+ if line.startswith("[ RUN ]"):
+ test_name = re.search('\.(\w+)', line).group(1)
+ if line.startswith("PLOT"):
+ for v in var:
+ if v.getID() in line:
+ v.addSample(line)
+
+ matplotlib.rcParams.update({'font.size': 20})
+
+ # Plot variables.
+ fig = plt.figure()
+
+ # Offest and threshold on the same plot.
+ n = var[-1].getSubplot()
+ i = 0
+ for v in var:
+ ax = fig.add_subplot(n, 1, v.getSubplot())
+ plotVar(v, ax, i == 0, i == n - 1)
+ i += 1
+
+ #fig.savefig(test_name+".jpg")
+ plt.show()
+

Powered by Google App Engine
This is Rietveld 408576698