Home | History | Annotate | Download | only in pacing
      1 /*
      2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #include "testing/gmock/include/gmock/gmock.h"
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 #include "webrtc/modules/pacing/include/paced_sender.h"
     15 
     16 using testing::_;
     17 using testing::Return;
     18 
     19 namespace webrtc {
     20 namespace test {
     21 
     22 static const int kTargetBitrate = 800;
     23 static const float kPaceMultiplier = 1.5f;
     24 
     25 class MockPacedSenderCallback : public PacedSender::Callback {
     26  public:
     27   MOCK_METHOD4(TimeToSendPacket,
     28       bool(uint32_t ssrc, uint16_t sequence_number, int64_t capture_time_ms,
     29            bool retransmission));
     30   MOCK_METHOD1(TimeToSendPadding,
     31       int(int bytes));
     32 };
     33 
     34 class PacedSenderPadding : public PacedSender::Callback {
     35  public:
     36   PacedSenderPadding() : padding_sent_(0) {}
     37 
     38   bool TimeToSendPacket(uint32_t ssrc, uint16_t sequence_number,
     39                         int64_t capture_time_ms, bool retransmission) {
     40     return true;
     41   }
     42 
     43   int TimeToSendPadding(int bytes) {
     44     const int kPaddingPacketSize = 224;
     45     int num_packets = (bytes + kPaddingPacketSize - 1) / kPaddingPacketSize;
     46     padding_sent_ += kPaddingPacketSize * num_packets;
     47     return kPaddingPacketSize * num_packets;
     48   }
     49 
     50   int padding_sent() { return padding_sent_; }
     51 
     52  private:
     53   int padding_sent_;
     54 };
     55 
     56 class PacedSenderTest : public ::testing::Test {
     57  protected:
     58   PacedSenderTest() {
     59     srand(0);
     60     TickTime::UseFakeClock(123456);
     61     // Need to initialize PacedSender after we initialize clock.
     62     send_bucket_.reset(
     63         new PacedSender(&callback_, kPaceMultiplier * kTargetBitrate, 0));
     64   }
     65 
     66   void SendAndExpectPacket(PacedSender::Priority priority,
     67                            uint32_t ssrc, uint16_t sequence_number,
     68                            int64_t capture_time_ms, int size,
     69                            bool retransmission) {
     70     EXPECT_FALSE(send_bucket_->SendPacket(priority, ssrc,
     71         sequence_number, capture_time_ms, size, retransmission));
     72     EXPECT_CALL(callback_, TimeToSendPacket(
     73         ssrc, sequence_number, capture_time_ms, false))
     74         .Times(1)
     75         .WillRepeatedly(Return(true));
     76   }
     77 
     78   MockPacedSenderCallback callback_;
     79   scoped_ptr<PacedSender> send_bucket_;
     80 };
     81 
     82 TEST_F(PacedSenderTest, QueuePacket) {
     83   uint32_t ssrc = 12345;
     84   uint16_t sequence_number = 1234;
     85   // Due to the multiplicative factor we can send 3 packets not 2 packets.
     86   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
     87                       TickTime::MillisecondTimestamp(), 250, false);
     88   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
     89                       TickTime::MillisecondTimestamp(), 250, false);
     90   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
     91                       TickTime::MillisecondTimestamp(), 250, false);
     92   int64_t queued_packet_timestamp = TickTime::MillisecondTimestamp();
     93   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
     94       sequence_number, queued_packet_timestamp, 250, false));
     95   send_bucket_->Process();
     96   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
     97   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
     98   TickTime::AdvanceFakeClock(4);
     99   EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess());
    100   TickTime::AdvanceFakeClock(1);
    101   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    102   EXPECT_CALL(callback_, TimeToSendPacket(
    103       ssrc, sequence_number++, queued_packet_timestamp, false))
    104       .Times(1)
    105       .WillRepeatedly(Return(true));
    106   send_bucket_->Process();
    107   sequence_number++;
    108   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    109                       TickTime::MillisecondTimestamp(), 250, false);
    110   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    111                       TickTime::MillisecondTimestamp(), 250, false);
    112   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    113       sequence_number++, TickTime::MillisecondTimestamp(), 250, false));
    114   send_bucket_->Process();
    115 }
    116 
    117 TEST_F(PacedSenderTest, PaceQueuedPackets) {
    118   uint32_t ssrc = 12345;
    119   uint16_t sequence_number = 1234;
    120 
    121   // Due to the multiplicative factor we can send 3 packets not 2 packets.
    122   for (int i = 0; i < 3; ++i) {
    123     SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    124                         TickTime::MillisecondTimestamp(), 250, false);
    125   }
    126   for (int j = 0; j < 30; ++j) {
    127     EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    128         sequence_number++, TickTime::MillisecondTimestamp(), 250, false));
    129   }
    130   send_bucket_->Process();
    131   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    132   for (int k = 0; k < 10; ++k) {
    133     EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    134     TickTime::AdvanceFakeClock(5);
    135     EXPECT_CALL(callback_,
    136         TimeToSendPacket(ssrc, _, _, false))
    137         .Times(3)
    138         .WillRepeatedly(Return(true));
    139     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    140     EXPECT_EQ(0, send_bucket_->Process());
    141   }
    142   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    143   TickTime::AdvanceFakeClock(5);
    144   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    145   EXPECT_EQ(0, send_bucket_->Process());
    146   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    147                       TickTime::MillisecondTimestamp(), 250, false);
    148   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    149                       TickTime::MillisecondTimestamp(), 250, false);
    150   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    151                       TickTime::MillisecondTimestamp(), 250, false);
    152   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    153       sequence_number, TickTime::MillisecondTimestamp(), 250, false));
    154   send_bucket_->Process();
    155 }
    156 
    157 TEST_F(PacedSenderTest, PaceQueuedPacketsWithDuplicates) {
    158   uint32_t ssrc = 12345;
    159   uint16_t sequence_number = 1234;
    160   uint16_t queued_sequence_number;
    161 
    162   // Due to the multiplicative factor we can send 3 packets not 2 packets.
    163   for (int i = 0; i < 3; ++i) {
    164     SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    165                         TickTime::MillisecondTimestamp(), 250, false);
    166   }
    167   queued_sequence_number = sequence_number;
    168 
    169   for (int j = 0; j < 30; ++j) {
    170     // Send in duplicate packets.
    171     EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    172         sequence_number, TickTime::MillisecondTimestamp(), 250, false));
    173     EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    174         sequence_number++, TickTime::MillisecondTimestamp(), 250, false));
    175   }
    176   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    177   send_bucket_->Process();
    178   for (int k = 0; k < 10; ++k) {
    179     EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    180     TickTime::AdvanceFakeClock(5);
    181 
    182     for (int i = 0; i < 3; ++i) {
    183       EXPECT_CALL(callback_, TimeToSendPacket(ssrc, queued_sequence_number++,
    184                                               _,
    185                                               false))
    186           .Times(1)
    187           .WillRepeatedly(Return(true));
    188    }
    189     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    190     EXPECT_EQ(0, send_bucket_->Process());
    191   }
    192   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    193   TickTime::AdvanceFakeClock(5);
    194   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    195   EXPECT_EQ(0, send_bucket_->Process());
    196   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    197                       TickTime::MillisecondTimestamp(), 250, false);
    198   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    199                       TickTime::MillisecondTimestamp(), 250, false);
    200   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    201                       TickTime::MillisecondTimestamp(), 250, false);
    202   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    203       sequence_number++, TickTime::MillisecondTimestamp(), 250, false));
    204   send_bucket_->Process();
    205 }
    206 
    207 TEST_F(PacedSenderTest, Padding) {
    208   uint32_t ssrc = 12345;
    209   uint16_t sequence_number = 1234;
    210 
    211   send_bucket_->UpdateBitrate(kPaceMultiplier * kTargetBitrate, kTargetBitrate);
    212   // Due to the multiplicative factor we can send 3 packets not 2 packets.
    213   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    214                       TickTime::MillisecondTimestamp(), 250, false);
    215   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    216                       TickTime::MillisecondTimestamp(), 250, false);
    217   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    218                       TickTime::MillisecondTimestamp(), 250, false);
    219   // No padding is expected since we have sent too much already.
    220   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    221   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    222   TickTime::AdvanceFakeClock(5);
    223   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    224   EXPECT_EQ(0, send_bucket_->Process());
    225 
    226   // 5 milliseconds later we have enough budget to send some padding.
    227   EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1).
    228       WillOnce(Return(250));
    229   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    230   TickTime::AdvanceFakeClock(5);
    231   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    232   EXPECT_EQ(0, send_bucket_->Process());
    233 }
    234 
    235 TEST_F(PacedSenderTest, NoPaddingWhenDisabled) {
    236   send_bucket_->SetStatus(false);
    237   send_bucket_->UpdateBitrate(kPaceMultiplier * kTargetBitrate, kTargetBitrate);
    238   // No padding is expected since the pacer is disabled.
    239   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    240   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    241   TickTime::AdvanceFakeClock(5);
    242   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    243   EXPECT_EQ(0, send_bucket_->Process());
    244   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    245   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    246   TickTime::AdvanceFakeClock(5);
    247   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    248   EXPECT_EQ(0, send_bucket_->Process());
    249 }
    250 
    251 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) {
    252   uint32_t ssrc = 12345;
    253   uint16_t sequence_number = 1234;
    254   int64_t capture_time_ms = 56789;
    255   const int kTimeStep = 5;
    256   const int64_t kBitrateWindow = 100;
    257   send_bucket_->UpdateBitrate(kPaceMultiplier * kTargetBitrate, kTargetBitrate);
    258   int64_t start_time = TickTime::MillisecondTimestamp();
    259   while (TickTime::MillisecondTimestamp() - start_time < kBitrateWindow) {
    260     SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    261                         capture_time_ms, 250, false);
    262     TickTime::AdvanceFakeClock(kTimeStep);
    263     EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1).
    264         WillOnce(Return(250));
    265     send_bucket_->Process();
    266   }
    267 }
    268 
    269 TEST_F(PacedSenderTest, VerifyAverageBitrateVaryingMediaPayload) {
    270   uint32_t ssrc = 12345;
    271   uint16_t sequence_number = 1234;
    272   int64_t capture_time_ms = 56789;
    273   const int kTimeStep = 5;
    274   const int64_t kBitrateWindow = 10000;
    275   PacedSenderPadding callback;
    276   send_bucket_.reset(
    277       new PacedSender(&callback, kPaceMultiplier * kTargetBitrate, 0));
    278   send_bucket_->UpdateBitrate(kPaceMultiplier * kTargetBitrate, kTargetBitrate);
    279   int64_t start_time = TickTime::MillisecondTimestamp();
    280   int media_bytes = 0;
    281   while (TickTime::MillisecondTimestamp() - start_time < kBitrateWindow) {
    282     int media_payload = rand() % 100 + 200;  // [200, 300] bytes.
    283     EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority, ssrc,
    284                                           sequence_number++, capture_time_ms,
    285                                           media_payload, false));
    286     media_bytes += media_payload;
    287     TickTime::AdvanceFakeClock(kTimeStep);
    288     send_bucket_->Process();
    289   }
    290   EXPECT_NEAR(kTargetBitrate, 8 * (media_bytes + callback.padding_sent()) /
    291               kBitrateWindow, 1);
    292 }
    293 
    294 TEST_F(PacedSenderTest, Priority) {
    295   uint32_t ssrc_low_priority = 12345;
    296   uint32_t ssrc = 12346;
    297   uint16_t sequence_number = 1234;
    298   int64_t capture_time_ms = 56789;
    299   int64_t capture_time_ms_low_priority = 1234567;
    300 
    301   // Due to the multiplicative factor we can send 3 packets not 2 packets.
    302   SendAndExpectPacket(PacedSender::kLowPriority, ssrc, sequence_number++,
    303                       capture_time_ms, 250, false);
    304   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    305                       capture_time_ms, 250, false);
    306   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    307                       capture_time_ms, 250, false);
    308   send_bucket_->Process();
    309 
    310   // Expect normal and low priority to be queued and high to pass through.
    311   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kLowPriority,
    312       ssrc_low_priority, sequence_number++, capture_time_ms_low_priority, 250,
    313       false));
    314   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    315       ssrc, sequence_number++, capture_time_ms, 250, false));
    316   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    317       ssrc, sequence_number++, capture_time_ms, 250, false));
    318   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kHighPriority,
    319       ssrc, sequence_number++, capture_time_ms, 250, false));
    320 
    321   // Expect all high and normal priority to be sent out first.
    322   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    323   EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, capture_time_ms, false))
    324       .Times(3)
    325       .WillRepeatedly(Return(true));
    326 
    327   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    328   TickTime::AdvanceFakeClock(5);
    329   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    330   EXPECT_EQ(0, send_bucket_->Process());
    331 
    332   EXPECT_CALL(callback_, TimeToSendPacket(
    333       ssrc_low_priority, _, capture_time_ms_low_priority, false))
    334       .Times(1)
    335       .WillRepeatedly(Return(true));
    336 
    337   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    338   TickTime::AdvanceFakeClock(5);
    339   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    340   EXPECT_EQ(0, send_bucket_->Process());
    341 }
    342 
    343 TEST_F(PacedSenderTest, Pause) {
    344   uint32_t ssrc_low_priority = 12345;
    345   uint32_t ssrc = 12346;
    346   uint16_t sequence_number = 1234;
    347   int64_t capture_time_ms = TickTime::MillisecondTimestamp();
    348 
    349   EXPECT_EQ(0, send_bucket_->QueueInMs());
    350 
    351   // Due to the multiplicative factor we can send 3 packets not 2 packets.
    352   SendAndExpectPacket(PacedSender::kLowPriority, ssrc, sequence_number++,
    353                       capture_time_ms, 250, false);
    354   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    355                       capture_time_ms, 250, false);
    356   SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++,
    357                       capture_time_ms, 250, false);
    358   send_bucket_->Process();
    359 
    360   send_bucket_->Pause();
    361 
    362   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    363       ssrc, sequence_number++, capture_time_ms, 250, false));
    364   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    365       ssrc, sequence_number++, capture_time_ms, 250, false));
    366   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kHighPriority,
    367       ssrc, sequence_number++, capture_time_ms, 250, false));
    368 
    369   TickTime::AdvanceFakeClock(10000);
    370   int64_t second_capture_time_ms = TickTime::MillisecondTimestamp();
    371 
    372   // Expect everything to be queued.
    373   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kLowPriority,
    374       ssrc_low_priority, sequence_number++, second_capture_time_ms, 250,
    375       false));
    376 
    377   EXPECT_EQ(TickTime::MillisecondTimestamp() - capture_time_ms,
    378             send_bucket_->QueueInMs());
    379 
    380   // Expect no packet to come out while paused.
    381   EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0);
    382   EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _)).Times(0);
    383 
    384   for (int i = 0; i < 10; ++i) {
    385     TickTime::AdvanceFakeClock(5);
    386     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    387     EXPECT_EQ(0, send_bucket_->Process());
    388   }
    389   // Expect high prio packets to come out first followed by all packets in the
    390   // way they were added.
    391   EXPECT_CALL(callback_, TimeToSendPacket(_, _, capture_time_ms, false))
    392       .Times(3)
    393       .WillRepeatedly(Return(true));
    394   send_bucket_->Resume();
    395 
    396   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    397   TickTime::AdvanceFakeClock(5);
    398   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    399   EXPECT_EQ(0, send_bucket_->Process());
    400 
    401   EXPECT_CALL(
    402       callback_, TimeToSendPacket(_, _, second_capture_time_ms, false))
    403       .Times(1)
    404       .WillRepeatedly(Return(true));
    405   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
    406   TickTime::AdvanceFakeClock(5);
    407   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
    408   EXPECT_EQ(0, send_bucket_->Process());
    409   EXPECT_EQ(0, send_bucket_->QueueInMs());
    410 }
    411 
    412 TEST_F(PacedSenderTest, ResendPacket) {
    413   uint32_t ssrc = 12346;
    414   uint16_t sequence_number = 1234;
    415   int64_t capture_time_ms = TickTime::MillisecondTimestamp();
    416   EXPECT_EQ(0, send_bucket_->QueueInMs());
    417 
    418   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    419                                         ssrc,
    420                                         sequence_number,
    421                                         capture_time_ms,
    422                                         250,
    423                                         false));
    424   TickTime::AdvanceFakeClock(1);
    425   EXPECT_FALSE(send_bucket_->SendPacket(PacedSender::kNormalPriority,
    426                                         ssrc,
    427                                         sequence_number + 1,
    428                                         capture_time_ms + 1,
    429                                         250,
    430                                         false));
    431   TickTime::AdvanceFakeClock(9999);
    432   EXPECT_EQ(TickTime::MillisecondTimestamp() - capture_time_ms,
    433             send_bucket_->QueueInMs());
    434   // Fails to send first packet so only one call.
    435   EXPECT_CALL(callback_, TimeToSendPacket(
    436       ssrc, sequence_number, capture_time_ms, false))
    437       .Times(1)
    438       .WillOnce(Return(false));
    439   TickTime::AdvanceFakeClock(10000);
    440   send_bucket_->Process();
    441 
    442   // Queue remains unchanged.
    443   EXPECT_EQ(TickTime::MillisecondTimestamp() - capture_time_ms,
    444             send_bucket_->QueueInMs());
    445 
    446   // Fails to send second packet.
    447   EXPECT_CALL(callback_, TimeToSendPacket(
    448       ssrc, sequence_number, capture_time_ms, false))
    449       .Times(1)
    450       .WillOnce(Return(true));
    451   EXPECT_CALL(callback_, TimeToSendPacket(
    452       ssrc, sequence_number + 1, capture_time_ms + 1, false))
    453       .Times(1)
    454       .WillOnce(Return(false));
    455   TickTime::AdvanceFakeClock(10000);
    456   send_bucket_->Process();
    457 
    458   // Queue is reduced by 1 packet.
    459   EXPECT_EQ(TickTime::MillisecondTimestamp() - capture_time_ms - 1,
    460             send_bucket_->QueueInMs());
    461 
    462   // Send second packet and queue becomes empty.
    463   EXPECT_CALL(callback_, TimeToSendPacket(
    464       ssrc, sequence_number + 1, capture_time_ms + 1, false))
    465       .Times(1)
    466       .WillOnce(Return(true));
    467   TickTime::AdvanceFakeClock(10000);
    468   send_bucket_->Process();
    469   EXPECT_EQ(0, send_bucket_->QueueInMs());
    470 }
    471 
    472 TEST_F(PacedSenderTest, MaxQueueLength) {
    473   uint32_t ssrc = 12346;
    474   uint16_t sequence_number = 1234;
    475   EXPECT_EQ(0, send_bucket_->QueueInMs());
    476 
    477   send_bucket_->UpdateBitrate(kPaceMultiplier * 30, 0);
    478   for (int i = 0; i < 30; ++i) {
    479     SendAndExpectPacket(PacedSender::kNormalPriority,
    480                         ssrc,
    481                         sequence_number++,
    482                         TickTime::MillisecondTimestamp(),
    483                         1200,
    484                         false);
    485   }
    486 
    487   TickTime::AdvanceFakeClock(2001);
    488   SendAndExpectPacket(PacedSender::kNormalPriority,
    489                       ssrc,
    490                       sequence_number++,
    491                       TickTime::MillisecondTimestamp(),
    492                       1200,
    493                       false);
    494   EXPECT_EQ(2001, send_bucket_->QueueInMs());
    495   send_bucket_->Process();
    496   EXPECT_EQ(0, send_bucket_->QueueInMs());
    497   TickTime::AdvanceFakeClock(31);
    498   send_bucket_->Process();
    499 }
    500 
    501 TEST_F(PacedSenderTest, QueueTimeGrowsOverTime) {
    502   uint32_t ssrc = 12346;
    503   uint16_t sequence_number = 1234;
    504   EXPECT_EQ(0, send_bucket_->QueueInMs());
    505 
    506   send_bucket_->UpdateBitrate(kPaceMultiplier * 30, 0);
    507   SendAndExpectPacket(PacedSender::kNormalPriority,
    508                       ssrc,
    509                       sequence_number,
    510                       TickTime::MillisecondTimestamp(),
    511                       1200,
    512                       false);
    513 
    514   TickTime::AdvanceFakeClock(500);
    515   EXPECT_EQ(500, send_bucket_->QueueInMs());
    516   send_bucket_->Process();
    517   EXPECT_EQ(0, send_bucket_->QueueInMs());
    518 }
    519 }  // namespace test
    520 }  // namespace webrtc
    521