Index: webrtc/modules/pacing/paced_sender_unittest.cc |
diff --git a/webrtc/modules/pacing/paced_sender_unittest.cc b/webrtc/modules/pacing/paced_sender_unittest.cc |
index 1a2936df530914e6d9607b62005f6b36ed4aa4ec..bf00a052379bce02945bd2996431d05c8cf97307 100644 |
--- a/webrtc/modules/pacing/paced_sender_unittest.cc |
+++ b/webrtc/modules/pacing/paced_sender_unittest.cc |
@@ -825,5 +825,50 @@ TEST_F(PacedSenderTest, PaddingOveruse) { |
send_bucket_->Process(); |
} |
+TEST_F(PacedSenderTest, AverageQueueTime) { |
+ uint32_t ssrc = 12346; |
+ uint16_t sequence_number = 1234; |
+ const size_t kPacketSize = 1200; |
+ const int kBitrateBps = 10 * kPacketSize * 8; // 10 packets per second. |
+ const int kBitrateKbps = (kBitrateBps + 500) / 1000; |
+ |
+ send_bucket_->UpdateBitrate(kBitrateKbps, kBitrateKbps, kBitrateKbps); |
+ |
+ EXPECT_EQ(0, send_bucket_->AverageQueueTimeMs()); |
+ |
+ int64_t first_capture_time = clock_.TimeInMilliseconds(); |
+ send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc, sequence_number, |
+ first_capture_time, kPacketSize, false); |
+ clock_.AdvanceTimeMilliseconds(10); |
+ send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc, |
+ sequence_number + 1, clock_.TimeInMilliseconds(), |
+ kPacketSize, false); |
+ clock_.AdvanceTimeMilliseconds(10); |
+ |
+ EXPECT_EQ((20 + 10) / 2, send_bucket_->AverageQueueTimeMs()); |
+ |
+ // Only first packet (queued for 20ms) should be removed, leave the second |
+ // packet (queued for 10ms) alone in the queue. |
+ EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number, |
+ first_capture_time, false)) |
+ .Times(1) |
+ .WillRepeatedly(Return(true)); |
+ send_bucket_->Process(); |
+ |
+ EXPECT_EQ(10, send_bucket_->AverageQueueTimeMs()); |
+ |
+ clock_.AdvanceTimeMilliseconds(10); |
+ EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number + 1, |
+ first_capture_time + 10, false)) |
+ .Times(1) |
+ .WillRepeatedly(Return(true)); |
+ for (int i = 0; i < 3; ++i) { |
+ clock_.AdvanceTimeMilliseconds(30); // Max delta. |
+ send_bucket_->Process(); |
+ } |
+ |
+ EXPECT_EQ(0, send_bucket_->AverageQueueTimeMs()); |
+} |
+ |
} // namespace test |
} // namespace webrtc |