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 1194ed9c749b1158dee62afbb44c4cd53c101ef0..3b4583758ace9a3fe3cc86146c2a02df9be2a704 100644 |
--- a/media/cast/logging/encoding_event_subscriber_unittest.cc |
+++ b/media/cast/logging/encoding_event_subscriber_unittest.cc |
@@ -32,7 +32,8 @@ class EncodingEventSubscriberTest : public ::testing::Test { |
task_runner_, |
task_runner_, |
task_runner_, |
- GetLoggingConfigWithRawEventsAndStatsEnabled())) {} |
+ GetLoggingConfigWithRawEventsAndStatsEnabled())), |
+ first_rtp_timestamp(0) {} |
void Init(EventMediaType event_media_type) { |
DCHECK(!event_subscriber_); |
@@ -48,10 +49,18 @@ class EncodingEventSubscriberTest : public ::testing::Test { |
} |
} |
+ void GetEventsAndReset() { |
+ event_subscriber_->GetEventsAndReset( |
+ &frame_events, &packet_events, &first_rtp_timestamp); |
+ } |
+ |
base::SimpleTestTickClock* testing_clock_; // Owned by CastEnvironment. |
scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
scoped_refptr<CastEnvironment> cast_environment_; |
scoped_ptr<EncodingEventSubscriber> event_subscriber_; |
+ FrameEventMap frame_events; |
+ PacketEventMap packet_events; |
+ RtpTimestamp first_rtp_timestamp; |
}; |
TEST_F(EncodingEventSubscriberTest, FrameEventTruncating) { |
@@ -71,8 +80,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEventTruncating) { |
/*frame_id*/ 0); |
} |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(10u, frame_events.size()); |
EXPECT_EQ(100u, frame_events.begin()->first); |
@@ -95,8 +103,7 @@ TEST_F(EncodingEventSubscriberTest, PacketEventTruncating) { |
/*size*/ 123); |
} |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(10u, packet_events.size()); |
EXPECT_EQ(100u, packet_events.begin()->first); |
@@ -119,10 +126,9 @@ TEST_F(EncodingEventSubscriberTest, EventFiltering) { |
rtp_timestamp, |
/*frame_id*/ 0); |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
- FrameEventMap::iterator frame_it = frame_events.find(rtp_timestamp); |
+ FrameEventMap::iterator frame_it = frame_events.find(0); |
ASSERT_TRUE(frame_it != frame_events.end()); |
linked_ptr<AggregatedFrameEvent> frame_event = frame_it->second; |
@@ -131,8 +137,8 @@ TEST_F(EncodingEventSubscriberTest, EventFiltering) { |
EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, |
frame_event->event_type(0)); |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
+ |
EXPECT_TRUE(packet_events.empty()); |
} |
@@ -144,17 +150,17 @@ TEST_F(EncodingEventSubscriberTest, FrameEvent) { |
rtp_timestamp, |
/*frame_id*/ 0); |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, frame_events.size()); |
- FrameEventMap::iterator it = frame_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != frame_events.end()); |
linked_ptr<AggregatedFrameEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->event_type_size()); |
EXPECT_EQ(media::cast::proto::VIDEO_FRAME_DECODED, event->event_type(0)); |
@@ -164,7 +170,7 @@ TEST_F(EncodingEventSubscriberTest, FrameEvent) { |
EXPECT_EQ(0, event->encoded_frame_size()); |
EXPECT_EQ(0, event->delay_millis()); |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
EXPECT_TRUE(frame_events.empty()); |
} |
@@ -177,17 +183,17 @@ TEST_F(EncodingEventSubscriberTest, FrameEventDelay) { |
now, kAudioPlayoutDelay, rtp_timestamp, |
/*frame_id*/ 0, base::TimeDelta::FromMilliseconds(delay_ms)); |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, frame_events.size()); |
- FrameEventMap::iterator it = frame_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != frame_events.end()); |
linked_ptr<AggregatedFrameEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->event_type_size()); |
EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); |
@@ -207,17 +213,17 @@ TEST_F(EncodingEventSubscriberTest, FrameEventSize) { |
now, kVideoFrameEncoded, rtp_timestamp, |
/*frame_id*/ 0, size); |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, frame_events.size()); |
- FrameEventMap::iterator it = frame_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != frame_events.end()); |
linked_ptr<AggregatedFrameEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->event_type_size()); |
EXPECT_EQ(media::cast::proto::VIDEO_FRAME_ENCODED, event->event_type(0)); |
@@ -248,17 +254,17 @@ TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) { |
cast_environment_->Logging()->InsertFrameEvent( |
now3, kAudioFrameDecoded, rtp_timestamp1, /*frame_id*/ 0); |
- FrameEventMap frame_events; |
- event_subscriber_->GetFrameEventsAndReset(&frame_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(2u, frame_events.size()); |
- FrameEventMap::iterator it = frame_events.find(100); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp1 - first_rtp_timestamp; |
+ FrameEventMap::iterator it = frame_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != frame_events.end()); |
linked_ptr<AggregatedFrameEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp1, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(2, event->event_type_size()); |
EXPECT_EQ(media::cast::proto::AUDIO_PLAYOUT_DELAY, event->event_type(0)); |
@@ -268,12 +274,13 @@ TEST_F(EncodingEventSubscriberTest, MultipleFrameEvents) { |
EXPECT_EQ(now1.ToInternalValue(), event->event_timestamp_micros(0)); |
EXPECT_EQ(now3.ToInternalValue(), event->event_timestamp_micros(1)); |
- it = frame_events.find(200); |
+ relative_rtp_timestamp = rtp_timestamp2 - first_rtp_timestamp; |
+ it = frame_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != frame_events.end()); |
event = it->second; |
- EXPECT_EQ(rtp_timestamp2, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->event_type_size()); |
EXPECT_EQ(media::cast::proto::AUDIO_FRAME_ENCODED, event->event_type(0)); |
@@ -292,17 +299,17 @@ TEST_F(EncodingEventSubscriberTest, PacketEvent) { |
now, kAudioPacketReceived, rtp_timestamp, /*frame_id*/ 0, packet_id, |
/*max_packet_id*/ 10, size); |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, packet_events.size()); |
- PacketEventMap::iterator it = packet_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != packet_events.end()); |
linked_ptr<AggregatedPacketEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->base_packet_event_size()); |
const BasePacketEvent& base_event = event->base_packet_event(0); |
@@ -313,7 +320,7 @@ 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); |
+ GetEventsAndReset(); |
EXPECT_TRUE(packet_events.empty()); |
} |
@@ -333,17 +340,17 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForPacket) { |
now2, kPacketSentToNetwork, rtp_timestamp, /*frame_id*/ 0, packet_id, |
/*max_packet_id*/ 10, size); |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, packet_events.size()); |
- PacketEventMap::iterator it = packet_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != packet_events.end()); |
linked_ptr<AggregatedPacketEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->base_packet_event_size()); |
const BasePacketEvent& base_event = event->base_packet_event(0); |
@@ -374,17 +381,17 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEventsForFrame) { |
now2, kPacketRetransmitted, rtp_timestamp, /*frame_id*/ 0, packet_id_2, |
/*max_packet_id*/ 10, size); |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(1u, packet_events.size()); |
- PacketEventMap::iterator it = packet_events.find(rtp_timestamp); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp - first_rtp_timestamp; |
+ PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != packet_events.end()); |
linked_ptr<AggregatedPacketEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(2, event->base_packet_event_size()); |
const BasePacketEvent& base_event = event->base_packet_event(0); |
@@ -421,17 +428,17 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) { |
now2, kPacketRetransmitted, rtp_timestamp_2, /*frame_id*/ 0, packet_id_2, |
/*max_packet_id*/ 10, size); |
- PacketEventMap packet_events; |
- event_subscriber_->GetPacketEventsAndReset(&packet_events); |
+ GetEventsAndReset(); |
ASSERT_EQ(2u, packet_events.size()); |
- PacketEventMap::iterator it = packet_events.find(rtp_timestamp_1); |
+ RtpTimestamp relative_rtp_timestamp = rtp_timestamp_1 - first_rtp_timestamp; |
+ PacketEventMap::iterator it = packet_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != packet_events.end()); |
linked_ptr<AggregatedPacketEvent> event = it->second; |
- EXPECT_EQ(rtp_timestamp_1, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->base_packet_event_size()); |
const BasePacketEvent& base_event = event->base_packet_event(0); |
@@ -441,12 +448,13 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) { |
ASSERT_EQ(1, base_event.event_timestamp_micros_size()); |
EXPECT_EQ(now1.ToInternalValue(), base_event.event_timestamp_micros(0)); |
- it = packet_events.find(rtp_timestamp_2); |
+ relative_rtp_timestamp = rtp_timestamp_2 - first_rtp_timestamp; |
+ it = packet_events.find(relative_rtp_timestamp); |
ASSERT_TRUE(it != packet_events.end()); |
event = it->second; |
- EXPECT_EQ(rtp_timestamp_2, event->rtp_timestamp()); |
+ EXPECT_EQ(relative_rtp_timestamp, event->rtp_timestamp()); |
ASSERT_EQ(1, event->base_packet_event_size()); |
const BasePacketEvent& base_event_2 = event->base_packet_event(0); |
@@ -458,5 +466,65 @@ TEST_F(EncodingEventSubscriberTest, MultiplePacketEvents) { |
EXPECT_EQ(now2.ToInternalValue(), base_event_2.event_timestamp_micros(0)); |
} |
+TEST_F(EncodingEventSubscriberTest, FirstRtpTimestamp) { |
+ Init(VIDEO_EVENT); |
+ RtpTimestamp rtp_timestamp = 12345; |
+ base::TimeTicks now(testing_clock_->NowTicks()); |
+ |
+ cast_environment_->Logging()->InsertFrameEvent(now, |
+ kVideoFrameCaptured, |
+ rtp_timestamp, |
+ /*frame_id*/ 0); |
+ |
+ cast_environment_->Logging()->InsertFrameEvent(now, |
+ kVideoFrameReceived, |
+ rtp_timestamp + 30, |
+ /*frame_id*/ 1); |
+ |
+ GetEventsAndReset(); |
+ |
+ EXPECT_EQ(rtp_timestamp, first_rtp_timestamp); |
+ FrameEventMap::iterator it = frame_events.find(0); |
+ ASSERT_NE(frame_events.end(), it); |
+ |
+ it = frame_events.find(30); |
+ ASSERT_NE(frame_events.end(), it); |
+ |
+ rtp_timestamp = 67890; |
+ |
+ cast_environment_->Logging()->InsertFrameEvent(now, |
+ kVideoFrameCaptured, |
+ rtp_timestamp, |
+ /*frame_id*/ 0); |
+ GetEventsAndReset(); |
+ |
+ EXPECT_EQ(rtp_timestamp, first_rtp_timestamp); |
+} |
+ |
+TEST_F(EncodingEventSubscriberTest, RelativeRtpTimestampWrapAround) { |
+ Init(VIDEO_EVENT); |
+ RtpTimestamp rtp_timestamp = 0xffffffff - 20; |
+ base::TimeTicks now(testing_clock_->NowTicks()); |
+ |
+ cast_environment_->Logging()->InsertFrameEvent(now, |
+ kVideoFrameCaptured, |
+ rtp_timestamp, |
+ /*frame_id*/ 0); |
+ |
+ // RtpTimestamp has now wrapped around. |
+ cast_environment_->Logging()->InsertFrameEvent(now, |
+ kVideoFrameReceived, |
+ rtp_timestamp + 30, |
+ /*frame_id*/ 1); |
+ |
+ GetEventsAndReset(); |
+ |
+ FrameEventMap::iterator it = frame_events.find(0); |
+ ASSERT_NE(frame_events.end(), it); |
+ |
+ it = frame_events.find(30); |
+ ASSERT_NE(frame_events.end(), it); |
+} |
+ |
} // namespace cast |
} // namespace media |