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 |