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

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

Issue 241833002: Cast: Limit number of events/packets in EncodingEventSubscriber protos. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 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/log_deserializer.cc
diff --git a/media/cast/logging/log_deserializer.cc b/media/cast/logging/log_deserializer.cc
index 997daa9081dbe6ff3c1d63d2455b0596b170a4e4..5621be032122d5145773260489417acc04f949e4 100644
--- a/media/cast/logging/log_deserializer.cc
+++ b/media/cast/logging/log_deserializer.cc
@@ -8,6 +8,7 @@
#include <utility>
#include "base/big_endian.h"
+#include "base/memory/scoped_ptr.h"
#include "third_party/zlib/zlib.h"
using media::cast::FrameEventMap;
@@ -15,6 +16,7 @@ using media::cast::PacketEventMap;
using media::cast::RtpTimestamp;
using media::cast::proto::AggregatedFrameEvent;
using media::cast::proto::AggregatedPacketEvent;
+using media::cast::proto::BasePacketEvent;
using media::cast::proto::LogMetadata;
namespace {
@@ -25,6 +27,38 @@ namespace {
// Keep in sync with media/cast/logging/log_serializer.cc.
const int kMaxUncompressedBytes = 60 * 1000 * 1000;
+void MergePacketEvent(const AggregatedPacketEvent& from,
+ linked_ptr<AggregatedPacketEvent> to) {
+ for (int i = 0; i < from.base_packet_event_size(); i++) {
+ const BasePacketEvent& from_base_event = from.base_packet_event(i);
+ bool merged = false;
+ for (int j = 0; j < to->base_packet_event_size(); j++) {
+ BasePacketEvent* to_base_event = to->mutable_base_packet_event(i);
+ if (from_base_event.packet_id() == to_base_event->packet_id()) {
+ to_base_event->MergeFrom(from_base_event);
+ merged = true;
+ break;
+ }
+ }
+ if (!merged) {
+ BasePacketEvent* to_base_event = to->add_base_packet_event();
+ to_base_event->CopyFrom(from_base_event);
+ }
+ }
+}
+
+void MergeFrameEvent(const AggregatedFrameEvent& from,
+ linked_ptr<AggregatedFrameEvent> to) {
+ to->mutable_event_type()->MergeFrom(from.event_type());
+ to->mutable_event_timestamp_ms()->MergeFrom(from.event_timestamp_ms());
+ if (!to->has_encoded_frame_size())
+ to->set_encoded_frame_size(from.encoded_frame_size());
+ if (!to->has_delay_millis())
+ to->set_delay_millis(from.delay_millis());
+ if (!to->has_key_frame())
+ to->set_key_frame(from.key_frame());
+}
+
bool PopulateDeserializedLog(base::BigEndianReader* reader,
media::cast::DeserializedLog* log) {
FrameEventMap frame_event_map;
@@ -50,12 +84,15 @@ bool PopulateDeserializedLog(base::BigEndianReader* reader,
frame_event->relative_rtp_timestamp() + relative_rtp_timestamp);
relative_rtp_timestamp = frame_event->relative_rtp_timestamp();
- std::pair<FrameEventMap::iterator, bool> result = frame_event_map.insert(
- std::make_pair(frame_event->relative_rtp_timestamp(), frame_event));
- if (!result.second) {
- VLOG(1) << "Duplicate frame event entry detected: "
- << frame_event->relative_rtp_timestamp();
- return false;
+ FrameEventMap::iterator it = frame_event_map.find(
+ frame_event->relative_rtp_timestamp());
+ if (it == frame_event_map.end()) {
+ frame_event_map.insert(
+ std::make_pair(frame_event->relative_rtp_timestamp(), frame_event));
+ } else {
+ // Events for the same frame might have been split into more than one
+ // proto. Merge them.
+ MergeFrameEvent(*frame_event, it->second);
}
}
@@ -77,12 +114,15 @@ bool PopulateDeserializedLog(base::BigEndianReader* reader,
packet_event->relative_rtp_timestamp() + relative_rtp_timestamp);
relative_rtp_timestamp = packet_event->relative_rtp_timestamp();
- std::pair<PacketEventMap::iterator, bool> result = packet_event_map.insert(
- std::make_pair(packet_event->relative_rtp_timestamp(), packet_event));
- if (!result.second) {
- VLOG(1) << "Duplicate packet event entry detected: "
- << packet_event->relative_rtp_timestamp();
- return false;
+ PacketEventMap::iterator it = packet_event_map.find(
+ packet_event->relative_rtp_timestamp());
+ if (it == packet_event_map.end()) {
+ packet_event_map.insert(
+ std::make_pair(packet_event->relative_rtp_timestamp(), packet_event));
+ } else {
+ // Events for the same frame might have been split into more than one
+ // proto. Merge them.
+ MergePacketEvent(*packet_event, it->second);
}
}

Powered by Google App Engine
This is Rietveld 408576698