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
3 // found in the LICENSE file.
5 #include "base/debug/trace_event.h"
6 #include "base/metrics/histogram.h"
7 #include "media/cast/logging/logging_impl.h"
12 LoggingImpl::LoggingImpl(base::TickClock* clock,
13 bool enable_data_collection,
14 bool enable_uma_stats,
16 : enable_data_collection_(enable_data_collection),
17 enable_uma_stats_(enable_uma_stats),
18 enable_tracing_(enable_tracing),
22 LoggingImpl::~LoggingImpl() {}
24 void LoggingImpl::InsertFrameEvent(CastLoggingEvent event,
27 if (enable_data_collection_) {
28 raw_.InsertFrameEvent(event, rtp_timestamp, frame_id);
29 stats_.InsertFrameEvent(event, rtp_timestamp, frame_id);
31 if (enable_tracing_) {
32 std::string event_string = CastLoggingToString(event);
33 TRACE_EVENT_INSTANT2(event_string.c_str(), "FE",
34 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_id",
39 void LoggingImpl::InsertFrameEventWithSize(CastLoggingEvent event,
43 if (enable_data_collection_) {
44 raw_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size);
45 stats_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size);
47 if (enable_uma_stats_) {
48 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), frame_size);
50 if (enable_tracing_) {
51 std::string event_string = CastLoggingToString(event);
52 TRACE_EVENT_INSTANT2(event_string.c_str(), "FES",
53 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size",
59 void LoggingImpl::InsertFrameEventWithDelay(CastLoggingEvent event,
62 base::TimeDelta delay) {
63 if (enable_data_collection_) {
64 raw_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay);
65 stats_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay);
67 if (enable_uma_stats_) {
68 UMA_HISTOGRAM_TIMES(CastLoggingToString(event), delay);
70 if (enable_tracing_) {
71 std::string event_string = CastLoggingToString(event);
72 TRACE_EVENT_INSTANT2(event_string.c_str(), "FED",
73 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "delay",
74 delay.InMilliseconds());
78 void LoggingImpl::InsertPacketEvent(CastLoggingEvent event,
84 if (enable_data_collection_) {
85 raw_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id,
87 stats_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id,
90 if (enable_tracing_) {
91 std::string event_string = CastLoggingToString(event);
92 TRACE_EVENT_INSTANT2(event_string.c_str(), "PE",
93 TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp,
94 "packet_id", packet_id);
98 void LoggingImpl::InsertGenericEvent(CastLoggingEvent event, int value) {
99 if (enable_data_collection_) {
100 raw_.InsertGenericEvent(event, value);
101 stats_.InsertGenericEvent(event, value);
103 if (enable_uma_stats_) {
104 UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), value);
106 if (enable_tracing_) {
107 std::string event_string = CastLoggingToString(event);
108 TRACE_EVENT_INSTANT1(event_string.c_str(), "GE",
109 TRACE_EVENT_SCOPE_THREAD, "value", value);
114 // should just get the entire class, would be much easier.
115 FrameRawMap LoggingImpl::GetFrameRawData() {
116 return raw_.GetFrameData();
119 PacketRawMap LoggingImpl::GetPacketRawData() {
120 return raw_.GetPacketData();
123 GenericRawMap LoggingImpl::GetGenericRawData() {
124 return raw_.GetGenericData();
127 const FrameStatsMap* LoggingImpl::GetFrameStatsData() {
129 const FrameStatsMap* stats = stats_.GetFrameStatsData();
130 if (enable_uma_stats_) {
131 FrameStatsMap::const_iterator it;
132 for (it = stats->begin(); it != stats->end(); ++it) {
133 // Check for an active event.
134 if (it->second->framerate_fps > 0) {
135 std::string event_string = CastLoggingToString(it->first);
136 UMA_HISTOGRAM_COUNTS(event_string.append("_framerate_fps"),
137 it->second->framerate_fps);
139 // All active frame events trigger framerate computation.
142 if (it->second->bitrate_kbps > 0) {
143 std::string evnt_string = CastLoggingToString(it->first);
144 UMA_HISTOGRAM_COUNTS(evnt_string.append("_bitrate_kbps"),
145 it->second->framerate_fps);
147 if (it->second->avg_delay_ms > 0) {
148 std::string event_string = CastLoggingToString(it->first);
149 UMA_HISTOGRAM_COUNTS(event_string.append("_avg_delay_ms"),
150 it->second->avg_delay_ms);
151 UMA_HISTOGRAM_COUNTS(event_string.append("_min_delay_ms"),
152 it->second->min_delay_ms);
153 UMA_HISTOGRAM_COUNTS(event_string.append("_max_delay_ms"),
154 it->second->max_delay_ms);
161 const PacketStatsMap* LoggingImpl::GetPacketStatsData() {
163 const PacketStatsMap* stats = stats_.GetPacketStatsData();
164 if (enable_uma_stats_) {
165 PacketStatsMap::const_iterator it;
166 for (it = stats->begin(); it != stats->end(); ++it) {
167 if (it->second > 0) {
168 std::string event_string = CastLoggingToString(it->first);
169 UMA_HISTOGRAM_COUNTS(event_string.append("_bitrate_kbps"), it->second);
176 const GenericStatsMap* LoggingImpl::GetGenericStatsData() {
178 const GenericStatsMap* stats = stats_.GetGenericStatsData();
179 if (enable_uma_stats_) {
180 GenericStatsMap::const_iterator it;
181 for (it = stats->begin(); it != stats->end(); ++it) {
182 if (it->second > 0) {
183 UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), it->second);
190 void LoggingImpl::Reset() {