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 14 matching lines...) Expand all Loading... |
25 static const int kTargetBitrateBps = 800000; | 25 static const int kTargetBitrateBps = 800000; |
26 | 26 |
27 class MockPacedSenderCallback : public PacedSender::PacketSender { | 27 class MockPacedSenderCallback : public PacedSender::PacketSender { |
28 public: | 28 public: |
29 MOCK_METHOD5(TimeToSendPacket, | 29 MOCK_METHOD5(TimeToSendPacket, |
30 bool(uint32_t ssrc, | 30 bool(uint32_t ssrc, |
31 uint16_t sequence_number, | 31 uint16_t sequence_number, |
32 int64_t capture_time_ms, | 32 int64_t capture_time_ms, |
33 bool retransmission, | 33 bool retransmission, |
34 int probe_cluster_id)); | 34 int probe_cluster_id)); |
35 MOCK_METHOD2(TimeToSendPadding, size_t(size_t bytes, int probe_cluster_id)); | 35 MOCK_METHOD1(TimeToSendPadding, |
| 36 size_t(size_t bytes)); |
36 }; | 37 }; |
37 | 38 |
38 class PacedSenderPadding : public PacedSender::PacketSender { | 39 class PacedSenderPadding : public PacedSender::PacketSender { |
39 public: | 40 public: |
40 PacedSenderPadding() : padding_sent_(0) {} | 41 PacedSenderPadding() : padding_sent_(0) {} |
41 | 42 |
42 bool TimeToSendPacket(uint32_t ssrc, | 43 bool TimeToSendPacket(uint32_t ssrc, |
43 uint16_t sequence_number, | 44 uint16_t sequence_number, |
44 int64_t capture_time_ms, | 45 int64_t capture_time_ms, |
45 bool retransmission, | 46 bool retransmission, |
46 int probe_cluster_id) override { | 47 int probe_cluster_id) override { |
47 return true; | 48 return true; |
48 } | 49 } |
49 | 50 |
50 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) override { | 51 size_t TimeToSendPadding(size_t bytes) override { |
51 const size_t kPaddingPacketSize = 224; | 52 const size_t kPaddingPacketSize = 224; |
52 size_t num_packets = (bytes + kPaddingPacketSize - 1) / kPaddingPacketSize; | 53 size_t num_packets = (bytes + kPaddingPacketSize - 1) / kPaddingPacketSize; |
53 padding_sent_ += kPaddingPacketSize * num_packets; | 54 padding_sent_ += kPaddingPacketSize * num_packets; |
54 return kPaddingPacketSize * num_packets; | 55 return kPaddingPacketSize * num_packets; |
55 } | 56 } |
56 | 57 |
57 size_t padding_sent() { return padding_sent_; } | 58 size_t padding_sent() { return padding_sent_; } |
58 | 59 |
59 private: | 60 private: |
60 size_t padding_sent_; | 61 size_t padding_sent_; |
61 }; | 62 }; |
62 | 63 |
63 class PacedSenderProbing : public PacedSender::PacketSender { | 64 class PacedSenderProbing : public PacedSender::PacketSender { |
64 public: | 65 public: |
65 PacedSenderProbing(const std::list<int>& expected_deltas, Clock* clock) | 66 PacedSenderProbing(const std::list<int>& expected_deltas, Clock* clock) |
66 : prev_packet_time_ms_(-1), | 67 : prev_packet_time_ms_(-1), |
67 expected_deltas_(expected_deltas), | 68 expected_deltas_(expected_deltas), |
68 packets_sent_(0), | 69 packets_sent_(0), |
69 clock_(clock) {} | 70 clock_(clock) {} |
70 | 71 |
71 bool TimeToSendPacket(uint32_t ssrc, | 72 bool TimeToSendPacket(uint32_t ssrc, |
72 uint16_t sequence_number, | 73 uint16_t sequence_number, |
73 int64_t capture_time_ms, | 74 int64_t capture_time_ms, |
74 bool retransmission, | 75 bool retransmission, |
75 int probe_cluster_id) override { | 76 int probe_cluster_id) override { |
76 ExpectAndCountPacket(); | 77 ExpectAndCountPacket(); |
77 return true; | 78 return true; |
78 } | 79 } |
79 | 80 |
80 size_t TimeToSendPadding(size_t bytes, int probe_cluster_id) override { | 81 size_t TimeToSendPadding(size_t bytes) override { |
81 ExpectAndCountPacket(); | 82 ExpectAndCountPacket(); |
82 return bytes; | 83 return bytes; |
83 } | 84 } |
84 | 85 |
85 void ExpectAndCountPacket() { | 86 void ExpectAndCountPacket() { |
86 ++packets_sent_; | 87 ++packets_sent_; |
87 EXPECT_FALSE(expected_deltas_.empty()); | 88 EXPECT_FALSE(expected_deltas_.empty()); |
88 if (expected_deltas_.empty()) | 89 if (expected_deltas_.empty()) |
89 return; | 90 return; |
90 int64_t now_ms = clock_->TimeInMilliseconds(); | 91 int64_t now_ms = clock_->TimeInMilliseconds(); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 clock_.TimeInMilliseconds(), 250, false); | 152 clock_.TimeInMilliseconds(), 250, false); |
152 } | 153 } |
153 | 154 |
154 int64_t queued_packet_timestamp = clock_.TimeInMilliseconds(); | 155 int64_t queued_packet_timestamp = clock_.TimeInMilliseconds(); |
155 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 156 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
156 sequence_number, queued_packet_timestamp, 250, | 157 sequence_number, queued_packet_timestamp, 250, |
157 false); | 158 false); |
158 EXPECT_EQ(packets_to_send + 1, send_bucket_->QueueSizePackets()); | 159 EXPECT_EQ(packets_to_send + 1, send_bucket_->QueueSizePackets()); |
159 send_bucket_->Process(); | 160 send_bucket_->Process(); |
160 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 161 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
161 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 162 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
162 clock_.AdvanceTimeMilliseconds(4); | 163 clock_.AdvanceTimeMilliseconds(4); |
163 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess()); | 164 EXPECT_EQ(1, send_bucket_->TimeUntilNextProcess()); |
164 clock_.AdvanceTimeMilliseconds(1); | 165 clock_.AdvanceTimeMilliseconds(1); |
165 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 166 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
166 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); | 167 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); |
167 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number++, | 168 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, sequence_number++, |
168 queued_packet_timestamp, false, _)) | 169 queued_packet_timestamp, false, _)) |
169 .Times(1) | 170 .Times(1) |
170 .WillRepeatedly(Return(true)); | 171 .WillRepeatedly(Return(true)); |
171 send_bucket_->Process(); | 172 send_bucket_->Process(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 for (size_t j = 0; j < packets_to_send_per_interval * 10; ++j) { | 204 for (size_t j = 0; j < packets_to_send_per_interval * 10; ++j) { |
204 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 205 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
205 sequence_number++, clock_.TimeInMilliseconds(), | 206 sequence_number++, clock_.TimeInMilliseconds(), |
206 250, false); | 207 250, false); |
207 } | 208 } |
208 EXPECT_EQ(packets_to_send_per_interval + packets_to_send_per_interval * 10, | 209 EXPECT_EQ(packets_to_send_per_interval + packets_to_send_per_interval * 10, |
209 send_bucket_->QueueSizePackets()); | 210 send_bucket_->QueueSizePackets()); |
210 send_bucket_->Process(); | 211 send_bucket_->Process(); |
211 EXPECT_EQ(packets_to_send_per_interval * 10, | 212 EXPECT_EQ(packets_to_send_per_interval * 10, |
212 send_bucket_->QueueSizePackets()); | 213 send_bucket_->QueueSizePackets()); |
213 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 214 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
214 for (int k = 0; k < 10; ++k) { | 215 for (int k = 0; k < 10; ++k) { |
215 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 216 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
216 clock_.AdvanceTimeMilliseconds(5); | 217 clock_.AdvanceTimeMilliseconds(5); |
217 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, _, false, _)) | 218 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, _, false, _)) |
218 .Times(packets_to_send_per_interval) | 219 .Times(packets_to_send_per_interval) |
219 .WillRepeatedly(Return(true)); | 220 .WillRepeatedly(Return(true)); |
220 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 221 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
221 send_bucket_->Process(); | 222 send_bucket_->Process(); |
222 } | 223 } |
223 EXPECT_EQ(0u, send_bucket_->QueueSizePackets()); | 224 EXPECT_EQ(0u, send_bucket_->QueueSizePackets()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 | 257 |
257 for (size_t j = 0; j < packets_to_send_per_interval * 10; ++j) { | 258 for (size_t j = 0; j < packets_to_send_per_interval * 10; ++j) { |
258 // Send in duplicate packets. | 259 // Send in duplicate packets. |
259 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 260 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
260 sequence_number, clock_.TimeInMilliseconds(), | 261 sequence_number, clock_.TimeInMilliseconds(), |
261 250, false); | 262 250, false); |
262 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 263 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
263 sequence_number++, clock_.TimeInMilliseconds(), | 264 sequence_number++, clock_.TimeInMilliseconds(), |
264 250, false); | 265 250, false); |
265 } | 266 } |
266 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 267 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
267 send_bucket_->Process(); | 268 send_bucket_->Process(); |
268 for (int k = 0; k < 10; ++k) { | 269 for (int k = 0; k < 10; ++k) { |
269 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 270 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
270 clock_.AdvanceTimeMilliseconds(5); | 271 clock_.AdvanceTimeMilliseconds(5); |
271 | 272 |
272 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | 273 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { |
273 EXPECT_CALL(callback_, | 274 EXPECT_CALL(callback_, |
274 TimeToSendPacket(ssrc, queued_sequence_number++, _, false, _)) | 275 TimeToSendPacket(ssrc, queued_sequence_number++, _, false, _)) |
275 .Times(1) | 276 .Times(1) |
276 .WillRepeatedly(Return(true)); | 277 .WillRepeatedly(Return(true)); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 // Due to the multiplicative factor we can send 5 packets during a send | 328 // Due to the multiplicative factor we can send 5 packets during a send |
328 // interval. (network capacity * multiplier / (8 bits per byte * | 329 // interval. (network capacity * multiplier / (8 bits per byte * |
329 // (packet size * #send intervals per second) | 330 // (packet size * #send intervals per second) |
330 const size_t packets_to_send_per_interval = | 331 const size_t packets_to_send_per_interval = |
331 kTargetBitrateBps * PacedSender::kDefaultPaceMultiplier / (8 * 250 * 200); | 332 kTargetBitrateBps * PacedSender::kDefaultPaceMultiplier / (8 * 250 * 200); |
332 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | 333 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { |
333 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, | 334 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, |
334 clock_.TimeInMilliseconds(), 250, false); | 335 clock_.TimeInMilliseconds(), 250, false); |
335 } | 336 } |
336 // No padding is expected since we have sent too much already. | 337 // No padding is expected since we have sent too much already. |
337 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 338 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
338 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 339 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
339 send_bucket_->Process(); | 340 send_bucket_->Process(); |
340 EXPECT_EQ(0u, send_bucket_->QueueSizePackets()); | 341 EXPECT_EQ(0u, send_bucket_->QueueSizePackets()); |
341 | 342 |
342 // 5 milliseconds later should not send padding since we filled the buffers | 343 // 5 milliseconds later should not send padding since we filled the buffers |
343 // initially. | 344 // initially. |
344 EXPECT_CALL(callback_, TimeToSendPadding(250, _)).Times(0); | 345 EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(0); |
345 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 346 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
346 clock_.AdvanceTimeMilliseconds(5); | 347 clock_.AdvanceTimeMilliseconds(5); |
347 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 348 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
348 send_bucket_->Process(); | 349 send_bucket_->Process(); |
349 | 350 |
350 // 5 milliseconds later we have enough budget to send some padding. | 351 // 5 milliseconds later we have enough budget to send some padding. |
351 EXPECT_CALL(callback_, TimeToSendPadding(250, _)) | 352 EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1). |
352 .Times(1) | 353 WillOnce(Return(250)); |
353 .WillOnce(Return(250)); | |
354 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 354 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
355 clock_.AdvanceTimeMilliseconds(5); | 355 clock_.AdvanceTimeMilliseconds(5); |
356 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 356 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
357 send_bucket_->Process(); | 357 send_bucket_->Process(); |
358 } | 358 } |
359 | 359 |
360 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) { | 360 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) { |
361 uint32_t ssrc = 12345; | 361 uint32_t ssrc = 12345; |
362 uint16_t sequence_number = 1234; | 362 uint16_t sequence_number = 1234; |
363 int64_t capture_time_ms = 56789; | 363 int64_t capture_time_ms = 56789; |
364 const int kTimeStep = 5; | 364 const int kTimeStep = 5; |
365 const int64_t kBitrateWindow = 100; | 365 const int64_t kBitrateWindow = 100; |
366 send_bucket_->SetEstimatedBitrate(kTargetBitrateBps); | 366 send_bucket_->SetEstimatedBitrate(kTargetBitrateBps); |
367 send_bucket_->SetAllocatedSendBitrate(kTargetBitrateBps, kTargetBitrateBps); | 367 send_bucket_->SetAllocatedSendBitrate(kTargetBitrateBps, kTargetBitrateBps); |
368 | 368 |
369 int64_t start_time = clock_.TimeInMilliseconds(); | 369 int64_t start_time = clock_.TimeInMilliseconds(); |
370 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) { | 370 while (clock_.TimeInMilliseconds() - start_time < kBitrateWindow) { |
371 SendAndExpectPacket(PacedSender::kNormalPriority, | 371 SendAndExpectPacket(PacedSender::kNormalPriority, |
372 ssrc, | 372 ssrc, |
373 sequence_number++, | 373 sequence_number++, |
374 capture_time_ms, | 374 capture_time_ms, |
375 250, | 375 250, |
376 false); | 376 false); |
377 EXPECT_CALL(callback_, TimeToSendPadding(250, _)) | 377 EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1). |
378 .Times(1) | 378 WillOnce(Return(250)); |
379 .WillOnce(Return(250)); | |
380 send_bucket_->Process(); | 379 send_bucket_->Process(); |
381 clock_.AdvanceTimeMilliseconds(kTimeStep); | 380 clock_.AdvanceTimeMilliseconds(kTimeStep); |
382 } | 381 } |
383 } | 382 } |
384 | 383 |
385 TEST_F(PacedSenderTest, VerifyAverageBitrateVaryingMediaPayload) { | 384 TEST_F(PacedSenderTest, VerifyAverageBitrateVaryingMediaPayload) { |
386 uint32_t ssrc = 12345; | 385 uint32_t ssrc = 12345; |
387 uint16_t sequence_number = 1234; | 386 uint16_t sequence_number = 1234; |
388 int64_t capture_time_ms = 56789; | 387 int64_t capture_time_ms = 56789; |
389 const int kTimeStep = 5; | 388 const int kTimeStep = 5; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 250, false); | 436 250, false); |
438 | 437 |
439 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { | 438 for (size_t i = 0; i < packets_to_send_per_interval; ++i) { |
440 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 439 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
441 sequence_number++, capture_time_ms, 250, false); | 440 sequence_number++, capture_time_ms, 250, false); |
442 } | 441 } |
443 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc, | 442 send_bucket_->InsertPacket(PacedSender::kHighPriority, ssrc, |
444 sequence_number++, capture_time_ms, 250, false); | 443 sequence_number++, capture_time_ms, 250, false); |
445 | 444 |
446 // Expect all high and normal priority to be sent out first. | 445 // Expect all high and normal priority to be sent out first. |
447 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 446 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
448 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, capture_time_ms, false, _)) | 447 EXPECT_CALL(callback_, TimeToSendPacket(ssrc, _, capture_time_ms, false, _)) |
449 .Times(packets_to_send_per_interval + 1) | 448 .Times(packets_to_send_per_interval + 1) |
450 .WillRepeatedly(Return(true)); | 449 .WillRepeatedly(Return(true)); |
451 | 450 |
452 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); | 451 EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess()); |
453 clock_.AdvanceTimeMilliseconds(5); | 452 clock_.AdvanceTimeMilliseconds(5); |
454 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 453 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
455 send_bucket_->Process(); | 454 send_bucket_->Process(); |
456 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); | 455 EXPECT_EQ(1u, send_bucket_->QueueSizePackets()); |
457 | 456 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 | 538 |
540 // Expect everything to be queued. | 539 // Expect everything to be queued. |
541 send_bucket_->InsertPacket(PacedSender::kLowPriority, ssrc_low_priority, | 540 send_bucket_->InsertPacket(PacedSender::kLowPriority, ssrc_low_priority, |
542 sequence_number++, second_capture_time_ms, 250, | 541 sequence_number++, second_capture_time_ms, 250, |
543 false); | 542 false); |
544 | 543 |
545 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms, | 544 EXPECT_EQ(clock_.TimeInMilliseconds() - capture_time_ms, |
546 send_bucket_->QueueInMs()); | 545 send_bucket_->QueueInMs()); |
547 | 546 |
548 // Expect no packet to come out while paused. | 547 // Expect no packet to come out while paused. |
549 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 548 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
550 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, _)).Times(0); | 549 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, _)).Times(0); |
551 | 550 |
552 for (int i = 0; i < 10; ++i) { | 551 for (int i = 0; i < 10; ++i) { |
553 clock_.AdvanceTimeMilliseconds(5); | 552 clock_.AdvanceTimeMilliseconds(5); |
554 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); | 553 EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess()); |
555 send_bucket_->Process(); | 554 send_bucket_->Process(); |
556 } | 555 } |
557 // Expect high prio packets to come out first followed by all packets in the | 556 // Expect high prio packets to come out first followed by all packets in the |
558 // way they were added. | 557 // way they were added. |
559 EXPECT_CALL(callback_, TimeToSendPacket(_, _, capture_time_ms, false, _)) | 558 EXPECT_CALL(callback_, TimeToSendPacket(_, _, capture_time_ms, false, _)) |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
814 | 813 |
815 // Add 30kbit padding. When increasing budget, media budget will increase from | 814 // Add 30kbit padding. When increasing budget, media budget will increase from |
816 // negative (overuse) while padding budget will increase from 0. | 815 // negative (overuse) while padding budget will increase from 0. |
817 clock_.AdvanceTimeMilliseconds(5); | 816 clock_.AdvanceTimeMilliseconds(5); |
818 send_bucket_->SetAllocatedSendBitrate(60000, 30000); | 817 send_bucket_->SetAllocatedSendBitrate(60000, 30000); |
819 | 818 |
820 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, | 819 SendAndExpectPacket(PacedSender::kNormalPriority, ssrc, sequence_number++, |
821 clock_.TimeInMilliseconds(), kPacketSize, false); | 820 clock_.TimeInMilliseconds(), kPacketSize, false); |
822 EXPECT_LT(5u, send_bucket_->ExpectedQueueTimeMs()); | 821 EXPECT_LT(5u, send_bucket_->ExpectedQueueTimeMs()); |
823 // Don't send padding if queue is non-empty, even if padding budget > 0. | 822 // Don't send padding if queue is non-empty, even if padding budget > 0. |
824 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(0); | 823 EXPECT_CALL(callback_, TimeToSendPadding(_)).Times(0); |
825 send_bucket_->Process(); | 824 send_bucket_->Process(); |
826 } | 825 } |
827 | 826 |
828 TEST_F(PacedSenderTest, AverageQueueTime) { | 827 TEST_F(PacedSenderTest, AverageQueueTime) { |
829 uint32_t ssrc = 12346; | 828 uint32_t ssrc = 12346; |
830 uint16_t sequence_number = 1234; | 829 uint16_t sequence_number = 1234; |
831 const size_t kPacketSize = 1200; | 830 const size_t kPacketSize = 1200; |
832 const int kBitrateBps = 10 * kPacketSize * 8; // 10 packets per second. | 831 const int kBitrateBps = 10 * kPacketSize * 8; // 10 packets per second. |
833 | 832 |
834 send_bucket_->SetEstimatedBitrate(kBitrateBps); | 833 send_bucket_->SetEstimatedBitrate(kBitrateBps); |
(...skipping 28 matching lines...) Expand all Loading... |
863 .Times(1) | 862 .Times(1) |
864 .WillRepeatedly(Return(true)); | 863 .WillRepeatedly(Return(true)); |
865 for (int i = 0; i < 3; ++i) { | 864 for (int i = 0; i < 3; ++i) { |
866 clock_.AdvanceTimeMilliseconds(30); // Max delta. | 865 clock_.AdvanceTimeMilliseconds(30); // Max delta. |
867 send_bucket_->Process(); | 866 send_bucket_->Process(); |
868 } | 867 } |
869 | 868 |
870 EXPECT_EQ(0, send_bucket_->AverageQueueTimeMs()); | 869 EXPECT_EQ(0, send_bucket_->AverageQueueTimeMs()); |
871 } | 870 } |
872 | 871 |
873 TEST_F(PacedSenderTest, DISABLED_ProbeClusterId) { | 872 TEST_F(PacedSenderTest, ProbeClusterId) { |
874 uint32_t ssrc = 12346; | 873 uint32_t ssrc = 12346; |
875 uint16_t sequence_number = 1234; | 874 uint16_t sequence_number = 1234; |
876 const size_t kPacketSize = 1200; | 875 const size_t kPacketSize = 1200; |
877 | 876 |
878 send_bucket_->SetProbingEnabled(true); | 877 send_bucket_->SetProbingEnabled(true); |
879 for (int i = 0; i < 11; ++i) { | 878 for (int i = 0; i < 11; ++i) { |
880 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, | 879 send_bucket_->InsertPacket(PacedSender::kNormalPriority, ssrc, |
881 sequence_number + i, clock_.TimeInMilliseconds(), | 880 sequence_number + i, clock_.TimeInMilliseconds(), |
882 kPacketSize, false); | 881 kPacketSize, false); |
883 } | 882 } |
884 | 883 |
885 // First probing cluster. | 884 // First probing cluster. |
886 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 0)) | 885 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 0)) |
887 .Times(6) | 886 .Times(6) |
888 .WillRepeatedly(Return(true)); | 887 .WillRepeatedly(Return(true)); |
889 for (int i = 0; i < 6; ++i) | 888 for (int i = 0; i < 6; ++i) |
890 send_bucket_->Process(); | 889 send_bucket_->Process(); |
891 | 890 |
892 // Second probing cluster. | 891 // Second probing cluster. |
893 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 1)) | 892 EXPECT_CALL(callback_, TimeToSendPacket(_, _, _, _, 1)) |
894 .Times(5) | 893 .Times(5) |
895 .WillRepeatedly(Return(true)); | 894 .WillRepeatedly(Return(true)); |
896 for (int i = 0; i < 5; ++i) | 895 for (int i = 0; i < 5; ++i) |
897 send_bucket_->Process(); | 896 send_bucket_->Process(); |
898 | 897 |
899 // No more probing packets. | 898 // No more probing packets. |
900 EXPECT_CALL(callback_, TimeToSendPadding(_, _)).Times(1); | 899 EXPECT_CALL(callback_, TimeToSendPadding(_)) |
| 900 .Times(1); |
901 send_bucket_->Process(); | 901 send_bucket_->Process(); |
902 } | 902 } |
903 | 903 |
904 } // namespace test | 904 } // namespace test |
905 } // namespace webrtc | 905 } // namespace webrtc |
OLD | NEW |