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