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()); |