| Index: media/cast/logging/stats_event_subscriber_unittest.cc
|
| diff --git a/media/cast/logging/stats_event_subscriber_unittest.cc b/media/cast/logging/stats_event_subscriber_unittest.cc
|
| index 09c418b4258dccc20b2c949b9f65483c51cf7ec1..fe03bc62473549f938b25fe30db32355db246dc1 100644
|
| --- a/media/cast/logging/stats_event_subscriber_unittest.cc
|
| +++ b/media/cast/logging/stats_event_subscriber_unittest.cc
|
| @@ -65,20 +65,44 @@ class StatsEventSubscriberTest : public ::testing::Test {
|
| scoped_ptr<StatsEventSubscriber> subscriber_;
|
| };
|
|
|
| -TEST_F(StatsEventSubscriberTest, Capture) {
|
| +TEST_F(StatsEventSubscriberTest, CaptureEncode) {
|
| Init(VIDEO_EVENT);
|
|
|
| uint32 rtp_timestamp = 0;
|
| uint32 frame_id = 0;
|
| - int num_frames = 10;
|
| + int extra_frames = 50;
|
| + // Only the first |extra_frames| frames logged will be taken into account
|
| + // when computing dropped frames.
|
| + int num_frames = StatsEventSubscriber::kMaxFrameInfoMapSize + 50;
|
| + int dropped_frames = 0;
|
| base::TimeTicks start_time = sender_clock_->NowTicks();
|
| + // Drop half the frames during the encode step.
|
| for (int i = 0; i < num_frames; i++) {
|
| cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(),
|
| FRAME_CAPTURE_BEGIN,
|
| VIDEO_EVENT,
|
| rtp_timestamp,
|
| frame_id);
|
| -
|
| + AdvanceClocks(base::TimeDelta::FromMicroseconds(10));
|
| + cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(),
|
| + FRAME_CAPTURE_END,
|
| + VIDEO_EVENT,
|
| + rtp_timestamp,
|
| + frame_id);
|
| + if (i % 2 == 0) {
|
| + AdvanceClocks(base::TimeDelta::FromMicroseconds(10));
|
| + cast_environment_->Logging()->InsertEncodedFrameEvent(
|
| + sender_clock_->NowTicks(),
|
| + FRAME_ENCODED,
|
| + VIDEO_EVENT,
|
| + rtp_timestamp,
|
| + frame_id,
|
| + 1024,
|
| + true,
|
| + 5678);
|
| + } else if (i < extra_frames) {
|
| + dropped_frames++;
|
| + }
|
| AdvanceClocks(base::TimeDelta::FromMicroseconds(34567));
|
| rtp_timestamp += 90;
|
| frame_id++;
|
| @@ -97,6 +121,16 @@ TEST_F(StatsEventSubscriberTest, Capture) {
|
| EXPECT_DOUBLE_EQ(
|
| it->second,
|
| static_cast<double>(num_frames) / duration.InMillisecondsF() * 1000);
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_FRAMES_CAPTURED);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_frames));
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_FRAMES_DROPPED_BY_ENCODER);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, static_cast<double>(dropped_frames));
|
| }
|
|
|
| TEST_F(StatsEventSubscriberTest, Encode) {
|
| @@ -185,10 +219,12 @@ TEST_F(StatsEventSubscriberTest, PlayoutDelay) {
|
| uint32 frame_id = 0;
|
| int num_frames = 10;
|
| int total_delay_ms = 0;
|
| - for (int i = 0; i < num_frames; i++) {
|
| - int delay_ms = base::RandInt(-50, 50);
|
| + int late_frames = 0;
|
| + for (int i = 0, delay_ms = -50; i < num_frames; i++, delay_ms += 10) {
|
| base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms);
|
| total_delay_ms += delay_ms;
|
| + if (delay_ms <= 0)
|
| + late_frames++;
|
| cast_environment_->Logging()->InsertFrameEventWithDelay(
|
| receiver_clock_.NowTicks(),
|
| FRAME_PLAYOUT,
|
| @@ -211,6 +247,11 @@ TEST_F(StatsEventSubscriberTest, PlayoutDelay) {
|
|
|
| EXPECT_DOUBLE_EQ(
|
| it->second, static_cast<double>(total_delay_ms) / num_frames);
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_FRAMES_LATE);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, late_frames);
|
| }
|
|
|
| TEST_F(StatsEventSubscriberTest, E2ELatency) {
|
| @@ -268,11 +309,12 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
| int total_size = 0;
|
| int retransmit_total_size = 0;
|
| base::TimeDelta total_latency;
|
| - int num_packets_sent = 0;
|
| + int num_packets_transmitted = 0;
|
| int num_packets_retransmitted = 0;
|
| + int num_packets_rtx_rejected = 0;
|
| // Every 2nd packet will be retransmitted once.
|
| // Every 4th packet will be retransmitted twice.
|
| - // Every 8th packet will be retransmitted 3 times.
|
| + // Every 8th packet will be retransmitted 3 times + 1 rejected retransmission.
|
| for (int i = 0; i < num_packets; i++) {
|
| int size = 1000 + base::RandInt(-100, 100);
|
| total_size += size;
|
| @@ -285,7 +327,7 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
| i,
|
| num_packets - 1,
|
| size);
|
| - num_packets_sent++;
|
| + num_packets_transmitted++;
|
|
|
| int latency_micros = 20000 + base::RandInt(-10000, 10000);
|
| base::TimeDelta latency = base::TimeDelta::FromMicroseconds(latency_micros);
|
| @@ -312,7 +354,7 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
| num_packets - 1,
|
| size);
|
| retransmit_total_size += size;
|
| - num_packets_sent++;
|
| + num_packets_transmitted++;
|
| num_packets_retransmitted++;
|
| }
|
|
|
| @@ -329,7 +371,7 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
| num_packets - 1,
|
| size);
|
| retransmit_total_size += size;
|
| - num_packets_sent++;
|
| + num_packets_transmitted++;
|
| num_packets_retransmitted++;
|
| }
|
|
|
| @@ -345,9 +387,19 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
| i,
|
| num_packets - 1,
|
| size);
|
| + cast_environment_->Logging()->InsertPacketEvent(
|
| + receiver_clock_.NowTicks(),
|
| + PACKET_RTX_REJECTED,
|
| + VIDEO_EVENT,
|
| + rtp_timestamp,
|
| + 0,
|
| + i,
|
| + num_packets - 1,
|
| + size);
|
| retransmit_total_size += size;
|
| - num_packets_sent++;
|
| + num_packets_transmitted++;
|
| num_packets_retransmitted++;
|
| + num_packets_rtx_rejected++;
|
| }
|
|
|
| cast_environment_->Logging()->InsertPacketEvent(received_time,
|
| @@ -394,7 +446,22 @@ TEST_F(StatsEventSubscriberTest, Packets) {
|
|
|
| EXPECT_DOUBLE_EQ(
|
| it->second,
|
| - static_cast<double>(num_packets_retransmitted) / num_packets_sent);
|
| + static_cast<double>(num_packets_retransmitted) / num_packets_transmitted);
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_SENT);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets));
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_RETRANSMITTED);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets_retransmitted));
|
| +
|
| + it = stats_map.find(StatsEventSubscriber::NUM_PACKETS_RTX_REJECTED);
|
| + ASSERT_TRUE(it != stats_map.end());
|
| +
|
| + EXPECT_DOUBLE_EQ(it->second, static_cast<double>(num_packets_rtx_rejected));
|
| }
|
|
|
| } // namespace cast
|
|
|