OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 | 10 |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, | 248 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, |
249 clock_.TimeInMilliseconds(), 250, false); | 249 clock_.TimeInMilliseconds(), 250, false); |
250 } | 250 } |
251 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 251 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
252 sequence_number, clock_.TimeInMilliseconds(), 250, | 252 sequence_number, clock_.TimeInMilliseconds(), 250, |
253 false); | 253 false); |
254 send_bucket_->Process(); | 254 send_bucket_->Process(); |
255 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); | 255 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); |
256 } | 256 } |
257 | 257 |
258 TEST_F(PacedSenderTest, PaceQueuedPacketsWithDuplicates) { | 258 TEST_F(PacedSenderTest, RepeatedRetransmissionsAllowed) { |
259 uint32_t ssrc = 12345; | 259 // Send one packet, then two retransmissions of that packet. |
260 uint16_t sequence_number = 1234; | 260 for (size_t i = 0; i < 3; i++) { |
261 uint16_t queued_sequence_number; | 261 constexpr uint32_t ssrc = 333; |
262 | 262 constexpr uint16_t sequence_number = 444; |
263 // Due to the multiplicative factor we can send 5 packets during a send | 263 constexpr size_t bytes = 250; |
264 // interval. (network capacity * multiplier / (8 bits per byte * | 264 bool is_retransmission = (i != 0); // Original followed by retransmissions. |
265 // (packet size * #send intervals per second) | 265 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number, |
266 const size_t packets_to_send_per_interval = | 266 clock_.TimeInMilliseconds(), bytes, is_retransmission); |
267 kTargetBitrateBps * PacedSender::kDefaultPaceMultiplier / (8 * 250 * 200); | 267 clock_.AdvanceTimeMilliseconds(5); |
268 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | |
269 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, | |
270 clock_.TimeInMilliseconds(), 250, false); | |
271 } | 268 } |
272 queued_sequence_number = sequence_number; | |
273 | |
274 for (size_t j = 0; j < packets_to_send_per_interval * 10; ++j) { | |
275 // Send in duplicate packets. | |
276 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | |
277 sequence_number, clock_.TimeInMilliseconds(), | |
278 250, false); | |
279 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | |
280 sequence_number++, clock_.TimeInMilliseconds(), | |
281 250, false); | |
282 } | |
283 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | |
284 send_bucket_->Process(); | 269 send_bucket_->Process(); |
285 for (int k = 0; k < 10; ++k) { | |
286 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | |
287 clock_.AdvanceTimeMilliseconds(5); | |
288 | |
289 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | |
290 EXPECT_CALL(callback_, | |
291 TimeToSendPacket(ssrc, queued_sequence_number++, _, false, _)) | |
292 .Times(1) | |
293 .WillRepeatedly(Return(true)); | |
294 } | |
295 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | |
296 send_bucket_->Process(); | |
297 } | |
298 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | |
299 clock_.AdvanceTimeMilliseconds(5); | |
300 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | |
301 send_bucket_->Process(); | |
302 | |
303 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | |
304 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, | |
305 clock_.TimeInMilliseconds(), 250, false); | |
306 } | |
307 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | |
308 sequence_number++, clock_.TimeInMilliseconds(), | |
309 250, false); | |
310 send_bucket_->Process(); | |
311 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); | |
312 } | 270 } |
313 | 271 |
314 TEST_F(PacedSenderTest, CanQueuePacketsWithSameSequenceNumberOnDifferentSsrcs) { | 272 TEST_F(PacedSenderTest, CanQueuePacketsWithSameSequenceNumberOnDifferentSsrcs) { |
315 uint32_t ssrc = 12345; | 273 uint32_t ssrc = 12345; |
316 uint16_t sequence_number = 1234; | 274 uint16_t sequence_number = 1234; |
317 | 275 |
318 SendAndExpectPacket(PacedSender::kNormalPriority, | 276 SendAndExpectPacket(PacedSender::kNormalPriority, |
319 ssrc, | 277 ssrc, |
320 sequence_number, | 278 sequence_number, |
321 clock_.TimeInMilliseconds(), | 279 clock_.TimeInMilliseconds(), |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1089 .WillRepeatedly(Return(0)); | 1047 .WillRepeatedly(Return(0)); |
1090 send_bucket_->Process(); | 1048 send_bucket_->Process(); |
1091 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess()); | 1049 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess()); |
1092 clock_.AdvanceTimeMilliseconds(1); | 1050 clock_.AdvanceTimeMilliseconds(1); |
1093 send_bucket_->Process(); | 1051 send_bucket_->Process(); |
1094 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 1052 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
1095 } | 1053 } |
1096 | 1054 |
1097 } // namespace test | 1055 } // namespace test |
1098 } // namespace webrtc | 1056 } // namespace webrtc |
OLD | NEW |