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

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

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/encoding_event_subscriber.h
diff --git a/media/cast/logging/encoding_event_subscriber.h b/media/cast/logging/encoding_event_subscriber.h
index ba9969bd2c986e245a20a2e55829465db6e250f5..802780634d6a9b11d5a48998b3289a958c8531ae 100644
--- a/media/cast/logging/encoding_event_subscriber.h
+++ b/media/cast/logging/encoding_event_subscriber.h
@@ -16,21 +16,32 @@
namespace media {
namespace cast {
-typedef std::map<RtpTimestamp,
- linked_ptr<media::cast::proto::AggregatedFrameEvent> >
- FrameEventMap;
-typedef std::map<RtpTimestamp,
- linked_ptr<media::cast::proto::AggregatedPacketEvent> >
- PacketEventMap;
+// Number of packets per frame recorded by the subscriber.
+// Once the max number of packets has been reached, a new aggregated proto
+// will be created.
+static const int kMaxPacketsPerFrame = 64;
+// Number of events per proto recorded by the subscriber.
+// Once the max number of events has been reached, a new aggregated proto
+// will be created.
+static const int kMaxEventsPerProto = 16;
+
+typedef std::vector<linked_ptr<media::cast::proto::AggregatedFrameEvent> >
+ FrameEventList;
+typedef std::vector<linked_ptr<media::cast::proto::AggregatedPacketEvent> >
+ PacketEventList;
// A RawEventSubscriber implementation that subscribes to events,
// encodes them in protocol buffer format, and aggregates them into a more
-// compact structure.
+// compact structure. Aggregation is per-frame, and uses a map with RTP
+// timestamp as key. Periodically, old entries in the map will be transferred
+// to a storage vector. This helps keep the size of the map small and
+// lookup times fast. The storage itself is a circular buffer that will
+// overwrite old entries once it has reached the size configured by user.
class EncodingEventSubscriber : public RawEventSubscriber {
public:
// |event_media_type|: The subscriber will only process events that
// corresponds to this type.
- // |max_frames|: How many events to keep in the frame / packet map.
+ // |max_frames|: How many events to keep in the frame / packet storage.
// This helps keep memory usage bounded.
// Every time one of |OnReceive[Frame,Packet]Event()| is
// called, it will check if the respective map size has exceeded |max_frames|.
@@ -49,18 +60,35 @@ class EncodingEventSubscriber : public RawEventSubscriber {
// Assigns frame events and packet events received so far to |frame_events|
// and |packet_events| and resets the internal state.
// In addition, assign metadata associated with these events to |metadata|.
+ // The protos in |frame_events| and |packets_events| are sorted in
+ // ascending RTP timestamp order.
void GetEventsAndReset(media::cast::proto::LogMetadata* metadata,
- FrameEventMap* frame_events,
- PacketEventMap* packet_events);
+ FrameEventList* frame_events,
+ PacketEventList* packet_events);
private:
+ typedef std::map<RtpTimestamp,
+ linked_ptr<media::cast::proto::AggregatedFrameEvent> >
+ FrameEventMap;
+ typedef std::map<RtpTimestamp,
+ linked_ptr<media::cast::proto::AggregatedPacketEvent> >
+ PacketEventMap;
+
bool ShouldProcessEvent(CastLoggingEvent event);
- // Removes oldest entry from |frame_event_map_| (ordered by RTP timestamp).
- void TruncateFrameEventMapIfNeeded();
+ // Transfer |num_entries| smallest entries from |frame_event_map_| to
+ // |frame_event_storage_|. This helps keep size of |frame_event_map_| small
+ // and lookup speed fast.
+ void TransferFrameEvents(size_t num_entries);
+ // See above.
+ void TransferPacketEvents(size_t num_entries);
- // Removes oldest entry from |packet_event_map_| (ordered by RTP timestamp).
- void TruncatePacketEventMapIfNeeded();
+ void AddFrameEventToStorage(
+ const linked_ptr<media::cast::proto::AggregatedFrameEvent>&
+ frame_event_proto);
+ void AddPacketEventToStorage(
+ const linked_ptr<media::cast::proto::AggregatedPacketEvent>&
+ packet_event_proto);
// Returns the difference between |rtp_timestamp| and |first_rtp_timestamp_|.
// Sets |first_rtp_timestamp_| if it is not already set.
@@ -73,7 +101,12 @@ class EncodingEventSubscriber : public RawEventSubscriber {
const size_t max_frames_;
FrameEventMap frame_event_map_;
+ FrameEventList frame_event_storage_;
+ int frame_event_storage_index_;
+
PacketEventMap packet_event_map_;
+ PacketEventList packet_event_storage_;
+ int packet_event_storage_index_;
// All functions must be called on the main thread.
base::ThreadChecker thread_checker_;

Powered by Google App Engine
This is Rietveld 408576698