| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 
| 3  * | 3  * | 
| 4  *  Use of this source code is governed by a BSD-style license | 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 | 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 | 6  *  tree. An additional intellectual property rights grant can be found | 
| 7  *  in the file PATENTS.  All contributing project authors may | 7  *  in the file PATENTS.  All contributing project authors may | 
| 8  *  be found in the AUTHORS file in the root of the source tree. | 8  *  be found in the AUTHORS file in the root of the source tree. | 
| 9  */ | 9  */ | 
| 10 #include "webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.h
     " | 10 #include "webrtc/modules/congestion_controller/delay_based_bwe_unittest_helper.h
     " | 
| 11 | 11 | 
| 12 #include <algorithm> | 12 #include <algorithm> | 
| 13 #include <limits> | 13 #include <limits> | 
| 14 #include <utility> | 14 #include <utility> | 
| 15 | 15 | 
| 16 #include "webrtc/base/checks.h" | 16 #include "webrtc/base/checks.h" | 
| 17 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" | 17 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" | 
| 18 | 18 | 
| 19 namespace webrtc { | 19 namespace webrtc { | 
| 20 | 20 | 
| 21 const size_t kMtu = 1200; | 21 constexpr size_t kMtu = 1200; | 
| 22 const uint32_t kAcceptedBitrateErrorBps = 50000; | 22 constexpr uint32_t kAcceptedBitrateErrorBps = 50000; | 
| 23 | 23 | 
| 24 // Number of packets needed before we have a valid estimate. | 24 // Number of packets needed before we have a valid estimate. | 
| 25 const int kNumInitialPackets = 2; | 25 constexpr int kNumInitialPackets = 2; | 
|  | 26 | 
|  | 27 constexpr int kInitialProbingPackets = 5; | 
| 26 | 28 | 
| 27 namespace test { | 29 namespace test { | 
| 28 | 30 | 
| 29 void TestBitrateObserver::OnReceiveBitrateChanged( | 31 void TestBitrateObserver::OnReceiveBitrateChanged( | 
| 30     const std::vector<uint32_t>& ssrcs, | 32     const std::vector<uint32_t>& ssrcs, | 
| 31     uint32_t bitrate) { | 33     uint32_t bitrate) { | 
| 32   latest_bitrate_ = bitrate; | 34   latest_bitrate_ = bitrate; | 
| 33   updated_ = true; | 35   updated_ = true; | 
| 34 } | 36 } | 
| 35 | 37 | 
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 161   stream_generator_->AddStream(new test::RtpStream(30, 3e5)); | 163   stream_generator_->AddStream(new test::RtpStream(30, 3e5)); | 
| 162 } | 164 } | 
| 163 | 165 | 
| 164 const uint32_t DelayBasedBweTest::kDefaultSsrc = 0; | 166 const uint32_t DelayBasedBweTest::kDefaultSsrc = 0; | 
| 165 | 167 | 
| 166 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, | 168 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, | 
| 167                                          int64_t send_time_ms, | 169                                          int64_t send_time_ms, | 
| 168                                          uint16_t sequence_number, | 170                                          uint16_t sequence_number, | 
| 169                                          size_t payload_size) { | 171                                          size_t payload_size) { | 
| 170   IncomingFeedback(arrival_time_ms, send_time_ms, sequence_number, payload_size, | 172   IncomingFeedback(arrival_time_ms, send_time_ms, sequence_number, payload_size, | 
| 171                    0); | 173                    PacketInfo::kNotAProbe); | 
| 172 } | 174 } | 
| 173 | 175 | 
| 174 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, | 176 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, | 
| 175                                          int64_t send_time_ms, | 177                                          int64_t send_time_ms, | 
| 176                                          uint16_t sequence_number, | 178                                          uint16_t sequence_number, | 
| 177                                          size_t payload_size, | 179                                          size_t payload_size, | 
| 178                                          int probe_cluster_id) { | 180                                          int probe_cluster_id) { | 
| 179   RTC_CHECK_GE(arrival_time_ms + arrival_time_offset_ms_, 0); | 181   RTC_CHECK_GE(arrival_time_ms + arrival_time_offset_ms_, 0); | 
| 180   PacketInfo packet(arrival_time_ms + arrival_time_offset_ms_, send_time_ms, | 182   PacketInfo packet(arrival_time_ms + arrival_time_offset_ms_, send_time_ms, | 
| 181                     sequence_number, payload_size, probe_cluster_id); | 183                     sequence_number, payload_size, probe_cluster_id); | 
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 261   EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 263   EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 
| 262   EXPECT_EQ(0u, ssrcs.size()); | 264   EXPECT_EQ(0u, ssrcs.size()); | 
| 263   clock_.AdvanceTimeMilliseconds(1000); | 265   clock_.AdvanceTimeMilliseconds(1000); | 
| 264   bitrate_estimator_->Process(); | 266   bitrate_estimator_->Process(); | 
| 265   EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 267   EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 
| 266   EXPECT_FALSE(bitrate_observer_->updated()); | 268   EXPECT_FALSE(bitrate_observer_->updated()); | 
| 267   bitrate_observer_->Reset(); | 269   bitrate_observer_->Reset(); | 
| 268   clock_.AdvanceTimeMilliseconds(1000); | 270   clock_.AdvanceTimeMilliseconds(1000); | 
| 269   // Inserting packets for 5 seconds to get a valid estimate. | 271   // Inserting packets for 5 seconds to get a valid estimate. | 
| 270   for (int i = 0; i < 5 * kFramerate + 1 + kNumInitialPackets; ++i) { | 272   for (int i = 0; i < 5 * kFramerate + 1 + kNumInitialPackets; ++i) { | 
|  | 273     // NOTE!!! If the following line is moved under the if case then this test | 
|  | 274     //         wont work on windows realease bots. | 
|  | 275     int cluster_id = i < kInitialProbingPackets ? 0 : PacketInfo::kNotAProbe; | 
|  | 276 | 
| 271     if (i == kNumInitialPackets) { | 277     if (i == kNumInitialPackets) { | 
| 272       bitrate_estimator_->Process(); | 278       bitrate_estimator_->Process(); | 
| 273       EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 279       EXPECT_FALSE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 
| 274       EXPECT_EQ(0u, ssrcs.size()); | 280       EXPECT_EQ(0u, ssrcs.size()); | 
| 275       EXPECT_FALSE(bitrate_observer_->updated()); | 281       EXPECT_FALSE(bitrate_observer_->updated()); | 
| 276       bitrate_observer_->Reset(); | 282       bitrate_observer_->Reset(); | 
| 277     } | 283     } | 
| 278 |  | 
| 279     IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, | 284     IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, | 
| 280                      sequence_number++, kMtu); | 285                      sequence_number++, kMtu, cluster_id); | 
| 281     clock_.AdvanceTimeMilliseconds(1000 / kFramerate); | 286     clock_.AdvanceTimeMilliseconds(1000 / kFramerate); | 
| 282     send_time_ms += kFrameIntervalMs; | 287     send_time_ms += kFrameIntervalMs; | 
| 283   } | 288   } | 
| 284   bitrate_estimator_->Process(); | 289   bitrate_estimator_->Process(); | 
| 285   EXPECT_TRUE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 290   EXPECT_TRUE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); | 
| 286   ASSERT_EQ(1u, ssrcs.size()); | 291   ASSERT_EQ(1u, ssrcs.size()); | 
| 287   EXPECT_EQ(kDefaultSsrc, ssrcs.front()); | 292   EXPECT_EQ(kDefaultSsrc, ssrcs.front()); | 
| 288   EXPECT_NEAR(expected_converge_bitrate, bitrate_bps, kAcceptedBitrateErrorBps); | 293   EXPECT_NEAR(expected_converge_bitrate, bitrate_bps, kAcceptedBitrateErrorBps); | 
| 289   EXPECT_TRUE(bitrate_observer_->updated()); | 294   EXPECT_TRUE(bitrate_observer_->updated()); | 
| 290   bitrate_observer_->Reset(); | 295   bitrate_observer_->Reset(); | 
| 291   EXPECT_EQ(bitrate_observer_->latest_bitrate(), bitrate_bps); | 296   EXPECT_EQ(bitrate_observer_->latest_bitrate(), bitrate_bps); | 
| 292   bitrate_estimator_->RemoveStream(kDefaultSsrc); |  | 
| 293   EXPECT_TRUE(bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_bps)); |  | 
| 294   ASSERT_EQ(0u, ssrcs.size()); |  | 
| 295   EXPECT_EQ(0u, bitrate_bps); |  | 
| 296 } | 297 } | 
| 297 | 298 | 
| 298 void DelayBasedBweTest::RateIncreaseReorderingTestHelper( | 299 void DelayBasedBweTest::RateIncreaseReorderingTestHelper( | 
| 299     uint32_t expected_bitrate_bps) { | 300     uint32_t expected_bitrate_bps) { | 
| 300   const int kFramerate = 50;  // 50 fps to avoid rounding errors. | 301   const int kFramerate = 50;  // 50 fps to avoid rounding errors. | 
| 301   const int kFrameIntervalMs = 1000 / kFramerate; | 302   const int kFrameIntervalMs = 1000 / kFramerate; | 
| 302   int64_t send_time_ms = 0; | 303   int64_t send_time_ms = 0; | 
| 303   uint16_t sequence_number = 0; | 304   uint16_t sequence_number = 0; | 
| 304   // Inserting packets for five seconds to get a valid estimate. | 305   // Inserting packets for five seconds to get a valid estimate. | 
| 305   for (int i = 0; i < 5 * kFramerate + 1 + kNumInitialPackets; ++i) { | 306   for (int i = 0; i < 5 * kFramerate + 1 + kNumInitialPackets; ++i) { | 
|  | 307     // NOTE!!! If the following line is moved under the if case then this test | 
|  | 308     //         wont work on windows realease bots. | 
|  | 309     int cluster_id = i < kInitialProbingPackets ? 0 : PacketInfo::kNotAProbe; | 
|  | 310 | 
| 306     // TODO(sprang): Remove this hack once the single stream estimator is gone, | 311     // TODO(sprang): Remove this hack once the single stream estimator is gone, | 
| 307     // as it doesn't do anything in Process(). | 312     // as it doesn't do anything in Process(). | 
| 308     if (i == kNumInitialPackets) { | 313     if (i == kNumInitialPackets) { | 
| 309       // Process after we have enough frames to get a valid input rate estimate. | 314       // Process after we have enough frames to get a valid input rate estimate. | 
| 310       bitrate_estimator_->Process(); | 315       bitrate_estimator_->Process(); | 
| 311       EXPECT_FALSE(bitrate_observer_->updated());  // No valid estimate. | 316       EXPECT_FALSE(bitrate_observer_->updated());  // No valid estimate. | 
| 312     } | 317     } | 
| 313 |  | 
| 314     IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, | 318     IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, | 
| 315                      sequence_number++, kMtu); | 319                      sequence_number++, kMtu, cluster_id); | 
| 316     clock_.AdvanceTimeMilliseconds(kFrameIntervalMs); | 320     clock_.AdvanceTimeMilliseconds(kFrameIntervalMs); | 
| 317     send_time_ms += kFrameIntervalMs; | 321     send_time_ms += kFrameIntervalMs; | 
| 318   } | 322   } | 
| 319   bitrate_estimator_->Process(); | 323   bitrate_estimator_->Process(); | 
| 320   EXPECT_TRUE(bitrate_observer_->updated()); | 324   EXPECT_TRUE(bitrate_observer_->updated()); | 
| 321   EXPECT_NEAR(expected_bitrate_bps, bitrate_observer_->latest_bitrate(), | 325   EXPECT_NEAR(expected_bitrate_bps, bitrate_observer_->latest_bitrate(), | 
| 322               kAcceptedBitrateErrorBps); | 326               kAcceptedBitrateErrorBps); | 
| 323   for (int i = 0; i < 10; ++i) { | 327   for (int i = 0; i < 10; ++i) { | 
| 324     clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); | 328     clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); | 
| 325     send_time_ms += 2 * kFrameIntervalMs; | 329     send_time_ms += 2 * kFrameIntervalMs; | 
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 491                      sequence_number++, 1000); | 495                      sequence_number++, 1000); | 
| 492     clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); | 496     clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); | 
| 493     send_time_ms += kFrameIntervalMs; | 497     send_time_ms += kFrameIntervalMs; | 
| 494     bitrate_estimator_->Process(); | 498     bitrate_estimator_->Process(); | 
| 495   } | 499   } | 
| 496   uint32_t bitrate_after = 0; | 500   uint32_t bitrate_after = 0; | 
| 497   bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_after); | 501   bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_after); | 
| 498   EXPECT_LT(bitrate_after, bitrate_before); | 502   EXPECT_LT(bitrate_after, bitrate_before); | 
| 499 } | 503 } | 
| 500 }  // namespace webrtc | 504 }  // namespace webrtc | 
| OLD | NEW | 
|---|