| 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 |