tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

remb_throttler_unittest.cc (4103B)


      1 /*
      2 *  Copyright (c) 2021 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 #include "modules/congestion_controller/remb_throttler.h"
     11 
     12 #include <cstdint>
     13 #include <vector>
     14 
     15 #include "api/units/data_rate.h"
     16 #include "api/units/time_delta.h"
     17 #include "api/units/timestamp.h"
     18 #include "system_wrappers/include/clock.h"
     19 #include "test/gmock.h"
     20 #include "test/gtest.h"
     21 
     22 namespace webrtc {
     23 
     24 using ::testing::_;
     25 using ::testing::MockFunction;
     26 
     27 TEST(RembThrottlerTest, CallRembSenderOnFirstReceiveBitrateChange) {
     28  SimulatedClock clock(Timestamp::Zero());
     29  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     30  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     31 
     32  EXPECT_CALL(remb_sender, Call(12345, std::vector<uint32_t>({1, 2, 3})));
     33  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/12345);
     34 }
     35 
     36 TEST(RembThrottlerTest, ThrottlesSmallReceiveBitrateDecrease) {
     37  SimulatedClock clock(Timestamp::Zero());
     38  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     39  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     40 
     41  EXPECT_CALL(remb_sender, Call);
     42  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/12346);
     43  clock.AdvanceTime(TimeDelta::Millis(100));
     44  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/12345);
     45 
     46  EXPECT_CALL(remb_sender, Call(12345, _));
     47  clock.AdvanceTime(TimeDelta::Millis(101));
     48  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/12345);
     49 }
     50 
     51 TEST(RembThrottlerTest, DoNotThrottleLargeReceiveBitrateDecrease) {
     52  SimulatedClock clock(Timestamp::Zero());
     53  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     54  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     55 
     56  EXPECT_CALL(remb_sender, Call(2345, _));
     57  EXPECT_CALL(remb_sender, Call(1234, _));
     58  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/2345);
     59  clock.AdvanceTime(TimeDelta::Millis(1));
     60  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/1234);
     61 }
     62 
     63 TEST(RembThrottlerTest, ThrottlesReceiveBitrateIncrease) {
     64  SimulatedClock clock(Timestamp::Zero());
     65  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     66  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     67 
     68  EXPECT_CALL(remb_sender, Call);
     69  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/1234);
     70  clock.AdvanceTime(TimeDelta::Millis(100));
     71  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/2345);
     72 
     73  // Updates 200ms after previous callback is not throttled.
     74  EXPECT_CALL(remb_sender, Call(2345, _));
     75  clock.AdvanceTime(TimeDelta::Millis(101));
     76  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/2345);
     77 }
     78 
     79 TEST(RembThrottlerTest, CallRembSenderOnSetMaxDesiredReceiveBitrate) {
     80  SimulatedClock clock(Timestamp::Zero());
     81  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     82  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     83  EXPECT_CALL(remb_sender, Call(1234, _));
     84  remb_throttler.SetMaxDesiredReceiveBitrate(DataRate::BitsPerSec(1234));
     85 }
     86 
     87 TEST(RembThrottlerTest, CallRembSenderWithMinOfMaxDesiredAndOnReceivedBitrate) {
     88  SimulatedClock clock(Timestamp::Zero());
     89  MockFunction<void(uint64_t, std::vector<uint32_t>)> remb_sender;
     90  RembThrottler remb_throttler(remb_sender.AsStdFunction(), &clock);
     91 
     92  EXPECT_CALL(remb_sender, Call(1234, _));
     93  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/1234);
     94  clock.AdvanceTime(TimeDelta::Millis(1));
     95  remb_throttler.SetMaxDesiredReceiveBitrate(DataRate::BitsPerSec(4567));
     96 
     97  clock.AdvanceTime(TimeDelta::Millis(200));
     98  EXPECT_CALL(remb_sender, Call(4567, _));
     99  remb_throttler.OnReceiveBitrateChanged({1, 2, 3}, /*bitrate_bps=*/5678);
    100 }
    101 
    102 }  // namespace webrtc