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() |
+ |