Index: media/cast/logging/logging_impl.cc |
diff --git a/media/cast/logging/logging_impl.cc b/media/cast/logging/logging_impl.cc |
index 1c67c50e80fe705851d9a886de655bdf0151dde0..1da4bba50950c53e14bbd908249b32047601886a 100644 |
--- a/media/cast/logging/logging_impl.cc |
+++ b/media/cast/logging/logging_impl.cc |
@@ -24,8 +24,10 @@ void LoggingImpl::InsertFrameEvent(const base::TimeTicks& time_of_event, |
uint32 rtp_timestamp, |
uint32 frame_id) { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
- if (config_.enable_data_collection) { |
+ if (config_.enable_raw_data_collection) { |
raw_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id); |
+ } |
+ if (config_.enable_stats_data_collection) { |
stats_.InsertFrameEvent(time_of_event, event, rtp_timestamp, frame_id); |
} |
if (config_.enable_tracing) { |
@@ -42,15 +44,22 @@ void LoggingImpl::InsertFrameEventWithSize(const base::TimeTicks& time_of_event, |
uint32 frame_id, |
int frame_size) { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
- if (config_.enable_data_collection) { |
+ if (config_.enable_raw_data_collection) { |
raw_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, frame_id, |
frame_size); |
+ } |
+ if (config_.enable_stats_data_collection) { |
stats_.InsertFrameEventWithSize(time_of_event, event, rtp_timestamp, |
frame_id, frame_size); |
} |
if (config_.enable_uma_stats) { |
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), frame_size); |
+ if (event == kAudioFrameEncoded) |
+ UMA_HISTOGRAM_COUNTS("Cast.AudioFrameEncoded", frame_size); |
+ else if (event == kVideoFrameEncoded) { |
+ UMA_HISTOGRAM_COUNTS("Cast.VideoFrameEncoded", frame_size); |
+ } |
} |
+ |
if (config_.enable_tracing) { |
std::string event_string = CastLoggingToString(event); |
TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", |
@@ -66,14 +75,20 @@ void LoggingImpl::InsertFrameEventWithDelay( |
uint32 frame_id, |
base::TimeDelta delay) { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
- if (config_.enable_data_collection) { |
+ if (config_.enable_raw_data_collection) { |
raw_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp, |
frame_id, delay); |
+ } |
+ if (config_.enable_stats_data_collection) { |
stats_.InsertFrameEventWithDelay(time_of_event, event, rtp_timestamp, |
frame_id, delay); |
} |
if (config_.enable_uma_stats) { |
- UMA_HISTOGRAM_TIMES(CastLoggingToString(event), delay); |
+ if (event == kAudioPlayoutDelay) |
+ UMA_HISTOGRAM_TIMES("Cast.AudioPlayoutDelay", delay); |
+ else if (event == kVideoRenderDelay) { |
+ UMA_HISTOGRAM_TIMES("Cast.VideoRendertDelay", delay); |
hguihot
2014/01/13 19:51:10
Typo.
mikhal1
2014/01/14 20:09:58
Done.
|
+ } |
} |
if (config_.enable_tracing) { |
std::string event_string = CastLoggingToString(event); |
@@ -112,9 +127,11 @@ void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event, |
uint16 max_packet_id, |
size_t size) { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
- if (config_.enable_data_collection) { |
+ if (config_.enable_raw_data_collection) { |
raw_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id, |
packet_id, max_packet_id, size); |
+ } |
+ if (config_.enable_stats_data_collection) { |
stats_.InsertPacketEvent(time_of_event, event, rtp_timestamp, frame_id, |
packet_id, max_packet_id, size); |
} |
@@ -129,12 +146,14 @@ void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event, |
void LoggingImpl::InsertGenericEvent(const base::TimeTicks& time_of_event, |
CastLoggingEvent event, int value) { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
- if (config_.enable_data_collection) { |
+ if (config_.enable_raw_data_collection) { |
raw_.InsertGenericEvent(time_of_event, event, value); |
+ } |
+ if (config_.enable_stats_data_collection) { |
stats_.InsertGenericEvent(time_of_event, event, value); |
} |
if (config_.enable_uma_stats) { |
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), value); |
+ InsertGenericUmaEvent(event, value); |
} |
if (config_.enable_tracing) { |
std::string event_string = CastLoggingToString(event); |
@@ -143,6 +162,26 @@ void LoggingImpl::InsertGenericEvent(const base::TimeTicks& time_of_event, |
} |
} |
+void LoggingImpl::InsertGenericUmaEvent(CastLoggingEvent event, int value) { |
+ switch(event) { |
+ case kRttMs: |
+ UMA_HISTOGRAM_COUNTS("Cast.Rtt", value); |
hguihot
2014/01/13 19:51:10
Cast.RttMs?
(Cast.JitterMs is used below)
mikhal1
2014/01/14 20:09:58
Done.
|
+ break; |
+ case kPacketLoss: |
+ UMA_HISTOGRAM_COUNTS("Cast.PacketLoss", value); |
+ break; |
+ case kJitterMs: |
+ UMA_HISTOGRAM_COUNTS("Cast.JitterMs", value); |
+ break; |
+ case kRembBitrate: |
+ UMA_HISTOGRAM_COUNTS("Cast.RembBitrate", value); |
+ break; |
+ default: |
+ // No-op |
+ break; |
+ } |
+} |
+ |
// should just get the entire class, would be much easier. |
FrameRawMap LoggingImpl::GetFrameRawData() { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
@@ -169,26 +208,37 @@ const FrameStatsMap* LoggingImpl::GetFrameStatsData( |
for (it = stats->begin(); it != stats->end(); ++it) { |
// Check for an active event. |
if (it->second->framerate_fps > 0) { |
- std::string event_string = CastLoggingToString(it->first); |
- UMA_HISTOGRAM_COUNTS(event_string.append("_framerate_fps"), |
+ // The default frame event implies frame rate. |
+ UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), |
hguihot
2014/01/13 19:51:10
This is not using a constant.
mikhal1
2014/01/14 20:09:58
Done.
|
it->second->framerate_fps); |
} else { |
- // All active frame events trigger framerate computation. |
+ // All active frame events trigger frame rate computation. |
continue; |
} |
- if (it->second->bitrate_kbps > 0) { |
- std::string evnt_string = CastLoggingToString(it->first); |
- UMA_HISTOGRAM_COUNTS(evnt_string.append("_bitrate_kbps"), |
- it->second->framerate_fps); |
+ // Bit rate should only be provided following encoding for either audio |
+ // or video. |
+ if (it->first == kVideoFrameEncoded) { |
+ UMA_HISTOGRAM_COUNTS("Cast.VideoBitRateKbps", |
hguihot
2014/01/13 19:51:10
Bitrate? (no upper case R)
(RembBitrate does not
mikhal1
2014/01/14 20:09:58
Done.
|
+ it->second->framerate_fps); |
+ } else if (it->first == kAudioFrameEncoded) { |
+ UMA_HISTOGRAM_COUNTS("Cast.AudioBitRateKbps", |
hguihot
2014/01/13 19:51:10
Bitrate?
mikhal1
2014/01/14 20:09:58
Done.
|
+ it->second->framerate_fps); |
} |
- if (it->second->avg_delay_ms > 0) { |
- std::string event_string = CastLoggingToString(it->first); |
- UMA_HISTOGRAM_COUNTS(event_string.append("_avg_delay_ms"), |
- it->second->avg_delay_ms); |
- UMA_HISTOGRAM_COUNTS(event_string.append("_min_delay_ms"), |
- it->second->min_delay_ms); |
- UMA_HISTOGRAM_COUNTS(event_string.append("_max_delay_ms"), |
- it->second->max_delay_ms); |
+ // Delay events. |
+ if (it->first == kAudioPlayoutDelay) { |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayAvg", |
+ it->second->avg_delay_ms); |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayMin", |
+ it->second->min_delay_ms); |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.AudioPlayoutDelayMax", |
+ it->second->max_delay_ms); |
+ } else if (it->first == kVideoRenderDelay) { |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayAvg", |
+ it->second->avg_delay_ms); |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayMin", |
+ it->second->min_delay_ms); |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.VideoPlayoutDelayMax", |
+ it->second->max_delay_ms); |
} |
} |
} |
@@ -203,9 +253,23 @@ const PacketStatsMap* LoggingImpl::GetPacketStatsData( |
if (config_.enable_uma_stats) { |
PacketStatsMap::const_iterator it; |
for (it = stats->begin(); it != stats->end(); ++it) { |
- if (it->second > 0) { |
- std::string event_string = CastLoggingToString(it->first); |
- UMA_HISTOGRAM_COUNTS(event_string.append("_bitrate_kbps"), it->second); |
+ switch (it->first) { |
hguihot
2014/01/13 19:51:10
Will these histograms make sense considering these
mikhal1
2014/01/14 20:09:58
That is up to the user. I'm assuming the user will
hguihot
2014/01/14 20:15:03
I don't think we can assume that for all receivers
mikhal1
2014/01/22 15:59:57
This implementation will be obsolete once my chang
|
+ case kPacketSentToPacer: |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketSentToPacer", it->second); |
+ break; |
+ case kPacketSentToNetwork: |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketSentToNetwork", it->second); |
+ break; |
+ case kPacketRetransmited: |
hguihot
2014/01/13 19:51:10
Typo (transmitted).
mikhal1
2014/01/14 20:09:58
Done.
|
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.PacketRetransmited", it->second); |
hguihot
2014/01/13 19:51:10
Same typo here too.
mikhal1
2014/01/14 20:09:58
Done.
|
+ break; |
+ case kDuplicatePacketReceived: |
+ UMA_HISTOGRAM_COUNTS("Cast.Stats.DuplicatePacketReceived", |
+ it->second); |
+ break; |
+ default: |
+ // No-op. |
+ break; |
} |
} |
} |
@@ -216,20 +280,16 @@ const GenericStatsMap* LoggingImpl::GetGenericStatsData() { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
// Get stats data. |
const GenericStatsMap* stats = stats_.GetGenericStatsData(); |
- if (config_.enable_uma_stats) { |
- GenericStatsMap::const_iterator it; |
- for (it = stats->begin(); it != stats->end(); ++it) { |
- if (it->second > 0) { |
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), it->second); |
- } |
- } |
- } |
return stats; |
} |
-void LoggingImpl::Reset() { |
+void LoggingImpl::ResetRaw() { |
DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
raw_.Reset(); |
+} |
+ |
+void LoggingImpl::ResetStats() { |
+ DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
stats_.Reset(); |
} |