| OLD | NEW |
| 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 | 8 |
| 9 namespace media { | 9 namespace media { |
| 10 namespace cast { | 10 namespace cast { |
| 11 | 11 |
| 12 LoggingImpl::LoggingImpl(base::TickClock* clock, | 12 LoggingImpl::LoggingImpl(base::TickClock* clock, |
| 13 bool enable_data_collection, | 13 scoped_refptr<base::TaskRunner> main_thread_proxy, |
| 14 bool enable_uma_stats, | 14 const CastLoggingConfig& config) |
| 15 bool enable_tracing) | 15 : main_thread_proxy_(main_thread_proxy), |
| 16 : enable_data_collection_(enable_data_collection), | 16 config_(config), |
| 17 enable_uma_stats_(enable_uma_stats), | |
| 18 enable_tracing_(enable_tracing), | |
| 19 raw_(clock), | 17 raw_(clock), |
| 20 stats_(clock) {} | 18 stats_(clock) {} |
| 21 | 19 |
| 22 LoggingImpl::~LoggingImpl() {} | 20 LoggingImpl::~LoggingImpl() {} |
| 23 | 21 |
| 24 void LoggingImpl::InsertFrameEvent(CastLoggingEvent event, | 22 void LoggingImpl::InsertFrameEvent(CastLoggingEvent event, |
| 25 uint32 rtp_timestamp, | 23 uint32 rtp_timestamp, |
| 26 uint32 frame_id) { | 24 uint32 frame_id) { |
| 27 if (enable_data_collection_) { | 25 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 26 if (config_.enable_data_collection) { |
| 28 raw_.InsertFrameEvent(event, rtp_timestamp, frame_id); | 27 raw_.InsertFrameEvent(event, rtp_timestamp, frame_id); |
| 29 stats_.InsertFrameEvent(event, rtp_timestamp, frame_id); | 28 stats_.InsertFrameEvent(event, rtp_timestamp, frame_id); |
| 30 } | 29 } |
| 31 if (enable_tracing_) { | 30 if (config_.enable_tracing) { |
| 32 std::string event_string = CastLoggingToString(event); | 31 std::string event_string = CastLoggingToString(event); |
| 33 TRACE_EVENT_INSTANT2(event_string.c_str(), "FE", | 32 TRACE_EVENT_INSTANT2(event_string.c_str(), "FE", |
| 34 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_id", | 33 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_id", |
| 35 frame_id); | 34 frame_id); |
| 36 } | 35 } |
| 37 } | 36 } |
| 38 | 37 |
| 39 void LoggingImpl::InsertFrameEventWithSize(CastLoggingEvent event, | 38 void LoggingImpl::InsertFrameEventWithSize(CastLoggingEvent event, |
| 40 uint32 rtp_timestamp, | 39 uint32 rtp_timestamp, |
| 41 uint32 frame_id, | 40 uint32 frame_id, |
| 42 int frame_size) { | 41 int frame_size) { |
| 43 if (enable_data_collection_) { | 42 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 43 if (config_.enable_data_collection) { |
| 44 raw_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size); | 44 raw_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size); |
| 45 stats_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size); | 45 stats_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size); |
| 46 } | 46 } |
| 47 if (enable_uma_stats_) { | 47 if (config_.enable_uma_stats) { |
| 48 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), frame_size); | 48 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), frame_size); |
| 49 } | 49 } |
| 50 if (enable_tracing_) { | 50 if (config_.enable_tracing) { |
| 51 std::string event_string = CastLoggingToString(event); | 51 std::string event_string = CastLoggingToString(event); |
| 52 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", | 52 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES", |
| 53 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size", | 53 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size", |
| 54 frame_size); | 54 frame_size); |
| 55 } | 55 } |
| 56 | 56 |
| 57 } | 57 } |
| 58 | 58 |
| 59 void LoggingImpl::InsertFrameEventWithDelay(CastLoggingEvent event, | 59 void LoggingImpl::InsertFrameEventWithDelay(CastLoggingEvent event, |
| 60 uint32 rtp_timestamp, | 60 uint32 rtp_timestamp, |
| 61 uint32 frame_id, | 61 uint32 frame_id, |
| 62 base::TimeDelta delay) { | 62 base::TimeDelta delay) { |
| 63 if (enable_data_collection_) { | 63 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 64 if (config_.enable_data_collection) { |
| 64 raw_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay); | 65 raw_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay); |
| 65 stats_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay); | 66 stats_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay); |
| 66 } | 67 } |
| 67 if (enable_uma_stats_) { | 68 if (config_.enable_uma_stats) { |
| 68 UMA_HISTOGRAM_TIMES(CastLoggingToString(event), delay); | 69 UMA_HISTOGRAM_TIMES(CastLoggingToString(event), delay); |
| 69 } | 70 } |
| 70 if (enable_tracing_) { | 71 if (config_.enable_tracing) { |
| 71 std::string event_string = CastLoggingToString(event); | 72 std::string event_string = CastLoggingToString(event); |
| 72 TRACE_EVENT_INSTANT2(event_string.c_str(), "FED", | 73 TRACE_EVENT_INSTANT2(event_string.c_str(), "FED", |
| 73 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "delay", | 74 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "delay", |
| 74 delay.InMilliseconds()); | 75 delay.InMilliseconds()); |
| 75 } | 76 } |
| 76 } | 77 } |
| 77 | 78 |
| 78 void LoggingImpl::InsertPacketEvent(CastLoggingEvent event, | 79 void LoggingImpl::InsertPacketEvent(CastLoggingEvent event, |
| 79 uint32 rtp_timestamp, | 80 uint32 rtp_timestamp, |
| 80 uint32 frame_id, | 81 uint32 frame_id, |
| 81 uint16 packet_id, | 82 uint16 packet_id, |
| 82 uint16 max_packet_id, | 83 uint16 max_packet_id, |
| 83 int size) { | 84 size_t size) { |
| 84 if (enable_data_collection_) { | 85 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 86 if (config_.enable_data_collection) { |
| 85 raw_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id, | 87 raw_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id, |
| 86 max_packet_id, size); | 88 max_packet_id, size); |
| 87 stats_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id, | 89 stats_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id, |
| 88 max_packet_id, size); | 90 max_packet_id, size); |
| 89 } | 91 } |
| 90 if (enable_tracing_) { | 92 if (config_.enable_tracing) { |
| 91 std::string event_string = CastLoggingToString(event); | 93 std::string event_string = CastLoggingToString(event); |
| 92 TRACE_EVENT_INSTANT2(event_string.c_str(), "PE", | 94 TRACE_EVENT_INSTANT2(event_string.c_str(), "PE", |
| 93 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, | 95 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, |
| 94 "packet_id", packet_id); | 96 "packet_id", packet_id); |
| 95 } | 97 } |
| 96 } | 98 } |
| 97 | 99 |
| 98 void LoggingImpl::InsertGenericEvent(CastLoggingEvent event, int value) { | 100 void LoggingImpl::InsertGenericEvent(CastLoggingEvent event, int value) { |
| 99 if (enable_data_collection_) { | 101 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 102 if (config_.enable_data_collection) { |
| 100 raw_.InsertGenericEvent(event, value); | 103 raw_.InsertGenericEvent(event, value); |
| 101 stats_.InsertGenericEvent(event, value); | 104 stats_.InsertGenericEvent(event, value); |
| 102 } | 105 } |
| 103 if (enable_uma_stats_) { | 106 if (config_.enable_uma_stats) { |
| 104 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), value); | 107 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), value); |
| 105 } | 108 } |
| 106 if (enable_tracing_) { | 109 if (config_.enable_tracing) { |
| 107 std::string event_string = CastLoggingToString(event); | 110 std::string event_string = CastLoggingToString(event); |
| 108 TRACE_EVENT_INSTANT1(event_string.c_str(), "GE", | 111 TRACE_EVENT_INSTANT1(event_string.c_str(), "GE", |
| 109 TRACE_EVENT_SCOPE_THREAD, "value", value); | 112 TRACE_EVENT_SCOPE_THREAD, "value", value); |
| 110 } | 113 } |
| 111 } | 114 } |
| 112 | 115 |
| 113 | 116 |
| 114 // should just get the entire class, would be much easier. | 117 // should just get the entire class, would be much easier. |
| 115 FrameRawMap LoggingImpl::GetFrameRawData() { | 118 FrameRawMap LoggingImpl::GetFrameRawData() { |
| 119 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 116 return raw_.GetFrameData(); | 120 return raw_.GetFrameData(); |
| 117 } | 121 } |
| 118 | 122 |
| 119 PacketRawMap LoggingImpl::GetPacketRawData() { | 123 PacketRawMap LoggingImpl::GetPacketRawData() { |
| 120 return raw_.GetPacketData(); | 124 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 125 return raw_.GetPacketData(); |
| 121 } | 126 } |
| 122 | 127 |
| 123 GenericRawMap LoggingImpl::GetGenericRawData() { | 128 GenericRawMap LoggingImpl::GetGenericRawData() { |
| 124 return raw_.GetGenericData(); | 129 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 130 return raw_.GetGenericData(); |
| 125 } | 131 } |
| 126 | 132 |
| 127 const FrameStatsMap* LoggingImpl::GetFrameStatsData() { | 133 const FrameStatsMap* LoggingImpl::GetFrameStatsData() { |
| 134 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 128 // Get stats data. | 135 // Get stats data. |
| 129 const FrameStatsMap* stats = stats_.GetFrameStatsData(); | 136 const FrameStatsMap* stats = stats_.GetFrameStatsData(); |
| 130 if (enable_uma_stats_) { | 137 if (config_.enable_uma_stats) { |
| 131 FrameStatsMap::const_iterator it; | 138 FrameStatsMap::const_iterator it; |
| 132 for (it = stats->begin(); it != stats->end(); ++it) { | 139 for (it = stats->begin(); it != stats->end(); ++it) { |
| 133 // Check for an active event. | 140 // Check for an active event. |
| 134 if (it->second->framerate_fps > 0) { | 141 if (it->second->framerate_fps > 0) { |
| 135 std::string event_string = CastLoggingToString(it->first); | 142 std::string event_string = CastLoggingToString(it->first); |
| 136 UMA_HISTOGRAM_COUNTS(event_string.append("_framerate_fps"), | 143 UMA_HISTOGRAM_COUNTS(event_string.append("_framerate_fps"), |
| 137 it->second->framerate_fps); | 144 it->second->framerate_fps); |
| 138 } else { | 145 } else { |
| 139 // All active frame events trigger framerate computation. | 146 // All active frame events trigger framerate computation. |
| 140 continue; | 147 continue; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 152 it->second->min_delay_ms); | 159 it->second->min_delay_ms); |
| 153 UMA_HISTOGRAM_COUNTS(event_string.append("_max_delay_ms"), | 160 UMA_HISTOGRAM_COUNTS(event_string.append("_max_delay_ms"), |
| 154 it->second->max_delay_ms); | 161 it->second->max_delay_ms); |
| 155 } | 162 } |
| 156 } | 163 } |
| 157 } | 164 } |
| 158 return stats; | 165 return stats; |
| 159 } | 166 } |
| 160 | 167 |
| 161 const PacketStatsMap* LoggingImpl::GetPacketStatsData() { | 168 const PacketStatsMap* LoggingImpl::GetPacketStatsData() { |
| 169 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 162 // Get stats data. | 170 // Get stats data. |
| 163 const PacketStatsMap* stats = stats_.GetPacketStatsData(); | 171 const PacketStatsMap* stats = stats_.GetPacketStatsData(); |
| 164 if (enable_uma_stats_) { | 172 if (config_.enable_uma_stats) { |
| 165 PacketStatsMap::const_iterator it; | 173 PacketStatsMap::const_iterator it; |
| 166 for (it = stats->begin(); it != stats->end(); ++it) { | 174 for (it = stats->begin(); it != stats->end(); ++it) { |
| 167 if (it->second > 0) { | 175 if (it->second > 0) { |
| 168 std::string event_string = CastLoggingToString(it->first); | 176 std::string event_string = CastLoggingToString(it->first); |
| 169 UMA_HISTOGRAM_COUNTS(event_string.append("_bitrate_kbps"), it->second); | 177 UMA_HISTOGRAM_COUNTS(event_string.append("_bitrate_kbps"), it->second); |
| 170 } | 178 } |
| 171 } | 179 } |
| 172 } | 180 } |
| 173 return stats; | 181 return stats; |
| 174 } | 182 } |
| 175 | 183 |
| 176 const GenericStatsMap* LoggingImpl::GetGenericStatsData() { | 184 const GenericStatsMap* LoggingImpl::GetGenericStatsData() { |
| 185 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 177 // Get stats data. | 186 // Get stats data. |
| 178 const GenericStatsMap* stats = stats_.GetGenericStatsData(); | 187 const GenericStatsMap* stats = stats_.GetGenericStatsData(); |
| 179 if (enable_uma_stats_) { | 188 if (config_.enable_uma_stats) { |
| 180 GenericStatsMap::const_iterator it; | 189 GenericStatsMap::const_iterator it; |
| 181 for (it = stats->begin(); it != stats->end(); ++it) { | 190 for (it = stats->begin(); it != stats->end(); ++it) { |
| 182 if (it->second > 0) { | 191 if (it->second > 0) { |
| 183 UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), it->second); | 192 UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), it->second); |
| 184 } | 193 } |
| 185 } | 194 } |
| 186 } | 195 } |
| 187 return stats; | 196 return stats; |
| 188 } | 197 } |
| 189 | 198 |
| 190 void LoggingImpl::Reset() { | 199 void LoggingImpl::Reset() { |
| 200 DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread()); |
| 191 raw_.Reset(); | 201 raw_.Reset(); |
| 192 stats_.Reset(); | 202 stats_.Reset(); |
| 193 } | 203 } |
| 194 | 204 |
| 195 } // namespace cast | 205 } // namespace cast |
| 196 } // namespace media | 206 } // namespace media |
| OLD | NEW |