Chromium Code Reviews| 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 e80061d32422fc8f45834f08ed410c88ebb35965..fbc66d9e5556cc47ff66e949828610ad9eb506fe 100644 |
| --- a/media/cast/logging/encoding_event_subscriber.h |
| +++ b/media/cast/logging/encoding_event_subscriber.h |
| @@ -9,6 +9,7 @@ |
| #include "base/memory/linked_ptr.h" |
| #include "base/threading/thread_checker.h" |
| +#include "media/cast/logging/logging_defines.h" |
| #include "media/cast/logging/proto/raw_events.pb.h" |
| #include "media/cast/logging/raw_event_subscriber.h" |
| @@ -25,13 +26,36 @@ typedef std::map<CastLoggingEvent, |
| linked_ptr<media::cast::proto::AggregatedGenericEvent> > |
| GenericEventMap; |
| +// This struct is passed into EncodingEventSubscriber's constructor. |
| +struct EncodingEventSubscriberConfig { |
|
Alpha Left Google
2014/02/14 18:42:39
Why not give the arguments directly to the constru
imcheng
2014/02/14 20:24:17
I was thinking that with 3 parameters it's better
|
| + // The subscriber will only process events that belong in |event_media_type|. |
|
Alpha Left Google
2014/02/14 18:42:39
nit: that corresponds to |event_media_type|.
imcheng
2014/02/14 20:24:17
Done.
|
| + EventMediaType event_media_type; |
| + |
| + // How many events to keep in the frame / packet map. |
| + // 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|. |
| + // If so, it will remove the oldest aggregated entry (ordered by RTP |
| + // timestamp). |
| + // Note that there is no active process to remove old events periodically. |
|
Alpha Left Google
2014/02/14 18:42:39
What does this mean?
imcheng
2014/02/14 20:24:17
Removing this. I was implementing windowing based
|
| + size_t max_frames; |
| + |
| + // How many time-value pairs to keep per generic event. |
|
Alpha Left Google
2014/02/14 18:42:39
I'm not sure we care about the generic events.
imcheng
2014/02/14 20:24:17
These are the generic events currently:
kRttMs, k
|
| + // This helps keep memory usage bounded. |
| + // Every time OnReceiveEvent() is called, it will check if the number of |
| + // time-value pairs have exceeded the |max_generic_event_values|. If so, |
| + // the oldest pair will be removed. Note that the time here refers to the |
| + // event time as opposed to RTP timestamp. |
| + // Note that there is no active process to remove old events periodically. |
| + int max_generic_event_values; |
| +}; |
| + |
| // A RawEventSubscriber implementation that subscribes to events, |
| // encodes them in protocol buffer format, and aggregates them into a more |
| // compact structure. |
| -// TODO(imcheng): Implement event filtering and windowing based on size. |
| class EncodingEventSubscriber : public RawEventSubscriber { |
| public: |
| - EncodingEventSubscriber(); |
| + EncodingEventSubscriber(EncodingEventSubscriberConfig config); |
| virtual ~EncodingEventSubscriber(); |
| @@ -54,10 +78,23 @@ class EncodingEventSubscriber : public RawEventSubscriber { |
| void GetGenericEventsAndReset(GenericEventMap* generic_events); |
| private: |
| + bool ShouldProcessEvent(CastLoggingEvent event); |
| + |
| + // Removes oldest entry from |frame_event_map_| (ordered by RTP timestamp). |
| + void TruncateFrameEventMapIfNeeded(); |
| + |
| + // Removes oldest entry from |packet_event_map_| (ordered by RTP timestamp). |
| + void TruncatePacketEventMapIfNeeded(); |
| + |
| + const EncodingEventSubscriberConfig config_; |
| FrameEventMap frame_event_map_; |
| PacketEventMap packet_event_map_; |
| GenericEventMap generic_event_map_; |
| + // Used internally to keep track of next index to write the next time-value |
| + // pair to for a particular generic event type. |
| + int next_write_index_[kNumOfLoggingEvents]; |
| + |
| // All functions must be called on the main thread. |
| base::ThreadChecker thread_checker_; |