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 |