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