| Index: media/cast/logging/encoding_event_subscriber_unittest.cc
|
| diff --git a/media/cast/logging/encoding_event_subscriber_unittest.cc b/media/cast/logging/encoding_event_subscriber_unittest.cc
|
| index 831bea7e4052130ce1a2ba88a1d4269ea5d09334..3fa2b1c38f961322b45a59f981ff04529c032edf 100644
|
| --- a/media/cast/logging/encoding_event_subscriber_unittest.cc
|
| +++ b/media/cast/logging/encoding_event_subscriber_unittest.cc
|
| @@ -20,29 +20,162 @@ using media::cast::proto::BasePacketEvent;
|
| namespace media {
|
| namespace cast {
|
|
|
| +namespace {
|
| +
|
| +EncodingEventSubscriberConfig GetConfig(EventMediaType event_media_type) {
|
| + EncodingEventSubscriberConfig config;
|
| + config.event_media_type = event_media_type;
|
| + config.max_frames = 10;
|
| + config.max_generic_event_values = 10;
|
| + return config;
|
| +}
|
| +}
|
| +
|
| class EncodingEventSubscriberTest : public ::testing::Test {
|
| protected:
|
| EncodingEventSubscriberTest()
|
| : testing_clock_(new base::SimpleTestTickClock()),
|
| task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
|
| cast_environment_(new CastEnvironment(
|
| - scoped_ptr<base::TickClock>(testing_clock_).Pass(), task_runner_,
|
| - task_runner_, task_runner_, task_runner_, task_runner_,
|
| - task_runner_, GetLoggingConfigWithRawEventsAndStatsEnabled())) {
|
| - cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
|
| + scoped_ptr<base::TickClock>(testing_clock_).Pass(),
|
| + task_runner_,
|
| + task_runner_,
|
| + task_runner_,
|
| + task_runner_,
|
| + task_runner_,
|
| + task_runner_,
|
| + GetLoggingConfigWithRawEventsAndStatsEnabled())) {}
|
| +
|
| + void Init(EncodingEventSubscriberConfig config) {
|
| + DCHECK(!event_subscriber_);
|
| + event_subscriber_.reset(new EncodingEventSubscriber(config));
|
| + cast_environment_->Logging()->AddRawEventSubscriber(
|
| + event_subscriber_.get());
|
| }
|
|
|
| virtual ~EncodingEventSubscriberTest() {
|
| - cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_);
|
| + if (event_subscriber_) {
|
| + cast_environment_->Logging()->RemoveRawEventSubscriber(
|
| + event_subscriber_.get());
|
| + }
|
| }
|
|
|
| base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment.
|
| scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
|
| scoped_refptr<CastEnvironment> cast_environment_;
|
| - EncodingEventSubscriber event_subscriber_;
|
| + scoped_ptr<EncodingEventSubscriber> event_subscriber_;
|
| };
|
|
|
| +TEST_F(EncodingEventSubscriberTest, FrameEventTruncating) {
|
| + Init(GetConfig(VIDEO_EVENT));
|
| +
|
| + base::TimeTicks now(testing_clock_->NowTicks());
|
| +
|
| + // Entry with RTP timestamp 0 should get dropped.
|
| + for (int i = 0; i < 11; i++) {
|
| + cast_environment_->Logging()->InsertFrameEvent(now,
|
| + kVideoFrameCaptured,
|
| + i * 100,
|
| + /*frame_id*/ 0);
|
| + cast_environment_->Logging()->InsertFrameEvent(now,
|
| + kVideoFrameDecoded,
|
| + i * 100,
|
| + /*frame_id*/ 0);
|
| + }
|
| +
|
| + FrameEventMap frame_events;
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
| +
|
| + ASSERT_EQ(10u, frame_events.size());
|
| + EXPECT_EQ(100u, frame_events.begin()->first);
|
| + EXPECT_EQ(1000u, frame_events.rbegin()->first);
|
| +}
|
| +
|
| +TEST_F(EncodingEventSubscriberTest, PacketEventTruncating) {
|
| + Init(GetConfig(AUDIO_EVENT));
|
| +
|
| + base::TimeTicks now(testing_clock_->NowTicks());
|
| +
|
| + // Entry with RTP timestamp 0 should get dropped.
|
| + for (int i = 0; i < 11; i++) {
|
| + cast_environment_->Logging()->InsertPacketEvent(now,
|
| + kAudioPacketReceived,
|
| + /*rtp_timestamp*/ i * 100,
|
| + /*frame_id*/ 0,
|
| + /*packet_id*/ i,
|
| + /*max_packet_id*/ 10,
|
| + /*size*/ 123);
|
| + }
|
| +
|
| + PacketEventMap packet_events;
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
| +
|
| + ASSERT_EQ(10u, packet_events.size());
|
| + EXPECT_EQ(100u, packet_events.begin()->first);
|
| + EXPECT_EQ(1000u, packet_events.rbegin()->first);
|
| +}
|
| +
|
| +TEST_F(EncodingEventSubscriberTest, GenericEventMaxLimit) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| +
|
| + base::TimeTicks now(testing_clock_->NowTicks());
|
| + for (int i = 0; i < 11; i++)
|
| + cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, 10 * i);
|
| +
|
| + GenericEventMap generic_events;
|
| + event_subscriber_->GetGenericEventsAndReset(&generic_events);
|
| +
|
| + GenericEventMap::iterator it = generic_events.find(kJitterMs);
|
| + ASSERT_NE(generic_events.end(), it);
|
| + ASSERT_EQ(10, it->second->value_size());
|
| + // The first value that was logged (0) should be gone.
|
| + for (int i = 0; i < 10; i++)
|
| + EXPECT_NE(0, it->second->value(i));
|
| +}
|
| +
|
| +TEST_F(EncodingEventSubscriberTest, EventFiltering) {
|
| + Init(GetConfig(VIDEO_EVENT));
|
| +
|
| + base::TimeTicks now(testing_clock_->NowTicks());
|
| + RtpTimestamp rtp_timestamp = 100;
|
| + cast_environment_->Logging()->InsertFrameEvent(now,
|
| + kVideoFrameDecoded,
|
| + rtp_timestamp,
|
| + /*frame_id*/ 0);
|
| +
|
| + // This is an AUDIO_EVENT and shouldn't be processed by the subscriber.
|
| + cast_environment_->Logging()->InsertFrameEvent(now,
|
| + kAudioFrameDecoded,
|
| + rtp_timestamp,
|
| + /*frame_id*/ 0);
|
| +
|
| + // This is an OTHER_EVENT and shouldn't be processed by the subscriber.
|
| + cast_environment_->Logging()->InsertGenericEvent(now, kRttMs, 100);
|
| +
|
| + FrameEventMap frame_events;
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
| +
|
| + FrameEventMap::iterator frame_it = frame_events.find(rtp_timestamp);
|
| + ASSERT_TRUE(frame_it != frame_events.end());
|
| +
|
| + linked_ptr<AggregatedFrameEvent> frame_event = frame_it->second;
|
| +
|
| + ASSERT_EQ(1, frame_event->event_type_size());
|
| + EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED,
|
| + frame_event->event_type(0));
|
| +
|
| + PacketEventMap packet_events;
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
| + EXPECT_TRUE(packet_events.empty());
|
| +
|
| + GenericEventMap generic_events;
|
| + event_subscriber_->GetGenericEventsAndReset(&generic_events);
|
| +
|
| + EXPECT_TRUE(generic_events.empty());
|
| +}
|
| +
|
| TEST_F(EncodingEventSubscriberTest, FrameEvent) {
|
| + Init(GetConfig(VIDEO_EVENT));
|
| base::TimeTicks now(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| cast_environment_->Logging()->InsertFrameEvent(now, kVideoFrameDecoded,
|
| @@ -50,7 +183,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEvent) {
|
| /*frame_id*/ 0);
|
|
|
| FrameEventMap frame_events;
|
| - event_subscriber_.GetFrameEventsAndReset(&frame_events);
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
|
|
| ASSERT_EQ(1u, frame_events.size());
|
|
|
| @@ -69,11 +202,12 @@ TEST_F(EncodingEventSubscriberTest, FrameEvent) {
|
| EXPECT_EQ(0, event->encoded_frame_size());
|
| EXPECT_EQ(0, event->delay_millis());
|
|
|
| - event_subscriber_.GetFrameEventsAndReset(&frame_events);
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
| EXPECT_TRUE(frame_events.empty());
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, FrameEventDelay) {
|
| + Init(GetConfig(AUDIO_EVENT));
|
| base::TimeTicks now(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| int delay_ms = 100;
|
| @@ -82,7 +216,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEventDelay) {
|
| /*frame_id*/ 0, base::TimeDelta::FromMilliseconds(delay_ms));
|
|
|
| FrameEventMap frame_events;
|
| - event_subscriber_.GetFrameEventsAndReset(&frame_events);
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
|
|
| ASSERT_EQ(1u, frame_events.size());
|
|
|
| @@ -103,6 +237,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEventDelay) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, FrameEventSize) {
|
| + Init(GetConfig(VIDEO_EVENT));
|
| base::TimeTicks now(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| int size = 123;
|
| @@ -111,7 +246,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEventSize) {
|
| /*frame_id*/ 0, size);
|
|
|
| FrameEventMap frame_events;
|
| - event_subscriber_.GetFrameEventsAndReset(&frame_events);
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
|
|
| ASSERT_EQ(1u, frame_events.size());
|
|
|
| @@ -132,6 +267,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEventSize) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) {
|
| + Init(GetConfig(AUDIO_EVENT));
|
| RtpTimestamp rtp_timestamp1 = 100;
|
| RtpTimestamp rtp_timestamp2 = 200;
|
| base::TimeTicks now1(testing_clock_->NowTicks());
|
| @@ -151,7 +287,7 @@ TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) {
|
| now3, kAudioFrameDecoded, rtp_timestamp1, /*frame_id*/ 0);
|
|
|
| FrameEventMap frame_events;
|
| - event_subscriber_.GetFrameEventsAndReset(&frame_events);
|
| + event_subscriber_->GetFrameEventsAndReset(&frame_events);
|
|
|
| ASSERT_EQ(2u, frame_events.size());
|
|
|
| @@ -185,6 +321,7 @@ TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, PacketEvent) {
|
| + Init(GetConfig(AUDIO_EVENT));
|
| base::TimeTicks now(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| int packet_id = 2;
|
| @@ -194,7 +331,7 @@ TEST_F(EncodingEventSubscriberTest, PacketEvent) {
|
| /*max_packet_id*/ 10, size);
|
|
|
| PacketEventMap packet_events;
|
| - event_subscriber_.GetPacketEventsAndReset(&packet_events);
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
|
|
| ASSERT_EQ(1u, packet_events.size());
|
|
|
| @@ -214,11 +351,12 @@ TEST_F(EncodingEventSubscriberTest, PacketEvent) {
|
| ASSERT_EQ(1, base_event.event_timestamp_micros_size());
|
| EXPECT_EQ(now.ToInternalValue(), base_event.event_timestamp_micros(0));
|
|
|
| - event_subscriber_.GetPacketEventsAndReset(&packet_events);
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
| EXPECT_TRUE(packet_events.empty());
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| base::TimeTicks now1(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| int packet_id = 2;
|
| @@ -234,7 +372,7 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) {
|
| /*max_packet_id*/ 10, size);
|
|
|
| PacketEventMap packet_events;
|
| - event_subscriber_.GetPacketEventsAndReset(&packet_events);
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
|
|
| ASSERT_EQ(1u, packet_events.size());
|
|
|
| @@ -258,6 +396,7 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForFrame) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| base::TimeTicks now1(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp = 100;
|
| int packet_id_1 = 2;
|
| @@ -274,7 +413,7 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForFrame) {
|
| /*max_packet_id*/ 10, size);
|
|
|
| PacketEventMap packet_events;
|
| - event_subscriber_.GetPacketEventsAndReset(&packet_events);
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
|
|
| ASSERT_EQ(1u, packet_events.size());
|
|
|
| @@ -303,6 +442,7 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForFrame) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| base::TimeTicks now1(testing_clock_->NowTicks());
|
| RtpTimestamp rtp_timestamp_1 = 100;
|
| RtpTimestamp rtp_timestamp_2 = 200;
|
| @@ -320,7 +460,7 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) {
|
| /*max_packet_id*/ 10, size);
|
|
|
| PacketEventMap packet_events;
|
| - event_subscriber_.GetPacketEventsAndReset(&packet_events);
|
| + event_subscriber_->GetPacketEventsAndReset(&packet_events);
|
|
|
| ASSERT_EQ(2u, packet_events.size());
|
|
|
| @@ -357,12 +497,13 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) {
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, GenericEvent) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| base::TimeTicks now(testing_clock_->NowTicks());
|
| int value = 123;
|
| cast_environment_->Logging()->InsertGenericEvent(now, kJitterMs, value);
|
|
|
| GenericEventMap generic_events;
|
| - event_subscriber_.GetGenericEventsAndReset(&generic_events);
|
| + event_subscriber_->GetGenericEventsAndReset(&generic_events);
|
|
|
| ASSERT_EQ(1u, generic_events.size());
|
|
|
| @@ -377,11 +518,12 @@ TEST_F(EncodingEventSubscriberTest, GenericEvent) {
|
| ASSERT_EQ(1, event->value_size());
|
| EXPECT_EQ(value, event->value(0));
|
|
|
| - event_subscriber_.GetGenericEventsAndReset(&generic_events);
|
| + event_subscriber_->GetGenericEventsAndReset(&generic_events);
|
| EXPECT_TRUE(generic_events.empty());
|
| }
|
|
|
| TEST_F(EncodingEventSubscriberTest, MultipleGenericEventsForType) {
|
| + Init(GetConfig(OTHER_EVENT));
|
| base::TimeTicks now1(testing_clock_->NowTicks());
|
| int value1 = 123;
|
| cast_environment_->Logging()->InsertGenericEvent(now1, kJitterMs, value1);
|
| @@ -392,7 +534,7 @@ TEST_F(EncodingEventSubscriberTest, MultipleGenericEventsForType) {
|
| cast_environment_->Logging()->InsertGenericEvent(now2, kJitterMs, value2);
|
|
|
| GenericEventMap generic_events;
|
| - event_subscriber_.GetGenericEventsAndReset(&generic_events);
|
| + event_subscriber_->GetGenericEventsAndReset(&generic_events);
|
|
|
| ASSERT_EQ(1u, generic_events.size());
|
|
|
|
|