summaryrefslogtreecommitdiffstats
path: root/chromium/media/cast/logging/logging_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/cast/logging/logging_impl.cc')
-rw-r--r--chromium/media/cast/logging/logging_impl.cc272
1 files changed, 81 insertions, 191 deletions
diff --git a/chromium/media/cast/logging/logging_impl.cc b/chromium/media/cast/logging/logging_impl.cc
index ea96b94b610..1143d1be217 100644
--- a/chromium/media/cast/logging/logging_impl.cc
+++ b/chromium/media/cast/logging/logging_impl.cc
@@ -2,223 +2,113 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/big_endian.h"
#include "base/debug/trace_event.h"
-#include "base/metrics/histogram.h"
#include "media/cast/logging/logging_impl.h"
-#include "net/base/big_endian.h"
namespace media {
namespace cast {
-LoggingImpl::LoggingImpl(base::TickClock* clock,
- scoped_refptr<base::TaskRunner> main_thread_proxy,
- const CastLoggingConfig& config)
- : main_thread_proxy_(main_thread_proxy),
- config_(config),
- raw_(clock),
- stats_(clock) {}
+// TODO(imcheng): Collapse LoggingRaw onto LoggingImpl.
+LoggingImpl::LoggingImpl() {
+ // LoggingImpl can be constructed on any thread, but its methods should all be
+ // called on the same thread.
+ thread_checker_.DetachFromThread();
+}
LoggingImpl::~LoggingImpl() {}
-void LoggingImpl::InsertFrameEvent(CastLoggingEvent event,
+void LoggingImpl::InsertFrameEvent(const base::TimeTicks& time_of_event,
+ CastLoggingEvent event,
+ EventMediaType event_media_type,
uint32 rtp_timestamp,
uint32 frame_id) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- if (config_.enable_data_collection) {
- raw_.InsertFrameEvent(event, rtp_timestamp, frame_id);
- stats_.InsertFrameEvent(event, rtp_timestamp, frame_id);
- }
- if (config_.enable_tracing) {
- std::string event_string = CastLoggingToString(event);
- TRACE_EVENT_INSTANT2(event_string.c_str(), "FE",
- TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_id",
- frame_id);
- }
-}
-
-void LoggingImpl::InsertFrameEventWithSize(CastLoggingEvent event,
- uint32 rtp_timestamp,
- uint32 frame_id,
- int frame_size) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- if (config_.enable_data_collection) {
- raw_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size);
- stats_.InsertFrameEventWithSize(event, rtp_timestamp, frame_id, frame_size);
- }
- if (config_.enable_uma_stats) {
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), frame_size);
- }
- if (config_.enable_tracing) {
- std::string event_string = CastLoggingToString(event);
- TRACE_EVENT_INSTANT2(event_string.c_str(), "FES",
- TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "frame_size",
- frame_size);
- }
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.InsertFrameEvent(time_of_event, event, event_media_type,
+ rtp_timestamp, frame_id);
}
-void LoggingImpl::InsertFrameEventWithDelay(CastLoggingEvent event,
- uint32 rtp_timestamp,
- uint32 frame_id,
- base::TimeDelta delay) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- if (config_.enable_data_collection) {
- raw_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay);
- stats_.InsertFrameEventWithDelay(event, rtp_timestamp, frame_id, delay);
- }
- if (config_.enable_uma_stats) {
- UMA_HISTOGRAM_TIMES(CastLoggingToString(event), delay);
- }
- if (config_.enable_tracing) {
- std::string event_string = CastLoggingToString(event);
- TRACE_EVENT_INSTANT2(event_string.c_str(), "FED",
- TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp, "delay",
- delay.InMilliseconds());
- }
+void LoggingImpl::InsertEncodedFrameEvent(const base::TimeTicks& time_of_event,
+ CastLoggingEvent event,
+ EventMediaType event_media_type,
+ uint32 rtp_timestamp,
+ uint32 frame_id, int frame_size,
+ bool key_frame,
+ int target_bitrate) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.InsertEncodedFrameEvent(time_of_event, event, event_media_type,
+ rtp_timestamp, frame_id, frame_size, key_frame, target_bitrate);
}
-void LoggingImpl::InsertPacketListEvent(CastLoggingEvent event,
- const PacketList& packets) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- for (unsigned int i = 0; i < packets.size(); ++i) {
- const Packet& packet = packets[i];
- // Parse basic properties.
- uint32 rtp_timestamp;
- uint16 packet_id, max_packet_id;
- const uint8* packet_data = &packet[0];
- net::BigEndianReader big_endian_reader(packet_data + 4, 4);
- big_endian_reader.ReadU32(&rtp_timestamp);
- net::BigEndianReader cast_big_endian_reader(packet_data + 12 + 2, 4);
- cast_big_endian_reader.ReadU16(&packet_id);
- cast_big_endian_reader.ReadU16(&max_packet_id);
- // rtp_timestamp is enough - no need for frame_id as well.
- InsertPacketEvent(event, rtp_timestamp, kFrameIdUnknown, packet_id,
- max_packet_id, packet.size());
- }
+void LoggingImpl::InsertFrameEventWithDelay(
+ const base::TimeTicks& time_of_event, CastLoggingEvent event,
+ EventMediaType event_media_type, uint32 rtp_timestamp, uint32 frame_id,
+ base::TimeDelta delay) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.InsertFrameEventWithDelay(time_of_event, event, event_media_type,
+ rtp_timestamp, frame_id, delay);
}
-void LoggingImpl::InsertPacketEvent(CastLoggingEvent event,
- uint32 rtp_timestamp,
- uint32 frame_id,
- uint16 packet_id,
- uint16 max_packet_id,
- size_t size) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- if (config_.enable_data_collection) {
- raw_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id,
- max_packet_id, size);
- stats_.InsertPacketEvent(event, rtp_timestamp, frame_id, packet_id,
- max_packet_id, size);
- }
- if (config_.enable_tracing) {
- std::string event_string = CastLoggingToString(event);
- TRACE_EVENT_INSTANT2(event_string.c_str(), "PE",
- TRACE_EVENT_SCOPE_THREAD, "rtp_timestamp", rtp_timestamp,
- "packet_id", packet_id);
- }
+void LoggingImpl::InsertSinglePacketEvent(const base::TimeTicks& time_of_event,
+ CastLoggingEvent event,
+ EventMediaType event_media_type,
+ const Packet& packet) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ // Parse basic properties.
+ uint32 rtp_timestamp;
+ uint16 packet_id, max_packet_id;
+ const uint8* packet_data = &packet[0];
+ base::BigEndianReader big_endian_reader(
+ reinterpret_cast<const char*>(packet_data + 4), 4);
+ big_endian_reader.ReadU32(&rtp_timestamp);
+ base::BigEndianReader cast_big_endian_reader(
+ reinterpret_cast<const char*>(packet_data + 12 + 2), 4);
+ cast_big_endian_reader.ReadU16(&packet_id);
+ cast_big_endian_reader.ReadU16(&max_packet_id);
+
+ // rtp_timestamp is enough - no need for frame_id as well.
+ InsertPacketEvent(time_of_event,
+ event,
+ event_media_type,
+ rtp_timestamp,
+ kFrameIdUnknown,
+ packet_id,
+ max_packet_id,
+ packet.size());
}
-void LoggingImpl::InsertGenericEvent(CastLoggingEvent event, int value) {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- if (config_.enable_data_collection) {
- raw_.InsertGenericEvent(event, value);
- stats_.InsertGenericEvent(event, value);
- }
- if (config_.enable_uma_stats) {
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(event), value);
- }
- if (config_.enable_tracing) {
- std::string event_string = CastLoggingToString(event);
- TRACE_EVENT_INSTANT1(event_string.c_str(), "GE",
- TRACE_EVENT_SCOPE_THREAD, "value", value);
- }
-}
-
-// should just get the entire class, would be much easier.
-FrameRawMap LoggingImpl::GetFrameRawData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- return raw_.GetFrameData();
-}
-
-PacketRawMap LoggingImpl::GetPacketRawData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- return raw_.GetPacketData();
-}
-
-GenericRawMap LoggingImpl::GetGenericRawData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- return raw_.GetGenericData();
-}
-
-const FrameStatsMap* LoggingImpl::GetFrameStatsData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- // Get stats data.
- const FrameStatsMap* stats = stats_.GetFrameStatsData();
- if (config_.enable_uma_stats) {
- FrameStatsMap::const_iterator it;
- for (it = stats->begin(); it != stats->end(); ++it) {
- // Check for an active event.
- if (it->second->framerate_fps > 0) {
- std::string event_string = CastLoggingToString(it->first);
- UMA_HISTOGRAM_COUNTS(event_string.append("_framerate_fps"),
- it->second->framerate_fps);
- } else {
- // All active frame events trigger framerate computation.
- continue;
- }
- if (it->second->bitrate_kbps > 0) {
- std::string evnt_string = CastLoggingToString(it->first);
- UMA_HISTOGRAM_COUNTS(evnt_string.append("_bitrate_kbps"),
- it->second->framerate_fps);
- }
- if (it->second->avg_delay_ms > 0) {
- std::string event_string = CastLoggingToString(it->first);
- UMA_HISTOGRAM_COUNTS(event_string.append("_avg_delay_ms"),
- it->second->avg_delay_ms);
- UMA_HISTOGRAM_COUNTS(event_string.append("_min_delay_ms"),
- it->second->min_delay_ms);
- UMA_HISTOGRAM_COUNTS(event_string.append("_max_delay_ms"),
- it->second->max_delay_ms);
- }
- }
+void LoggingImpl::InsertPacketListEvent(const base::TimeTicks& time_of_event,
+ CastLoggingEvent event,
+ EventMediaType event_media_type,
+ const PacketList& packets) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ for (PacketList::const_iterator it = packets.begin(); it != packets.end();
+ ++it) {
+ InsertSinglePacketEvent(time_of_event, event, event_media_type,
+ (*it)->data);
}
- return stats;
}
-const PacketStatsMap* LoggingImpl::GetPacketStatsData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- // Get stats data.
- const PacketStatsMap* stats = stats_.GetPacketStatsData();
- if (config_.enable_uma_stats) {
- PacketStatsMap::const_iterator it;
- for (it = stats->begin(); it != stats->end(); ++it) {
- if (it->second > 0) {
- std::string event_string = CastLoggingToString(it->first);
- UMA_HISTOGRAM_COUNTS(event_string.append("_bitrate_kbps"), it->second);
- }
- }
- }
- return stats;
+void LoggingImpl::InsertPacketEvent(const base::TimeTicks& time_of_event,
+ CastLoggingEvent event,
+ EventMediaType event_media_type,
+ uint32 rtp_timestamp, uint32 frame_id,
+ uint16 packet_id, uint16 max_packet_id,
+ size_t size) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.InsertPacketEvent(time_of_event, event, event_media_type,
+ rtp_timestamp, frame_id, packet_id, max_packet_id, size);
}
-const GenericStatsMap* LoggingImpl::GetGenericStatsData() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- // Get stats data.
- const GenericStatsMap* stats = stats_.GetGenericStatsData();
- if (config_.enable_uma_stats) {
- GenericStatsMap::const_iterator it;
- for (it = stats->begin(); it != stats->end(); ++it) {
- if (it->second > 0) {
- UMA_HISTOGRAM_COUNTS(CastLoggingToString(it->first), it->second);
- }
- }
- }
- return stats;
+void LoggingImpl::AddRawEventSubscriber(RawEventSubscriber* subscriber) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.AddSubscriber(subscriber);
}
-void LoggingImpl::Reset() {
- DCHECK(main_thread_proxy_->RunsTasksOnCurrentThread());
- raw_.Reset();
- stats_.Reset();
+void LoggingImpl::RemoveRawEventSubscriber(RawEventSubscriber* subscriber) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ raw_.RemoveSubscriber(subscriber);
}
} // namespace cast