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

Side by Side Diff: chrome/browser/media/webrtc_browsertest_perf.cc

Issue 252513002: Correcting and splitting up WebRTC metrics by unit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/webrtc_browsertest_perf.h" 5 #include "chrome/browser/media/webrtc_browsertest_perf.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "chrome/test/base/in_process_browser_test.h" 9 #include "chrome/test/base/in_process_browser_test.h"
10 #include "testing/perf/perf_test.h" 10 #include "testing/perf/perf_test.h"
(...skipping 11 matching lines...) Expand all
22 22
23 static bool MaybePrintResultsForAudioReceive( 23 static bool MaybePrintResultsForAudioReceive(
24 const std::string& ssrc, const base::DictionaryValue& pc_dict) { 24 const std::string& ssrc, const base::DictionaryValue& pc_dict) {
25 std::string value; 25 std::string value;
26 if (!pc_dict.GetString(Statistic("audioOutputLevel", ssrc), &value)) { 26 if (!pc_dict.GetString(Statistic("audioOutputLevel", ssrc), &value)) {
27 // Not an audio receive stream. 27 // Not an audio receive stream.
28 return false; 28 return false;
29 } 29 }
30 30
31 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesReceived", ssrc), &value)); 31 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesReceived", ssrc), &value));
32 perf_test::PrintResult("audio_recv", "", "bytes_recv", value, "bytes", false); 32 perf_test::PrintResult(
33 "audio_bytes", "", "bytes_recv", value, "bytes", false);
33 EXPECT_TRUE(pc_dict.GetString(Statistic("packetsLost", ssrc), &value)); 34 EXPECT_TRUE(pc_dict.GetString(Statistic("packetsLost", ssrc), &value));
34 perf_test::PrintResult("audio_recv", "", "packets_lost", value, "", false); 35 perf_test::PrintResult(
36 "audio_misc", "", "packets_lost", value, "", false);
35 37
36 return true; 38 return true;
37 } 39 }
38 40
39 static bool MaybePrintResultsForAudioSend( 41 static bool MaybePrintResultsForAudioSend(
40 const std::string& ssrc, const base::DictionaryValue& pc_dict) { 42 const std::string& ssrc, const base::DictionaryValue& pc_dict) {
41 std::string value; 43 std::string value;
42 if (!pc_dict.GetString(Statistic("audioInputLevel", ssrc), &value)) { 44 if (!pc_dict.GetString(Statistic("audioInputLevel", ssrc), &value)) {
43 // Not an audio send stream. 45 // Not an audio send stream.
44 return false; 46 return false;
45 } 47 }
46 48
47 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesSent", ssrc), &value)); 49 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesSent", ssrc), &value));
48 perf_test::PrintResult("audio_send", "", "bytes_sent", value, "bytes", false); 50 perf_test::PrintResult(
51 "audio_bytes", "", "bytes_sent", value, "bytes", false);
49 EXPECT_TRUE(pc_dict.GetString(Statistic("googJitterReceived", ssrc), &value)); 52 EXPECT_TRUE(pc_dict.GetString(Statistic("googJitterReceived", ssrc), &value));
50 perf_test::PrintResult("audio_send", "", "goog_jitter_recv", value, "", 53 perf_test::PrintResult(
51 false); 54 "audio_tx", "", "goog_jitter_recv", value, "ms", false);
52 EXPECT_TRUE(pc_dict.GetString(Statistic("googRtt", ssrc), &value)); 55 EXPECT_TRUE(pc_dict.GetString(Statistic("googRtt", ssrc), &value));
53 perf_test::PrintResult("audio_send", "", "goog_rtt", value, "ms", false); 56 perf_test::PrintResult(
57 "audio_tx", "", "goog_rtt", value, "ms", false);
58 return true;
59 }
60
61 static bool MaybePrintResultsForVideoSend(
62 const std::string& ssrc, const base::DictionaryValue& pc_dict) {
63 std::string value;
64 if (!pc_dict.GetString(Statistic("googFrameRateSent", ssrc), &value)) {
65 // Not a video send stream.
66 return false;
67 }
68
69 // Graph these by unit: the dashboard expects all stats in one graph to have
70 // the same unit (e.g. ms, fps, etc). Most graphs, like video_fps, will also
71 // be populated by the counterparts on the video receiving side.
72 perf_test::PrintResult(
73 "video_fps", "", "goog_frame_rate_sent", value, "fps", false);
74 EXPECT_TRUE(pc_dict.GetString(Statistic("googFrameRateInput", ssrc), &value));
75 perf_test::PrintResult(
76 "video_fps", "", "goog_frame_rate_input", value, "fps", false);
77
78 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesSent", ssrc), &value));
79 perf_test::PrintResult(
80 "video_total_bytes", "", "bytes_sent", value, "bytes", false);
81
82 EXPECT_TRUE(pc_dict.GetString(Statistic("googFirsReceived", ssrc), &value));
83 perf_test::PrintResult(
84 "video_misc", "", "goog_firs_recv", value, "", false);
85 EXPECT_TRUE(pc_dict.GetString(Statistic("googNacksReceived", ssrc), &value));
86 perf_test::PrintResult(
87 "video_misc", "", "goog_nacks_recv", value, "", false);
88
89 EXPECT_TRUE(pc_dict.GetString(Statistic("googFrameWidthSent", ssrc), &value));
90 perf_test::PrintResult(
91 "video_resolution", "", "goog_frame_width_sent", value, "pixels", false);
92 EXPECT_TRUE(
93 pc_dict.GetString(Statistic("googFrameHeightSent", ssrc), &value));
94 perf_test::PrintResult(
95 "video_resolution", "", "goog_frame_height_sent", value, "pixels", false);
96
97 EXPECT_TRUE(pc_dict.GetString(
98 Statistic("googCaptureJitterMs", ssrc), &value));
99 perf_test::PrintResult(
100 "video_tx", "", "goog_capture_jitter_ms", value, "ms", false);
101 EXPECT_TRUE(pc_dict.GetString(
102 Statistic("googCaptureQueueDelayMsPerS", ssrc), &value));
103 perf_test::PrintResult(
104 "video_tx", "", "goog_capture_queue_delay_ms_per_s",
105 value, "ms/s", false);
106 EXPECT_TRUE(pc_dict.GetString(Statistic("googAvgEncodeMs", ssrc), &value));
107 perf_test::PrintResult(
108 "video_tx", "", "goog_avg_encode_ms", value, "ms", false);
109 EXPECT_TRUE(pc_dict.GetString(Statistic("googRtt", ssrc), &value));
110 perf_test::PrintResult("video_tx", "", "goog_rtt", value, "ms", false);
111
112 EXPECT_TRUE(pc_dict.GetString(
113 Statistic("googEncodeUsagePercent", ssrc), &value));
114 perf_test::PrintResult(
115 "video_cpu_usage", "", "goog_encode_usage_percent", value, "%", false);
54 return true; 116 return true;
55 } 117 }
56 118
57 static bool MaybePrintResultsForVideoReceive( 119 static bool MaybePrintResultsForVideoReceive(
58 const std::string& ssrc, const base::DictionaryValue& pc_dict) { 120 const std::string& ssrc, const base::DictionaryValue& pc_dict) {
59 std::string value; 121 std::string value;
60 if (!pc_dict.GetString(Statistic("googFrameRateInput", ssrc), &value)) { 122 if (!pc_dict.GetString(Statistic("googFrameRateReceived", ssrc), &value)) {
61 // Not a video receive stream. 123 // Not a video receive stream.
62 return false; 124 return false;
63 } 125 }
64 126
65 perf_test::PrintResult("video_recv", "", "goog_frame_rate_input", value, 127 perf_test::PrintResult(
66 "fps", false); 128 "video_fps", "", "goog_frame_rate_recv", value, "fps", false);
67
68 EXPECT_TRUE(pc_dict.GetString(Statistic("googFrameRateSent", ssrc), &value));
69 perf_test::PrintResult("video_recv", "", "goog_frame_rate_sent", value, "fps",
70 false);
71 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesSent", ssrc), &value));
72 perf_test::PrintResult("video_recv", "", "bytes_sent", value, "bytes", false);
73 EXPECT_TRUE(pc_dict.GetString(Statistic("googFirsReceived", ssrc), &value));
74 perf_test::PrintResult("video_recv", "", "goog_firs_recv", value, "", false);
75 EXPECT_TRUE(pc_dict.GetString(Statistic("googNacksReceived", ssrc), &value));
76 perf_test::PrintResult("video_recv", "", "goog_nacks_recv", value, "", false);
77 EXPECT_TRUE(pc_dict.GetString(Statistic("googFrameWidthSent", ssrc), &value));
78 perf_test::PrintResult("video_recv", "", "goog_frame_width_sent", value,
79 "pixels", false);
80 EXPECT_TRUE( 129 EXPECT_TRUE(
81 pc_dict.GetString(Statistic("googFrameHeightSent", ssrc), &value)); 130 pc_dict.GetString(Statistic("googFrameRateOutput", ssrc), &value));
82 perf_test::PrintResult("video_recv", "", "goog_frame_height_sent", value, 131 perf_test::PrintResult(
83 "pixels", false); 132 "video_fps", "", "goog_frame_rate_output", value, "fps", false);
84 EXPECT_TRUE(pc_dict.GetString(
85 Statistic("googCaptureJitterMs", ssrc), &value));
86 perf_test::PrintResult("video_recv", "", "goog_capture_jitter_ms", value,
87 "ms", false);
88 EXPECT_TRUE(pc_dict.GetString(
89 Statistic("googCaptureQueueDelayMsPerS", ssrc), &value));
90 perf_test::PrintResult("video_recv", "", "goog_capture_queue_delay_ms_per_s",
91 value, "ms/s", false);
92 EXPECT_TRUE(pc_dict.GetString(
93 Statistic("googEncodeUsagePercent", ssrc), &value));
94 perf_test::PrintResult("video_recv", "", "goog_encode_usage_percent",
95 value, "%", false);
96 EXPECT_TRUE(pc_dict.GetString(Statistic("googAvgEncodeMs", ssrc), &value));
97 perf_test::PrintResult("video_recv", "", "goog_avg_encode_ms", value, "ms",
98 false);
99 EXPECT_TRUE(pc_dict.GetString(Statistic("googRtt", ssrc), &value));
100 perf_test::PrintResult("video_recv", "", "goog_rtt", value, "ms", false);
101 return true;
102 }
103
104 static bool MaybePrintResultsForVideoSend(
105 const std::string& ssrc, const base::DictionaryValue& pc_dict) {
106 std::string value;
107 if (!pc_dict.GetString(Statistic("googFrameRateOutput", ssrc), &value)) {
108 // Not a video receive stream.
109 return false;
110 }
111
112 perf_test::PrintResult("video_send", "", "goog_frame_rate_output", value,
113 "fps", false);
114 133
115 EXPECT_TRUE(pc_dict.GetString(Statistic("packetsLost", ssrc), &value)); 134 EXPECT_TRUE(pc_dict.GetString(Statistic("packetsLost", ssrc), &value));
116 perf_test::PrintResult("video_send", "", "packets_lost", value, "packets", 135 perf_test::PrintResult("video_misc", "", "packets_lost", value, "", false);
117 false); 136
137 EXPECT_TRUE(pc_dict.GetString(Statistic("bytesReceived", ssrc), &value));
138 perf_test::PrintResult(
139 "video_total_bytes", "", "bytes_recv", value, "bytes", false);
140
118 EXPECT_TRUE( 141 EXPECT_TRUE(
119 pc_dict.GetString(Statistic("googFrameWidthReceived", ssrc), &value)); 142 pc_dict.GetString(Statistic("googFrameWidthReceived", ssrc), &value));
120 perf_test::PrintResult("video_send", "", "goog_frame_width_recv", value, 143 perf_test::PrintResult(
121 "pixels", false); 144 "video_resolution", "", "goog_frame_width_recv", value, "pixels", false);
122 EXPECT_TRUE( 145 EXPECT_TRUE(
123 pc_dict.GetString(Statistic("googFrameHeightReceived", ssrc), &value)); 146 pc_dict.GetString(Statistic("googFrameHeightReceived", ssrc), &value));
124 perf_test::PrintResult("video_send", "", "goog_frame_height_recv", value, 147 perf_test::PrintResult(
125 "pixels", false); 148 "video_resolution", "", "goog_frame_height_recv", value, "pixels", false);
126 EXPECT_TRUE( 149
127 pc_dict.GetString(Statistic("googFrameRateReceived", ssrc), &value));
128 perf_test::PrintResult("video_send", "", "goog_frame_rate_recv", value, "fps",
129 false);
130 EXPECT_TRUE(pc_dict.GetString(Statistic("googCurrentDelayMs", ssrc), &value)); 150 EXPECT_TRUE(pc_dict.GetString(Statistic("googCurrentDelayMs", ssrc), &value));
131 perf_test::PrintResult("video_send", "", "goog_current_delay_ms", value, "ms", 151 perf_test::PrintResult(
132 false); 152 "video_rx", "", "goog_current_delay_ms", value, "ms", false);
133 EXPECT_TRUE(pc_dict.GetString(Statistic("googTargetDelayMs", ssrc), &value)); 153 EXPECT_TRUE(pc_dict.GetString(Statistic("googTargetDelayMs", ssrc), &value));
134 perf_test::PrintResult("video_send", "", "goog_target_delay_ms", value, "ms", 154 perf_test::PrintResult(
135 false); 155 "video_rx", "", "goog_target_delay_ms", value, "ms", false);
136 EXPECT_TRUE(pc_dict.GetString(Statistic("googDecodeMs", ssrc), &value)); 156 EXPECT_TRUE(pc_dict.GetString(Statistic("googDecodeMs", ssrc), &value));
137 perf_test::PrintResult("video_send", "", "goog_decode_ms", value, "ms", 157 perf_test::PrintResult("video_rx", "", "goog_decode_ms", value, "ms", false);
138 false);
139 EXPECT_TRUE(pc_dict.GetString(Statistic("googMaxDecodeMs", ssrc), &value)); 158 EXPECT_TRUE(pc_dict.GetString(Statistic("googMaxDecodeMs", ssrc), &value));
140 perf_test::PrintResult("video_send", "", "goog_max_decode_ms", value, "ms", 159 perf_test::PrintResult(
141 false); 160 "video_rx", "", "goog_max_decode_ms", value, "ms", false);
142 EXPECT_TRUE(pc_dict.GetString(Statistic("googJitterBufferMs", ssrc), &value)); 161 EXPECT_TRUE(pc_dict.GetString(Statistic("googJitterBufferMs", ssrc), &value));
143 perf_test::PrintResult("video_send", "", "goog_jitter_buffer_ms", value, "ms", 162 perf_test::PrintResult(
144 false); 163 "video_rx", "", "goog_jitter_buffer_ms", value, "ms", false);
145 EXPECT_TRUE(pc_dict.GetString(Statistic("googRenderDelayMs", ssrc), &value)); 164 EXPECT_TRUE(pc_dict.GetString(Statistic("googRenderDelayMs", ssrc), &value));
146 perf_test::PrintResult("video_send", "", "goog_render_delay_ms", value, "ms", 165 perf_test::PrintResult(
147 false); 166 "video_rx", "", "goog_render_delay_ms", value, "ms", false);
148 167
149 return true; 168 return true;
150 } 169 }
151 170
152 static std::string ExtractSsrcIdentifier(const std::string& key) { 171 static std::string ExtractSsrcIdentifier(const std::string& key) {
153 // Example key: ssrc_1234-someStatName. Grab the part before the dash. 172 // Example key: ssrc_1234-someStatName. Grab the part before the dash.
154 size_t key_start_pos = 0; 173 size_t key_start_pos = 0;
155 size_t key_end_pos = key.find("-"); 174 size_t key_end_pos = key.find("-");
156 CHECK(key_end_pos != std::string::npos) << "Could not parse key " << key; 175 CHECK(key_end_pos != std::string::npos) << "Could not parse key " << key;
157 return key.substr(key_start_pos, key_end_pos - key_start_pos); 176 return key.substr(key_start_pos, key_end_pos - key_start_pos);
(...skipping 14 matching lines...) Expand all
172 return result; 191 return result;
173 } 192 }
174 193
175 namespace test { 194 namespace test {
176 195
177 void PrintBweForVideoMetrics(const base::DictionaryValue& pc_dict) { 196 void PrintBweForVideoMetrics(const base::DictionaryValue& pc_dict) {
178 const std::string kBweStatsKey = "bweforvideo"; 197 const std::string kBweStatsKey = "bweforvideo";
179 std::string value; 198 std::string value;
180 ASSERT_TRUE(pc_dict.GetString( 199 ASSERT_TRUE(pc_dict.GetString(
181 Statistic("googAvailableSendBandwidth", kBweStatsKey), &value)); 200 Statistic("googAvailableSendBandwidth", kBweStatsKey), &value));
182 perf_test::PrintResult("bwe_stats", "", "available_send_bw", value, "bytes/s", 201 perf_test::PrintResult(
183 false); 202 "bwe_stats", "", "available_send_bw", value, "bit/s", false);
184 ASSERT_TRUE(pc_dict.GetString( 203 ASSERT_TRUE(pc_dict.GetString(
185 Statistic("googAvailableReceiveBandwidth", kBweStatsKey), &value)); 204 Statistic("googAvailableReceiveBandwidth", kBweStatsKey), &value));
186 perf_test::PrintResult("bwe_stats", "", "available_recv_bw", value, "bytes/s", 205 perf_test::PrintResult(
187 false); 206 "bwe_stats", "", "available_recv_bw", value, "bit/s", false);
188 ASSERT_TRUE(pc_dict.GetString(Statistic("googTargetEncBitrate", kBweStatsKey), 207 ASSERT_TRUE(pc_dict.GetString(
189 &value)); 208 Statistic("googTargetEncBitrate", kBweStatsKey), &value));
190 perf_test::PrintResult("bwe_stats", "", "target_enc_bitrate", value, "bit/s", 209 perf_test::PrintResult(
191 false); 210 "bwe_stats", "", "target_enc_bitrate", value, "bit/s", false);
192 ASSERT_TRUE(pc_dict.GetString(Statistic("googActualEncBitrate", kBweStatsKey), 211 ASSERT_TRUE(pc_dict.GetString(
193 &value)); 212 Statistic("googActualEncBitrate", kBweStatsKey), &value));
194 perf_test::PrintResult("bwe_stats", "", "actual_enc_bitrate", value, "bit/s", 213 perf_test::PrintResult(
195 false); 214 "bwe_stats", "", "actual_enc_bitrate", value, "bit/s", false);
196 ASSERT_TRUE(pc_dict.GetString(Statistic("googTransmitBitrate", kBweStatsKey), 215 ASSERT_TRUE(pc_dict.GetString(
197 &value)); 216 Statistic("googTransmitBitrate", kBweStatsKey), &value));
198 perf_test::PrintResult("bwe_stats", "", "transmit_bitrate", value, "bit/s", 217 perf_test::PrintResult(
199 false); 218 "bwe_stats", "", "transmit_bitrate", value, "bit/s",false);
200 } 219 }
201 220
202 void PrintMetricsForAllStreams(const base::DictionaryValue& pc_dict) { 221 void PrintMetricsForAllStreams(const base::DictionaryValue& pc_dict) {
203 const base::DictionaryValue* stats_dict; 222 const base::DictionaryValue* stats_dict;
204 ASSERT_TRUE(pc_dict.GetDictionary("stats", &stats_dict)); 223 ASSERT_TRUE(pc_dict.GetDictionary("stats", &stats_dict));
205 std::set<std::string> ssrc_identifiers = FindAllSsrcIdentifiers(*stats_dict); 224 std::set<std::string> ssrc_identifiers = FindAllSsrcIdentifiers(*stats_dict);
206 225
207 std::set<std::string>::const_iterator ssrc_iterator = 226 std::set<std::string>::const_iterator ssrc_iterator =
208 ssrc_identifiers.begin(); 227 ssrc_identifiers.begin();
209 for (; ssrc_iterator != ssrc_identifiers.end(); ++ssrc_iterator) { 228 for (; ssrc_iterator != ssrc_identifiers.end(); ++ssrc_iterator) {
210 // Figure out which stream type this ssrc represents and print all the 229 // Figure out which stream type this ssrc represents and print all the
211 // interesting metrics for it. 230 // interesting metrics for it.
212 const std::string& ssrc = *ssrc_iterator; 231 const std::string& ssrc = *ssrc_iterator;
213 bool did_recognize_stream_type = 232 bool did_recognize_stream_type =
214 MaybePrintResultsForAudioReceive(ssrc, pc_dict) || 233 MaybePrintResultsForAudioReceive(ssrc, pc_dict) ||
215 MaybePrintResultsForAudioSend(ssrc, pc_dict) || 234 MaybePrintResultsForAudioSend(ssrc, pc_dict) ||
216 MaybePrintResultsForVideoReceive(ssrc, pc_dict) || 235 MaybePrintResultsForVideoReceive(ssrc, pc_dict) ||
217 MaybePrintResultsForVideoSend(ssrc, pc_dict); 236 MaybePrintResultsForVideoSend(ssrc, pc_dict);
218 ASSERT_TRUE(did_recognize_stream_type) << "Failed to figure out which " 237 ASSERT_TRUE(did_recognize_stream_type) << "Failed to figure out which "
219 "kind of stream SSRC " << ssrc 238 "kind of stream SSRC " << ssrc
220 << " is. "; 239 << " is. ";
221 } 240 }
222 } 241 }
223 242
224 } // namespace test 243 } // namespace test
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698