Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Unified Diff: media/cast/logging/encoding_event_subscriber.cc

Issue 138913014: Cast: Added a new RawEventSubscriber implementation for use in cast extension. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed miu's comments and changed targets Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/logging/encoding_event_subscriber.cc
diff --git a/media/cast/logging/encoding_event_subscriber.cc b/media/cast/logging/encoding_event_subscriber.cc
new file mode 100644
index 0000000000000000000000000000000000000000..5a7333a70893b3d3f6c0caaadfadc207fac1de0b
--- /dev/null
+++ b/media/cast/logging/encoding_event_subscriber.cc
@@ -0,0 +1,140 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/cast/logging/encoding_event_subscriber.h"
+
+#include <utility>
+
+#include "base/logging.h"
+#include "media/cast/logging/proto/proto_utils.h"
+
+using google::protobuf::RepeatedPtrField;
+using media::cast::proto::AggregatedFrameEvent;
+using media::cast::proto::AggregatedGenericEvent;
+using media::cast::proto::AggregatedPacketEvent;
+using media::cast::proto::BasePacketEvent;
+
+namespace media {
+namespace cast {
+
+EncodingEventSubscriber::EncodingEventSubscriber() {}
+
+EncodingEventSubscriber::~EncodingEventSubscriber() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+void EncodingEventSubscriber::OnReceiveFrameEvent(
+ const FrameEvent& frame_event) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ FrameEventMap::iterator it = frame_event_map_.find(frame_event.rtp_timestamp);
+ linked_ptr<AggregatedFrameEvent> event_proto;
+
+ // Look up existing entry. If not found, create a new entry and add to map.
+ if (it == frame_event_map_.end()) {
+ event_proto.reset(new AggregatedFrameEvent);
+ event_proto->set_rtp_timestamp(frame_event.rtp_timestamp);
+ frame_event_map_.insert(
+ std::make_pair(frame_event.rtp_timestamp, event_proto));
+ } else {
+ event_proto = it->second;
+ }
+
+ event_proto->add_event_type(ToProtoEventType(frame_event.type));
+ event_proto->add_event_timestamp_micros(
+ frame_event.timestamp.ToInternalValue());
+
+ if (frame_event.type == kAudioFrameEncoded ||
+ frame_event.type == kVideoFrameEncoded) {
+ event_proto->set_encoded_frame_size(frame_event.size);
+ } else if (frame_event.type == kAudioPlayoutDelay ||
+ frame_event.type == kVideoRenderDelay) {
+ event_proto->set_delay_millis(frame_event.delay_delta.InMilliseconds());
+ }
+}
+
+void EncodingEventSubscriber::OnReceivePacketEvent(
+ const PacketEvent& packet_event) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ PacketEventMap::iterator it =
+ packet_event_map_.find(packet_event.rtp_timestamp);
+ linked_ptr<AggregatedPacketEvent> event_proto;
+ BasePacketEvent* base_packet_event_proto = NULL;
+
+ // Look up existing entry. If not found, create a new entry and add to map.
+ if (it == packet_event_map_.end()) {
+ event_proto.reset(new AggregatedPacketEvent);
+ event_proto->set_rtp_timestamp(packet_event.rtp_timestamp);
+ packet_event_map_.insert(
+ std::make_pair(packet_event.rtp_timestamp, event_proto));
+ base_packet_event_proto = event_proto->add_base_packet_event();
+ base_packet_event_proto->set_packet_id(packet_event.packet_id);
+ } else {
+ // Found existing entry, now look up existing BasePacketEvent using packet
+ // ID. If not found, create a new entry and add to proto.
+ event_proto = it->second;
+ RepeatedPtrField<BasePacketEvent>* field =
+ event_proto->mutable_base_packet_event();
+ for (RepeatedPtrField<BasePacketEvent>::pointer_iterator it =
+ field->pointer_begin();
+ it != field->pointer_end(); ++it) {
+ if ((*it)->packet_id() == packet_event.packet_id) {
+ base_packet_event_proto = *it;
+ break;
+ }
+ }
+ if (!base_packet_event_proto) {
+ base_packet_event_proto = event_proto->add_base_packet_event();
+ base_packet_event_proto->set_packet_id(packet_event.packet_id);
+ }
+ }
+
+ base_packet_event_proto->add_event_type(ToProtoEventType(packet_event.type));
+ base_packet_event_proto->add_event_timestamp_micros(
+ packet_event.timestamp.ToInternalValue());
+}
+
+void EncodingEventSubscriber::OnReceiveGenericEvent(
+ const GenericEvent& generic_event) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ GenericEventMap::iterator it = generic_event_map_.find(generic_event.type);
+ linked_ptr<AggregatedGenericEvent> event_proto;
+ if (it == generic_event_map_.end()) {
+ event_proto.reset(new AggregatedGenericEvent);
+ event_proto->set_event_type(ToProtoEventType(generic_event.type));
+ generic_event_map_.insert(std::make_pair(generic_event.type, event_proto));
+ } else {
+ event_proto = it->second;
+ }
+
+ event_proto->add_event_timestamp_micros(
+ generic_event.timestamp.ToInternalValue());
+ event_proto->add_value(generic_event.value);
+}
+
+void EncodingEventSubscriber::GetFrameEventsAndReset(
+ FrameEventMap* frame_event_map) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ frame_event_map->swap(frame_event_map_);
+ frame_event_map_.clear();
+}
+
+void EncodingEventSubscriber::GetPacketEventsAndReset(
+ PacketEventMap* packet_event_map) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ packet_event_map->swap(packet_event_map_);
+ packet_event_map_.clear();
+}
+
+void EncodingEventSubscriber::GetGenericEventsAndReset(
+ GenericEventMap* generic_event_map) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ generic_event_map->swap(generic_event_map_);
+ generic_event_map_.clear();
+}
+
+} // namespace cast
+} // namespace media
« no previous file with comments | « media/cast/logging/encoding_event_subscriber.h ('k') | media/cast/logging/encoding_event_subscriber_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698