OLD | NEW |
| (Empty) |
1 #!/bin/bash | |
2 | |
3 # Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | |
4 # | |
5 # Use of this source code is governed by a BSD-style license | |
6 # that can be found in the LICENSE file in the root of the source | |
7 # tree. An additional intellectual property rights grant can be found | |
8 # in the file PATENTS. All contributing project authors may | |
9 # be found in the AUTHORS file in the root of the source tree. | |
10 | |
11 # To set up in e.g. Eclipse, run a separate shell and pipe the output from the | |
12 # test into this script. | |
13 # | |
14 # In Eclipse, that amounts to creating a Run Configuration which starts | |
15 # "/bin/bash" with the arguments "-c [trunk_path]/out/Debug/modules_unittests | |
16 # --gtest_filter=*BweTest* | [trunk_path]/webrtc/modules/ | |
17 # remote_bitrate_estimator/test/plot_dynamics.sh | |
18 | |
19 # This script supports multiple figures (windows), the figure is specified as an | |
20 # identifier at the first argument after the PLOT command. Each figure has a | |
21 # single y axis and a dual y axis mode. If any line specifies an axis by ending | |
22 # with "#<axis number (1 or 2)>" two y axis will be used, the first will be | |
23 # assumed to represent bitrate (in kbps) and the second will be assumed to | |
24 # represent time deltas (in ms). | |
25 | |
26 log=$(</dev/stdin) | |
27 | |
28 # Plot dynamics. | |
29 function gen_gnuplot_input { | |
30 colors=(a7001f 0a60c2 b2582b 21a66c d6604d 4393c3 f4a582 92c5de edcbb7 b1c5d0) | |
31 plots=$(echo "$log" | grep "^PLOT" | grep "#") | |
32 # Each figure corresponds to a separate plot window. | |
33 figures=($(echo "$plots" | cut -f 2 | sort | uniq)) | |
34 | |
35 for figure in "${figures[@]}" ; do | |
36 # Each data set corresponds to a plot line. | |
37 data_sets=$(echo "$plots" | grep "^PLOT.$figure" | cut -f 3 | sort | uniq) | |
38 # Lines can be scaled on the left (1) or right (2) axis. | |
39 linetypes=($(echo "$data_sets" | grep "#" | cut -d '#' -f 2 | \ | |
40 cut -d '@' -f 1 | uniq)) | |
41 | |
42 # Set plot configurations. | |
43 echo "reset; " | |
44 echo "set terminal wxt $figure size 1440,900 font \"Arial,9\"; " | |
45 echo "set xlabel \"Seconds\"; " | |
46 if (( "${#linetypes[@]}" > "1" )); then | |
47 echo "set ylabel 'Bitrate (kbps)';" # Left side. | |
48 echo "set ytics nomirror;" | |
49 echo "set y2label 'Time delta (ms)';" # Right side. | |
50 echo "set y2tics nomirror;" | |
51 else | |
52 # Single axis (left side), set its label according to data. | |
53 y_label=$(echo "$data_sets" | grep "#" | cut -d '#' -f 1 | \ | |
54 cut -d ' ' -f 1 | cut -d '/' -f 3 | sed 's/[0-9]/#/g' | \ | |
55 cut -d '#' -f 3 | head -n 1 | sed 's/_/ /g') | |
56 echo "set ylabel \"$y_label\";" | |
57 fi | |
58 | |
59 i=0 | |
60 echo -n "plot " | |
61 for set in $data_sets ; do | |
62 (( i++ )) && echo -n "," | |
63 echo -n "'-' with " | |
64 echo -n "linespoints " | |
65 echo -n "ps 0.5 " | |
66 echo -n "lc rgbcolor \"#${colors[$(($i % 10))]}\" " | |
67 if (( "${#linetypes[@]}" > "1" )); then | |
68 # Multiple sets can have a same line plot. | |
69 linetype=$(echo "$set" | grep "#" | cut -d '#' -f 2 | cut -d '@' -f 1) | |
70 if (( "${#linetype}" > "0")); then | |
71 echo -n "axes x1y$linetype " | |
72 else | |
73 # If no line type is specified, but line types are used, we will | |
74 # default to scale on the left axis. | |
75 echo -n "axes x1y1 " | |
76 fi | |
77 fi | |
78 echo -n "title \"$set\" " | |
79 done | |
80 echo | |
81 for set in $data_sets ; do | |
82 echo "$log" | grep "^PLOT.$figure.$set" | cut -f 4,5 | |
83 echo "e" | |
84 done | |
85 done | |
86 } | |
87 gen_gnuplot_input | gnuplot -persist | |
OLD | NEW |