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/base/ptr_util.h" |
17 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" | 18 #include "webrtc/modules/congestion_controller/delay_based_bwe.h" |
18 | 19 |
19 namespace webrtc { | 20 namespace webrtc { |
20 | 21 |
21 constexpr size_t kMtu = 1200; | 22 constexpr size_t kMtu = 1200; |
22 constexpr uint32_t kAcceptedBitrateErrorBps = 50000; | 23 constexpr uint32_t kAcceptedBitrateErrorBps = 50000; |
23 | 24 |
24 // Number of packets needed before we have a valid estimate. | 25 // Number of packets needed before we have a valid estimate. |
25 constexpr int kNumInitialPackets = 2; | 26 constexpr int kNumInitialPackets = 2; |
26 | 27 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 packet.arrival_time_ms = prev_arrival_time_us_ / 1000; | 143 packet.arrival_time_ms = prev_arrival_time_us_ / 1000; |
143 ++i; | 144 ++i; |
144 } | 145 } |
145 it = std::min_element(streams_.begin(), streams_.end(), RtpStream::Compare); | 146 it = std::min_element(streams_.begin(), streams_.end(), RtpStream::Compare); |
146 return std::max((*it)->next_rtp_time(), time_now_us); | 147 return std::max((*it)->next_rtp_time(), time_now_us); |
147 } | 148 } |
148 } // namespace test | 149 } // namespace test |
149 | 150 |
150 DelayBasedBweTest::DelayBasedBweTest() | 151 DelayBasedBweTest::DelayBasedBweTest() |
151 : clock_(100000000), | 152 : clock_(100000000), |
| 153 acknowledged_bitrate_estimator_( |
| 154 rtc::MakeUnique<AcknowledgedBitrateEstimator>()), |
152 bitrate_estimator_(new DelayBasedBwe(nullptr, &clock_)), | 155 bitrate_estimator_(new DelayBasedBwe(nullptr, &clock_)), |
153 stream_generator_(new test::StreamGenerator(1e6, // Capacity. | 156 stream_generator_(new test::StreamGenerator(1e6, // Capacity. |
154 clock_.TimeInMicroseconds())), | 157 clock_.TimeInMicroseconds())), |
155 arrival_time_offset_ms_(0), | 158 arrival_time_offset_ms_(0), |
156 first_update_(true) {} | 159 first_update_(true) {} |
157 | 160 |
158 DelayBasedBweTest::~DelayBasedBweTest() {} | 161 DelayBasedBweTest::~DelayBasedBweTest() {} |
159 | 162 |
160 void DelayBasedBweTest::AddDefaultStream() { | 163 void DelayBasedBweTest::AddDefaultStream() { |
161 stream_generator_->AddStream(new test::RtpStream(30, 3e5)); | 164 stream_generator_->AddStream(new test::RtpStream(30, 3e5)); |
(...skipping 12 matching lines...) Expand all Loading... |
174 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, | 177 void DelayBasedBweTest::IncomingFeedback(int64_t arrival_time_ms, |
175 int64_t send_time_ms, | 178 int64_t send_time_ms, |
176 uint16_t sequence_number, | 179 uint16_t sequence_number, |
177 size_t payload_size, | 180 size_t payload_size, |
178 const PacedPacketInfo& pacing_info) { | 181 const PacedPacketInfo& pacing_info) { |
179 RTC_CHECK_GE(arrival_time_ms + arrival_time_offset_ms_, 0); | 182 RTC_CHECK_GE(arrival_time_ms + arrival_time_offset_ms_, 0); |
180 PacketFeedback packet(arrival_time_ms + arrival_time_offset_ms_, send_time_ms, | 183 PacketFeedback packet(arrival_time_ms + arrival_time_offset_ms_, send_time_ms, |
181 sequence_number, payload_size, pacing_info); | 184 sequence_number, payload_size, pacing_info); |
182 std::vector<PacketFeedback> packets; | 185 std::vector<PacketFeedback> packets; |
183 packets.push_back(packet); | 186 packets.push_back(packet); |
| 187 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector(packets); |
184 DelayBasedBwe::Result result = | 188 DelayBasedBwe::Result result = |
185 bitrate_estimator_->IncomingPacketFeedbackVector(packets); | 189 bitrate_estimator_->IncomingPacketFeedbackVector( |
| 190 packets, acknowledged_bitrate_estimator_->bitrate_bps()); |
186 const uint32_t kDummySsrc = 0; | 191 const uint32_t kDummySsrc = 0; |
187 if (result.updated) { | 192 if (result.updated) { |
188 bitrate_observer_.OnReceiveBitrateChanged({kDummySsrc}, | 193 bitrate_observer_.OnReceiveBitrateChanged({kDummySsrc}, |
189 result.target_bitrate_bps); | 194 result.target_bitrate_bps); |
190 } | 195 } |
191 } | 196 } |
192 | 197 |
193 // Generates a frame of packets belonging to a stream at a given bitrate and | 198 // Generates a frame of packets belonging to a stream at a given bitrate and |
194 // with a given ssrc. The stream is pushed through a very simple simulated | 199 // with a given ssrc. The stream is pushed through a very simple simulated |
195 // network, and is then given to the receive-side bandwidth estimator. | 200 // network, and is then given to the receive-side bandwidth estimator. |
(...skipping 10 matching lines...) Expand all Loading... |
206 return false; | 211 return false; |
207 | 212 |
208 bool overuse = false; | 213 bool overuse = false; |
209 bitrate_observer_.Reset(); | 214 bitrate_observer_.Reset(); |
210 clock_.AdvanceTimeMicroseconds(1000 * packets.back().arrival_time_ms - | 215 clock_.AdvanceTimeMicroseconds(1000 * packets.back().arrival_time_ms - |
211 clock_.TimeInMicroseconds()); | 216 clock_.TimeInMicroseconds()); |
212 for (auto& packet : packets) { | 217 for (auto& packet : packets) { |
213 RTC_CHECK_GE(packet.arrival_time_ms + arrival_time_offset_ms_, 0); | 218 RTC_CHECK_GE(packet.arrival_time_ms + arrival_time_offset_ms_, 0); |
214 packet.arrival_time_ms += arrival_time_offset_ms_; | 219 packet.arrival_time_ms += arrival_time_offset_ms_; |
215 } | 220 } |
| 221 |
| 222 acknowledged_bitrate_estimator_->IncomingPacketFeedbackVector(packets); |
216 DelayBasedBwe::Result result = | 223 DelayBasedBwe::Result result = |
217 bitrate_estimator_->IncomingPacketFeedbackVector(packets); | 224 bitrate_estimator_->IncomingPacketFeedbackVector( |
| 225 packets, acknowledged_bitrate_estimator_->bitrate_bps()); |
218 const uint32_t kDummySsrc = 0; | 226 const uint32_t kDummySsrc = 0; |
219 if (result.updated) { | 227 if (result.updated) { |
220 bitrate_observer_.OnReceiveBitrateChanged({kDummySsrc}, | 228 bitrate_observer_.OnReceiveBitrateChanged({kDummySsrc}, |
221 result.target_bitrate_bps); | 229 result.target_bitrate_bps); |
222 if (!first_update_ && result.target_bitrate_bps < bitrate_bps) | 230 if (!first_update_ && result.target_bitrate_bps < bitrate_bps) |
223 overuse = true; | 231 overuse = true; |
224 first_update_ = false; | 232 first_update_ = false; |
225 } | 233 } |
226 | 234 |
227 clock_.AdvanceTimeMicroseconds(next_time_us - clock_.TimeInMicroseconds()); | 235 clock_.AdvanceTimeMicroseconds(next_time_us - clock_.TimeInMicroseconds()); |
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, | 504 IncomingFeedback(clock_.TimeInMilliseconds(), send_time_ms, |
497 sequence_number++, 1000); | 505 sequence_number++, 1000); |
498 clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); | 506 clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs); |
499 send_time_ms += kFrameIntervalMs; | 507 send_time_ms += kFrameIntervalMs; |
500 } | 508 } |
501 uint32_t bitrate_after = 0; | 509 uint32_t bitrate_after = 0; |
502 bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_after); | 510 bitrate_estimator_->LatestEstimate(&ssrcs, &bitrate_after); |
503 EXPECT_LT(bitrate_after, bitrate_before); | 511 EXPECT_LT(bitrate_after, bitrate_before); |
504 } | 512 } |
505 } // namespace webrtc | 513 } // namespace webrtc |
OLD | NEW |