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

Side by Side Diff: media/cast/logging/logging_impl.cc

Issue 130423007: Cast:Updating logging stats (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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
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 "base/debug/trace_event.h" 5 #include "base/debug/trace_event.h"
6 #include "base/metrics/histogram.h" 6 #include "base/metrics/histogram.h"
7 #include "media/cast/logging/logging_impl.h" 7 #include "media/cast/logging/logging_impl.h"
8 #include "net/base/big_endian.h" 8 #include "net/base/big_endian.h"
9 9
10 namespace media { 10 namespace media {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 if (config_.enable_raw_data_collection) { 47 if (config_.enable_raw_data_collection) {
48 raw_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, frame_id, 48 raw_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, frame_id,
49 frame_size); 49 frame_size);
50 } 50 }
51 if (config_.enable_stats_data_collection) { 51 if (config_.enable_stats_data_collection) {
52 stats_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, 52 stats_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp,
53 frame_id, frame_size); 53 frame_id, frame_size);
54 } 54 }
55 if (config_.enable_uma_stats) { 55 if (config_.enable_uma_stats) {
56 if (event == kAudioFrameEncoded) 56 if (event == kAudioFrameEncoded)
57 UMA_HISTOGRAM_COUNTS("Cast.AudioFrameEncoded", frame_size); 57 UMA_HISTOGRAM_COUNTS("Cast.AudioFrameEncoded", frame_size);
hguihot1 2014/01/22 21:41:13 AudioFrameEncodedSize?
mikhal1 2014/01/23 19:53:11 Done.
58 else if (event == kVideoFrameEncoded) { 58 else if (event == kVideoFrameEncoded) {
59 UMA_HISTOGRAM_COUNTS("Cast.VideoFrameEncoded", frame_size); 59 UMA_HISTOGRAM_COUNTS("Cast.VideoFrameEncoded", frame_size);
hguihot1 2014/01/22 21:41:13 VideoFrameEncodedSize?
mikhal1 2014/01/23 19:53:11 Done.
60 } 60 }
61 } 61 }
62 62
63 if (config_.enable_tracing) { 63 if (config_.enable_tracing) {
64 std::string event_string = CastLoggingToString(event); 64 std::string event_string = CastLoggingToString(event);
65 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", 65 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES",
66 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size", 66 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size",
67 frame_size); 67 frame_size);
68 } 68 }
69 } 69 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 TRACE_EVENT_SCOPE_THREAD, "value", value); 161 TRACE_EVENT_SCOPE_THREAD, "value", value);
162 } 162 }
163 } 163 }
164 164
165 void LoggingImpl::InsertGenericUmaEvent(CastLoggingEvent event, int value) { 165 void LoggingImpl::InsertGenericUmaEvent(CastLoggingEvent event, int value) {
166 switch(event) { 166 switch(event) {
167 case kRttMs: 167 case kRttMs:
168 UMA_HISTOGRAM_COUNTS("Cast.RttMs", value); 168 UMA_HISTOGRAM_COUNTS("Cast.RttMs", value);
169 break; 169 break;
170 case kPacketLoss: 170 case kPacketLoss:
171 UMA_HISTOGRAM_COUNTS("Cast.PacketLoss", value); 171 UMA_HISTOGRAM_COUNTS("Cast.PacketLoss", value);
hguihot1 2014/01/22 21:41:13 Maybe a better name than PacketLoss? It does not s
mikhal1 2014/01/23 19:53:11 Done.
172 break; 172 break;
173 case kJitterMs: 173 case kJitterMs:
174 UMA_HISTOGRAM_COUNTS("Cast.JitterMs", value); 174 UMA_HISTOGRAM_COUNTS("Cast.JitterMs", value);
175 break; 175 break;
176 case kRembBitrate: 176 case kRembBitrate:
177 UMA_HISTOGRAM_COUNTS("Cast.RembBitrate", value); 177 UMA_HISTOGRAM_COUNTS("Cast.RembBitrate", value);
178 break; 178 break;
179 default: 179 default:
180 // No-op 180 // No-op
181 break; 181 break;
182 } 182 }
183 } 183 }
184 184
185 // should just get the entire class, would be much easier. 185 // should just get the entire class, would be much easier.
186 FrameRawMap LoggingImpl::GetFrameRawData() { 186 FrameRawMap LoggingImpl::GetFrameRawData() const {
187 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 187 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
188 return raw_.GetFrameData(); 188 return raw_.GetFrameData();
189 } 189 }
190 190
191 PacketRawMap LoggingImpl::GetPacketRawData() { 191 PacketRawMap LoggingImpl::GetPacketRawData() const {
192 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 192 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
193 return raw_.GetPacketData(); 193 return raw_.GetPacketData();
194 } 194 }
195 195
196 GenericRawMap LoggingImpl::GetGenericRawData() { 196 GenericRawMap LoggingImpl::GetGenericRawData() const {
197 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 197 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
198 return raw_.GetGenericData(); 198 return raw_.GetGenericData();
199 } 199 }
200 200
201 AudioRtcpRawMap LoggingImpl::GetAudioRtcpRawData() { 201 AudioRtcpRawMap LoggingImpl::GetAudioRtcpRawData() {
202 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 202 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
203 return raw_.GetAndResetAudioRtcpData(); 203 return raw_.GetAndResetAudioRtcpData();
204 } 204 }
205 205
206 VideoRtcpRawMap LoggingImpl::GetVideoRtcpRawData() { 206 VideoRtcpRawMap LoggingImpl::GetVideoRtcpRawData() {
207 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 207 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
208 return raw_.GetAndResetVideoRtcpData(); 208 return raw_.GetAndResetVideoRtcpData();
209 } 209 }
210 210
211 const FrameStatsMap* LoggingImpl::GetFrameStatsData( 211 const FrameStatsMap* LoggingImpl::GetFrameStatsData() const {
212 const base::TimeTicks& now) {
213 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 212 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
214 // Get stats data. 213 return stats_.GetFrameStatsData();
215 const FrameStatsMap* stats = stats_.GetFrameStatsData(now);
216 if (config_.enable_uma_stats) {
217 FrameStatsMap::const_iterator it;
218 for (it = stats->begin(); it != stats->end(); ++it) {
219 // Check for an active event.
220 // The default frame event implies frame rate.
221 if (it->second->framerate_fps > 0) {
222 switch (it->first) {
223 case kAudioFrameReceived:
224 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioFrameReceived",
225 it->second->framerate_fps);
226 break;
227 case kAudioFrameCaptured:
228 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioFrameCaptured",
229 it->second->framerate_fps);
230 break;
231 case kAudioFrameEncoded:
232 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioFrameEncoded",
233 it->second->framerate_fps);
234 break;
235 case kVideoFrameCaptured:
236 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoFrameCaptured",
237 it->second->framerate_fps);
238 break;
239 case kVideoFrameReceived:
240 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoFrameReceived",
241 it->second->framerate_fps);
242 break;
243 case kVideoFrameSentToEncoder:
244 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoFrameSentToEncoder",
245 it->second->framerate_fps);
246 break;
247 case kVideoFrameEncoded:
248 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoFrameEncoded",
249 it->second->framerate_fps);
250 break;
251 case kVideoFrameDecoded:
252 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoFrameDecoded",
253 it->second->framerate_fps);
254 break;
255 default:
256 // No-op
257 break;
258 }
259 } else {
260 // All active frame events trigger frame rate computation.
261 continue;
262 }
263 // Bit rate should only be provided following encoding for either audio
264 // or video.
265 if (it->first == kVideoFrameEncoded) {
266 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoBitrateKbps",
267 it->second->framerate_fps);
268 } else if (it->first == kAudioFrameEncoded) {
269 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioBitrateKbps",
270 it->second->framerate_fps);
271 }
272 // Delay events.
273 if (it->first == kAudioPlayoutDelay) {
274 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayAvg",
275 it->second->avg_delay_ms);
276 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayMin",
277 it->second->min_delay_ms);
278 UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayMax",
279 it->second->max_delay_ms);
280 } else if (it->first == kVideoRenderDelay) {
281 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayAvg",
282 it->second->avg_delay_ms);
283 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayMin",
284 it->second->min_delay_ms);
285 UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayMax",
286 it->second->max_delay_ms);
287 }
288 }
289 }
290 return stats;
291 } 214 }
292 215
293 const PacketStatsMap* LoggingImpl::GetPacketStatsData( 216 const PacketStatsMap* LoggingImpl::GetPacketStatsData() const {
294 const base::TimeTicks& now) {
295 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 217 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
296 // Get stats data. 218 return stats_.GetPacketStatsData();
297 const PacketStatsMap* stats = stats_.GetPacketStatsData(now);
298 if (config_.enable_uma_stats) {
299 PacketStatsMap::const_iterator it;
300 for (it = stats->begin(); it != stats->end(); ++it) {
301 switch (it->first) {
302 case kPacketSentToPacer:
303 UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketSentToPacer", it->second);
304 break;
305 case kPacketSentToNetwork:
306 UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketSentToNetwork", it->second);
307 break;
308 case kPacketRetransmitted:
309 UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketRetransmited", it->second);
310 break;
311 case kDuplicatePacketReceived:
312 UMA_HISTOGRAM_COUNTS("Cast.Stats.DuplicatePacketReceived",
313 it->second);
314 break;
315 default:
316 // No-op.
317 break;
318 }
319 }
320 }
321 return stats;
322 } 219 }
323 220
324 const GenericStatsMap* LoggingImpl::GetGenericStatsData() { 221 const GenericStatsMap* LoggingImpl::GetGenericStatsData() const {
325 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 222 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
326 // Get stats data. 223 return stats_.GetGenericStatsData();
327 const GenericStatsMap* stats = stats_.GetGenericStatsData();
328 return stats;
329 } 224 }
330 225
331 void LoggingImpl::ResetRaw() { 226 void LoggingImpl::ResetRaw() {
332 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 227 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
333 raw_.Reset(); 228 raw_.Reset();
334 } 229 }
335 230
336 void LoggingImpl::ResetStats() { 231 void LoggingImpl::ResetStats() {
337 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); 232 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
338 stats_.Reset(); 233 stats_.Reset();
339 } 234 }
340 235
341 } // namespace cast 236 } // namespace cast
342 } // namespace media 237 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698