Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 1419193002: Call OnSentPacket for all packets sent in the test framework. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: . Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 <algorithm> 10 #include <algorithm>
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 return false; 74 return false;
75 } 75 }
76 }; 76 };
77 77
78 void DecodesRetransmittedFrame(bool use_rtx, bool use_red); 78 void DecodesRetransmittedFrame(bool use_rtx, bool use_red);
79 void ReceivesPliAndRecovers(int rtp_history_ms); 79 void ReceivesPliAndRecovers(int rtp_history_ms);
80 void RespectsRtcpMode(RtcpMode rtcp_mode); 80 void RespectsRtcpMode(RtcpMode rtcp_mode);
81 void TestXrReceiverReferenceTimeReport(bool enable_rrtr); 81 void TestXrReceiverReferenceTimeReport(bool enable_rrtr);
82 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first); 82 void TestSendsSetSsrcs(size_t num_ssrcs, bool send_single_ssrc_first);
83 void TestRtpStatePreservation(bool use_rtx); 83 void TestRtpStatePreservation(bool use_rtx);
84 void TestReceivedFecPacketsNotNacked(const FakeNetworkPipe::Config& config);
85 void VerifyHistogramStats(bool use_rtx, bool use_red); 84 void VerifyHistogramStats(bool use_rtx, bool use_red);
86 }; 85 };
87 86
88 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { 87 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) {
89 CreateCalls(Call::Config(), Call::Config()); 88 CreateCalls(Call::Config(), Call::Config());
90 89
91 test::NullTransport transport; 90 test::NullTransport transport;
92 CreateSendConfig(1, &transport); 91 CreateSendConfig(1, &transport);
93 CreateMatchingReceiveConfigs(&transport); 92 CreateMatchingReceiveConfigs(&transport);
94 93
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 void FrameCallback(VideoFrame* frame) override { 148 void FrameCallback(VideoFrame* frame) override {
150 SleepMs(kDelayRenderCallbackMs); 149 SleepMs(kDelayRenderCallbackMs);
151 event_->Set(); 150 event_->Set();
152 } 151 }
153 152
154 rtc::scoped_ptr<EventWrapper> event_; 153 rtc::scoped_ptr<EventWrapper> event_;
155 }; 154 };
156 155
157 CreateCalls(Call::Config(), Call::Config()); 156 CreateCalls(Call::Config(), Call::Config());
158 157
159 test::DirectTransport sender_transport, receiver_transport; 158 test::DirectTransport sender_transport(sender_call_.get());
159 test::DirectTransport receiver_transport(receiver_call_.get());
160 sender_transport.SetReceiver(receiver_call_->Receiver()); 160 sender_transport.SetReceiver(receiver_call_->Receiver());
161 receiver_transport.SetReceiver(sender_call_->Receiver()); 161 receiver_transport.SetReceiver(sender_call_->Receiver());
162 162
163 CreateSendConfig(1, &sender_transport); 163 CreateSendConfig(1, &sender_transport);
164 CreateMatchingReceiveConfigs(&receiver_transport); 164 CreateMatchingReceiveConfigs(&receiver_transport);
165 165
166 TestFrameCallback pre_render_callback; 166 TestFrameCallback pre_render_callback;
167 receive_configs_[0].pre_render_callback = &pre_render_callback; 167 receive_configs_[0].pre_render_callback = &pre_render_callback;
168 receive_configs_[0].renderer = &renderer; 168 receive_configs_[0].renderer = &renderer;
169 169
(...skipping 29 matching lines...) Expand all
199 } 199 }
200 bool IsTextureSupported() const override { return false; } 200 bool IsTextureSupported() const override { return false; }
201 201
202 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); } 202 EventTypeWrapper Wait() { return event_->Wait(kDefaultTimeoutMs); }
203 203
204 rtc::scoped_ptr<EventWrapper> event_; 204 rtc::scoped_ptr<EventWrapper> event_;
205 } renderer; 205 } renderer;
206 206
207 CreateCalls(Call::Config(), Call::Config()); 207 CreateCalls(Call::Config(), Call::Config());
208 208
209 test::DirectTransport sender_transport, receiver_transport; 209 test::DirectTransport sender_transport(sender_call_.get());
210 test::DirectTransport receiver_transport(receiver_call_.get());
210 sender_transport.SetReceiver(receiver_call_->Receiver()); 211 sender_transport.SetReceiver(receiver_call_->Receiver());
211 receiver_transport.SetReceiver(sender_call_->Receiver()); 212 receiver_transport.SetReceiver(sender_call_->Receiver());
212 213
213 CreateSendConfig(1, &sender_transport); 214 CreateSendConfig(1, &sender_transport);
214 CreateMatchingReceiveConfigs(&receiver_transport); 215 CreateMatchingReceiveConfigs(&receiver_transport);
215 receive_configs_[0].renderer = &renderer; 216 receive_configs_[0].renderer = &renderer;
216 217
217 CreateStreams(); 218 CreateStreams();
218 Start(); 219 Start();
219 220
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 } 275 }
275 276
276 bool IsTextureSupported() const override { return false; } 277 bool IsTextureSupported() const override { return false; }
277 278
278 private: 279 private:
279 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_; 280 rtc::scoped_ptr<webrtc::VideoEncoder> encoder_;
280 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_; 281 rtc::scoped_ptr<webrtc::VideoDecoder> decoder_;
281 int frame_counter_; 282 int frame_counter_;
282 } test; 283 } test;
283 284
284 RunBaseTest(&test); 285 RunBaseTest(&test, FakeNetworkPipe::Config());
285 } 286 }
286 287
287 TEST_F(EndToEndTest, SendsAndReceivesH264) { 288 TEST_F(EndToEndTest, SendsAndReceivesH264) {
288 class H264Observer : public test::EndToEndTest, public VideoRenderer { 289 class H264Observer : public test::EndToEndTest, public VideoRenderer {
289 public: 290 public:
290 H264Observer() 291 H264Observer()
291 : EndToEndTest(2 * kDefaultTimeoutMs), 292 : EndToEndTest(2 * kDefaultTimeoutMs),
292 fake_encoder_(Clock::GetRealTimeClock()), 293 fake_encoder_(Clock::GetRealTimeClock()),
293 frame_counter_(0) {} 294 frame_counter_(0) {}
294 295
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 } 327 }
327 328
328 bool IsTextureSupported() const override { return false; } 329 bool IsTextureSupported() const override { return false; }
329 330
330 private: 331 private:
331 test::FakeH264Decoder fake_decoder_; 332 test::FakeH264Decoder fake_decoder_;
332 test::FakeH264Encoder fake_encoder_; 333 test::FakeH264Encoder fake_encoder_;
333 int frame_counter_; 334 int frame_counter_;
334 } test; 335 } test;
335 336
336 RunBaseTest(&test); 337 RunBaseTest(&test, FakeNetworkPipe::Config());
337 } 338 }
338 339
339 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) { 340 TEST_F(EndToEndTest, ReceiverUsesLocalSsrc) {
340 class SyncRtcpObserver : public test::EndToEndTest { 341 class SyncRtcpObserver : public test::EndToEndTest {
341 public: 342 public:
342 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {} 343 SyncRtcpObserver() : EndToEndTest(kDefaultTimeoutMs) {}
343 344
344 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 345 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
345 RTCPUtility::RTCPParserV2 parser(packet, length, true); 346 RTCPUtility::RTCPParserV2 parser(packet, length, true);
346 EXPECT_TRUE(parser.IsValid()); 347 EXPECT_TRUE(parser.IsValid());
347 uint32_t ssrc = 0; 348 uint32_t ssrc = 0;
348 ssrc |= static_cast<uint32_t>(packet[4]) << 24; 349 ssrc |= static_cast<uint32_t>(packet[4]) << 24;
349 ssrc |= static_cast<uint32_t>(packet[5]) << 16; 350 ssrc |= static_cast<uint32_t>(packet[5]) << 16;
350 ssrc |= static_cast<uint32_t>(packet[6]) << 8; 351 ssrc |= static_cast<uint32_t>(packet[6]) << 8;
351 ssrc |= static_cast<uint32_t>(packet[7]) << 0; 352 ssrc |= static_cast<uint32_t>(packet[7]) << 0;
352 EXPECT_EQ(kReceiverLocalSsrc, ssrc); 353 EXPECT_EQ(kReceiverLocalSsrc, ssrc);
353 observation_complete_->Set(); 354 observation_complete_->Set();
354 355
355 return SEND_PACKET; 356 return SEND_PACKET;
356 } 357 }
357 358
358 void PerformTest() override { 359 void PerformTest() override {
359 EXPECT_EQ(kEventSignaled, Wait()) 360 EXPECT_EQ(kEventSignaled, Wait())
360 << "Timed out while waiting for a receiver RTCP packet to be sent."; 361 << "Timed out while waiting for a receiver RTCP packet to be sent.";
361 } 362 }
362 } test; 363 } test;
363 364
364 RunBaseTest(&test); 365 RunBaseTest(&test, FakeNetworkPipe::Config());
365 } 366 }
366 367
367 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) { 368 TEST_F(EndToEndTest, ReceivesAndRetransmitsNack) {
368 static const int kNumberOfNacksToObserve = 2; 369 static const int kNumberOfNacksToObserve = 2;
369 static const int kLossBurstSize = 2; 370 static const int kLossBurstSize = 2;
370 static const int kPacketsBetweenLossBursts = 9; 371 static const int kPacketsBetweenLossBursts = 9;
371 class NackObserver : public test::EndToEndTest { 372 class NackObserver : public test::EndToEndTest {
372 public: 373 public:
373 NackObserver() 374 NackObserver()
374 : EndToEndTest(kLongTimeoutMs), 375 : EndToEndTest(kLongTimeoutMs),
375 rtp_parser_(RtpHeaderParser::Create()), 376 rtp_parser_(RtpHeaderParser::Create()),
376 sent_rtp_packets_(0), 377 sent_rtp_packets_(0),
377 packets_left_to_drop_(0), 378 packets_left_to_drop_(0),
378 nacks_left_(kNumberOfNacksToObserve) {} 379 nacks_left_(kNumberOfNacksToObserve) {}
379 380
380 private: 381 private:
381 Action OnSendRtp(const uint8_t* packet, size_t length) override { 382 Action OnSendRtp(const uint8_t* packet, size_t length) override {
383 rtc::CritScope lock(&crit_);
382 RTPHeader header; 384 RTPHeader header;
383 EXPECT_TRUE(rtp_parser_->Parse(packet, length, &header)); 385 EXPECT_TRUE(rtp_parser_->Parse(packet, length, &header));
384 386
385 // Never drop retransmitted packets. 387 // Never drop retransmitted packets.
386 if (dropped_packets_.find(header.sequenceNumber) != 388 if (dropped_packets_.find(header.sequenceNumber) !=
387 dropped_packets_.end()) { 389 dropped_packets_.end()) {
388 retransmitted_packets_.insert(header.sequenceNumber); 390 retransmitted_packets_.insert(header.sequenceNumber);
389 if (nacks_left_ <= 0 && 391 if (nacks_left_ <= 0 &&
390 retransmitted_packets_.size() == dropped_packets_.size()) { 392 retransmitted_packets_.size() == dropped_packets_.size()) {
391 observation_complete_->Set(); 393 observation_complete_->Set();
(...skipping 15 matching lines...) Expand all
407 if (packets_left_to_drop_ > 0 && header.paddingLength == 0) { 409 if (packets_left_to_drop_ > 0 && header.paddingLength == 0) {
408 --packets_left_to_drop_; 410 --packets_left_to_drop_;
409 dropped_packets_.insert(header.sequenceNumber); 411 dropped_packets_.insert(header.sequenceNumber);
410 return DROP_PACKET; 412 return DROP_PACKET;
411 } 413 }
412 414
413 return SEND_PACKET; 415 return SEND_PACKET;
414 } 416 }
415 417
416 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 418 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
419 rtc::CritScope lock(&crit_);
417 RTCPUtility::RTCPParserV2 parser(packet, length, true); 420 RTCPUtility::RTCPParserV2 parser(packet, length, true);
418 EXPECT_TRUE(parser.IsValid()); 421 EXPECT_TRUE(parser.IsValid());
419 422
420 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 423 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
421 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 424 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
422 if (packet_type == RTCPUtility::RTCPPacketTypes::kRtpfbNack) { 425 if (packet_type == RTCPUtility::RTCPPacketTypes::kRtpfbNack) {
423 --nacks_left_; 426 --nacks_left_;
424 break; 427 break;
425 } 428 }
426 packet_type = parser.Iterate(); 429 packet_type = parser.Iterate();
427 } 430 }
428 return SEND_PACKET; 431 return SEND_PACKET;
429 } 432 }
430 433
431 void ModifyConfigs(VideoSendStream::Config* send_config, 434 void ModifyConfigs(VideoSendStream::Config* send_config,
432 std::vector<VideoReceiveStream::Config>* receive_configs, 435 std::vector<VideoReceiveStream::Config>* receive_configs,
433 VideoEncoderConfig* encoder_config) override { 436 VideoEncoderConfig* encoder_config) override {
434 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 437 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
435 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 438 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
436 } 439 }
437 440
438 void PerformTest() override { 441 void PerformTest() override {
439 EXPECT_EQ(kEventSignaled, Wait()) 442 EXPECT_EQ(kEventSignaled, Wait())
440 << "Timed out waiting for packets to be NACKed, retransmitted and " 443 << "Timed out waiting for packets to be NACKed, retransmitted and "
441 "rendered."; 444 "rendered.";
442 } 445 }
443 446
447 rtc::CriticalSection crit_;
pbos-webrtc 2015/10/27 14:06:30 annotate
stefan-webrtc 2015/10/27 14:33:16 Done.
444 rtc::scoped_ptr<RtpHeaderParser> rtp_parser_; 448 rtc::scoped_ptr<RtpHeaderParser> rtp_parser_;
445 std::set<uint16_t> dropped_packets_; 449 std::set<uint16_t> dropped_packets_;
446 std::set<uint16_t> retransmitted_packets_; 450 std::set<uint16_t> retransmitted_packets_;
447 uint64_t sent_rtp_packets_; 451 uint64_t sent_rtp_packets_;
448 int packets_left_to_drop_; 452 int packets_left_to_drop_;
449 int nacks_left_; 453 int nacks_left_;
450 } test; 454 } test;
451 455
452 RunBaseTest(&test); 456 RunBaseTest(&test, FakeNetworkPipe::Config());
453 } 457 }
454 458
455 TEST_F(EndToEndTest, CanReceiveFec) { 459 TEST_F(EndToEndTest, CanReceiveFec) {
456 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer { 460 class FecRenderObserver : public test::EndToEndTest, public VideoRenderer {
457 public: 461 public:
458 FecRenderObserver() 462 FecRenderObserver()
459 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {} 463 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
460 464
461 private: 465 private:
462 Action OnSendRtp(const uint8_t* packet, size_t length) override 466 Action OnSendRtp(const uint8_t* packet, size_t length) override {
463 EXCLUSIVE_LOCKS_REQUIRED(crit_) { 467 rtc::CritScope lock(&crit_);
464 RTPHeader header; 468 RTPHeader header;
465 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 469 EXPECT_TRUE(parser_->Parse(packet, length, &header));
466 470
467 int encapsulated_payload_type = -1; 471 int encapsulated_payload_type = -1;
468 if (header.payloadType == kRedPayloadType) { 472 if (header.payloadType == kRedPayloadType) {
469 encapsulated_payload_type = 473 encapsulated_payload_type =
470 static_cast<int>(packet[header.headerLength]); 474 static_cast<int>(packet[header.headerLength]);
471 if (encapsulated_payload_type != kFakeSendPayloadType) 475 if (encapsulated_payload_type != kFakeSendPayloadType)
472 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type); 476 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
473 } else { 477 } else {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; 541 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
538 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; 542 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType;
539 (*receive_configs)[0].renderer = this; 543 (*receive_configs)[0].renderer = this;
540 } 544 }
541 545
542 void PerformTest() override { 546 void PerformTest() override {
543 EXPECT_EQ(kEventSignaled, Wait()) 547 EXPECT_EQ(kEventSignaled, Wait())
544 << "Timed out waiting for dropped frames frames to be rendered."; 548 << "Timed out waiting for dropped frames frames to be rendered.";
545 } 549 }
546 550
551 rtc::CriticalSection crit_;
547 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_); 552 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_);
548 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_); 553 std::set<uint32_t> protected_timestamps_ GUARDED_BY(crit_);
549 } test; 554 } test;
550 555
551 RunBaseTest(&test); 556 RunBaseTest(&test, FakeNetworkPipe::Config());
552 } 557 }
553 558
554 // Flacky on all platforms. See webrtc:4328. 559 // Flacky on all platforms. See webrtc:4328.
555 TEST_F(EndToEndTest, DISABLED_ReceivedFecPacketsNotNacked) { 560 TEST_F(EndToEndTest, DISABLED_ReceivedFecPacketsNotNacked) {
556 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
557 // Configure some network delay.
558 const int kNetworkDelayMs = 50;
559 FakeNetworkPipe::Config config;
560 config.queue_delay_ms = kNetworkDelayMs;
561 TestReceivedFecPacketsNotNacked(config);
562 }
563
564 void EndToEndTest::TestReceivedFecPacketsNotNacked(
565 const FakeNetworkPipe::Config& config) {
566 class FecNackObserver : public test::EndToEndTest { 561 class FecNackObserver : public test::EndToEndTest {
567 public: 562 public:
568 explicit FecNackObserver(const FakeNetworkPipe::Config& config) 563 explicit FecNackObserver()
569 : EndToEndTest(kDefaultTimeoutMs, config), 564 : EndToEndTest(kDefaultTimeoutMs),
570 state_(kFirstPacket), 565 state_(kFirstPacket),
571 fec_sequence_number_(0), 566 fec_sequence_number_(0),
572 has_last_sequence_number_(false), 567 has_last_sequence_number_(false),
573 last_sequence_number_(0) {} 568 last_sequence_number_(0) {}
574 569
575 private: 570 private:
576 Action OnSendRtp(const uint8_t* packet, size_t length) override { 571 Action OnSendRtp(const uint8_t* packet, size_t length) override {
577 RTPHeader header; 572 RTPHeader header;
578 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 573 EXPECT_TRUE(parser_->Parse(packet, length, &header));
579 574
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 enum { 662 enum {
668 kFirstPacket, 663 kFirstPacket,
669 kDropEveryOtherPacketUntilFec, 664 kDropEveryOtherPacketUntilFec,
670 kDropAllMediaPacketsUntilFec, 665 kDropAllMediaPacketsUntilFec,
671 kVerifyFecPacketNotInNackList, 666 kVerifyFecPacketNotInNackList,
672 } state_; 667 } state_;
673 668
674 uint16_t fec_sequence_number_; 669 uint16_t fec_sequence_number_;
675 bool has_last_sequence_number_; 670 bool has_last_sequence_number_;
676 uint16_t last_sequence_number_; 671 uint16_t last_sequence_number_;
677 } test(config); 672 } test;
678 673
679 RunBaseTest(&test); 674 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
675 // Configure some network delay.
676 const int kNetworkDelayMs = 50;
677 FakeNetworkPipe::Config config;
678 config.queue_delay_ms = kNetworkDelayMs;
679 RunBaseTest(&test, config);
680 } 680 }
681 681
682 // This test drops second RTP packet with a marker bit set, makes sure it's 682 // This test drops second RTP packet with a marker bit set, makes sure it's
683 // retransmitted and renders. Retransmission SSRCs are also checked. 683 // retransmitted and renders. Retransmission SSRCs are also checked.
684 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) { 684 void EndToEndTest::DecodesRetransmittedFrame(bool use_rtx, bool use_red) {
685 // Must be set high enough to allow the bitrate probing to finish. 685 // Must be set high enough to allow the bitrate probing to finish.
686 static const int kMinProbePackets = 30; 686 static const int kMinProbePackets = 30;
687 static const int kDroppedFrameNumber = kMinProbePackets + 1; 687 static const int kDroppedFrameNumber = kMinProbePackets + 1;
688 class RetransmissionObserver : public test::EndToEndTest, 688 class RetransmissionObserver : public test::EndToEndTest,
689 public I420FrameCallback { 689 public I420FrameCallback {
690 public: 690 public:
691 explicit RetransmissionObserver(bool use_rtx, bool use_red) 691 explicit RetransmissionObserver(bool use_rtx, bool use_red)
692 : EndToEndTest(kDefaultTimeoutMs), 692 : EndToEndTest(kDefaultTimeoutMs),
693 payload_type_(GetPayloadType(false, use_red)), 693 payload_type_(GetPayloadType(false, use_red)),
694 retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kSendSsrcs[0]), 694 retransmission_ssrc_(use_rtx ? kSendRtxSsrcs[0] : kSendSsrcs[0]),
695 retransmission_payload_type_(GetPayloadType(use_rtx, use_red)), 695 retransmission_payload_type_(GetPayloadType(use_rtx, use_red)),
696 marker_bits_observed_(0), 696 marker_bits_observed_(0),
697 num_packets_observed_(0), 697 num_packets_observed_(0),
698 retransmitted_timestamp_(0), 698 retransmitted_timestamp_(0),
699 frame_retransmitted_(false) {} 699 frame_retransmitted_(false) {}
700 700
701 private: 701 private:
702 Action OnSendRtp(const uint8_t* packet, size_t length) override { 702 Action OnSendRtp(const uint8_t* packet, size_t length) override {
703 rtc::CritScope lock(&crit_);
703 RTPHeader header; 704 RTPHeader header;
704 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 705 EXPECT_TRUE(parser_->Parse(packet, length, &header));
705 706
706 // We accept some padding or RTX packets in the beginning to enable 707 // We accept some padding or RTX packets in the beginning to enable
707 // bitrate probing. 708 // bitrate probing.
708 if (num_packets_observed_++ < kMinProbePackets && 709 if (num_packets_observed_++ < kMinProbePackets &&
709 header.payloadType != payload_type_) { 710 header.payloadType != payload_type_) {
710 EXPECT_TRUE(retransmission_payload_type_ == header.payloadType || 711 EXPECT_TRUE(retransmission_payload_type_ == header.payloadType ||
711 length == header.headerLength + header.paddingLength); 712 length == header.headerLength + header.paddingLength);
712 return SEND_PACKET; 713 return SEND_PACKET;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 void PerformTest() override { 767 void PerformTest() override {
767 EXPECT_EQ(kEventSignaled, Wait()) 768 EXPECT_EQ(kEventSignaled, Wait())
768 << "Timed out while waiting for retransmission to render."; 769 << "Timed out while waiting for retransmission to render.";
769 } 770 }
770 771
771 int GetPayloadType(bool use_rtx, bool use_red) { 772 int GetPayloadType(bool use_rtx, bool use_red) {
772 return use_rtx ? kSendRtxPayloadType 773 return use_rtx ? kSendRtxPayloadType
773 : (use_red ? kRedPayloadType : kFakeSendPayloadType); 774 : (use_red ? kRedPayloadType : kFakeSendPayloadType);
774 } 775 }
775 776
777 rtc::CriticalSection crit_;
pbos-webrtc 2015/10/27 14:06:30 guarded_by
stefan-webrtc 2015/10/27 14:33:16 Done.
776 const int payload_type_; 778 const int payload_type_;
777 const uint32_t retransmission_ssrc_; 779 const uint32_t retransmission_ssrc_;
778 const int retransmission_payload_type_; 780 const int retransmission_payload_type_;
779 int marker_bits_observed_; 781 int marker_bits_observed_;
780 int num_packets_observed_; 782 int num_packets_observed_;
781 uint32_t retransmitted_timestamp_; 783 uint32_t retransmitted_timestamp_;
782 bool frame_retransmitted_; 784 bool frame_retransmitted_;
783 } test(use_rtx, use_red); 785 } test(use_rtx, use_red);
784 786
785 RunBaseTest(&test); 787 RunBaseTest(&test, FakeNetworkPipe::Config());
786 } 788 }
787 789
788 TEST_F(EndToEndTest, DecodesRetransmittedFrame) { 790 TEST_F(EndToEndTest, DecodesRetransmittedFrame) {
789 DecodesRetransmittedFrame(false, false); 791 DecodesRetransmittedFrame(false, false);
790 } 792 }
791 793
792 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) { 794 TEST_F(EndToEndTest, DecodesRetransmittedFrameOverRtx) {
793 DecodesRetransmittedFrame(true, false); 795 DecodesRetransmittedFrame(true, false);
794 } 796 }
795 797
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 rtc::scoped_ptr<EventWrapper> event_; 856 rtc::scoped_ptr<EventWrapper> event_;
855 int expected_luma_byte_; 857 int expected_luma_byte_;
856 int next_luma_byte_; 858 int next_luma_byte_;
857 }; 859 };
858 860
859 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255. 861 TestFrameCallback pre_encode_callback(-1, 255); // Changes luma to 255.
860 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0. 862 TestFrameCallback pre_render_callback(255, 0); // Changes luma from 255 to 0.
861 863
862 CreateCalls(Call::Config(), Call::Config()); 864 CreateCalls(Call::Config(), Call::Config());
863 865
864 test::DirectTransport sender_transport, receiver_transport; 866 test::DirectTransport sender_transport(sender_call_.get());
867 test::DirectTransport receiver_transport(receiver_call_.get());
865 sender_transport.SetReceiver(receiver_call_->Receiver()); 868 sender_transport.SetReceiver(receiver_call_->Receiver());
866 receiver_transport.SetReceiver(sender_call_->Receiver()); 869 receiver_transport.SetReceiver(sender_call_->Receiver());
867 870
868 CreateSendConfig(1, &sender_transport); 871 CreateSendConfig(1, &sender_transport);
869 rtc::scoped_ptr<VideoEncoder> encoder( 872 rtc::scoped_ptr<VideoEncoder> encoder(
870 VideoEncoder::Create(VideoEncoder::kVp8)); 873 VideoEncoder::Create(VideoEncoder::kVp8));
871 send_config_.encoder_settings.encoder = encoder.get(); 874 send_config_.encoder_settings.encoder = encoder.get();
872 send_config_.encoder_settings.payload_name = "VP8"; 875 send_config_.encoder_settings.payload_name = "VP8";
873 ASSERT_EQ(1u, encoder_config_.streams.size()) << "Test setup error."; 876 ASSERT_EQ(1u, encoder_config_.streams.size()) << "Test setup error.";
874 encoder_config_.streams[0].width = kWidth; 877 encoder_config_.streams[0].width = kWidth;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 explicit PliObserver(int rtp_history_ms) 914 explicit PliObserver(int rtp_history_ms)
912 : EndToEndTest(kLongTimeoutMs), 915 : EndToEndTest(kLongTimeoutMs),
913 rtp_history_ms_(rtp_history_ms), 916 rtp_history_ms_(rtp_history_ms),
914 nack_enabled_(rtp_history_ms > 0), 917 nack_enabled_(rtp_history_ms > 0),
915 highest_dropped_timestamp_(0), 918 highest_dropped_timestamp_(0),
916 frames_to_drop_(0), 919 frames_to_drop_(0),
917 received_pli_(false) {} 920 received_pli_(false) {}
918 921
919 private: 922 private:
920 Action OnSendRtp(const uint8_t* packet, size_t length) override { 923 Action OnSendRtp(const uint8_t* packet, size_t length) override {
924 rtc::CritScope lock(&crit_);
921 RTPHeader header; 925 RTPHeader header;
922 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 926 EXPECT_TRUE(parser_->Parse(packet, length, &header));
923 927
924 // Drop all retransmitted packets to force a PLI. 928 // Drop all retransmitted packets to force a PLI.
925 if (header.timestamp <= highest_dropped_timestamp_) 929 if (header.timestamp <= highest_dropped_timestamp_)
926 return DROP_PACKET; 930 return DROP_PACKET;
927 931
928 if (frames_to_drop_ > 0) { 932 if (frames_to_drop_ > 0) {
929 highest_dropped_timestamp_ = header.timestamp; 933 highest_dropped_timestamp_ = header.timestamp;
930 --frames_to_drop_; 934 --frames_to_drop_;
931 return DROP_PACKET; 935 return DROP_PACKET;
932 } 936 }
933 937
934 return SEND_PACKET; 938 return SEND_PACKET;
935 } 939 }
936 940
937 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override { 941 Action OnReceiveRtcp(const uint8_t* packet, size_t length) override {
942 rtc::CritScope lock(&crit_);
938 RTCPUtility::RTCPParserV2 parser(packet, length, true); 943 RTCPUtility::RTCPParserV2 parser(packet, length, true);
939 EXPECT_TRUE(parser.IsValid()); 944 EXPECT_TRUE(parser.IsValid());
940 945
941 for (RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 946 for (RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
942 packet_type != RTCPUtility::RTCPPacketTypes::kInvalid; 947 packet_type != RTCPUtility::RTCPPacketTypes::kInvalid;
943 packet_type = parser.Iterate()) { 948 packet_type = parser.Iterate()) {
944 if (!nack_enabled_) 949 if (!nack_enabled_)
945 EXPECT_NE(packet_type, RTCPUtility::RTCPPacketTypes::kRtpfbNack); 950 EXPECT_NE(packet_type, RTCPUtility::RTCPPacketTypes::kRtpfbNack);
946 951
947 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbPli) { 952 if (packet_type == RTCPUtility::RTCPPacketTypes::kPsfbPli) {
(...skipping 24 matching lines...) Expand all
972 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_; 977 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_;
973 (*receive_configs)[0].renderer = this; 978 (*receive_configs)[0].renderer = this;
974 } 979 }
975 980
976 void PerformTest() override { 981 void PerformTest() override {
977 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out waiting for PLI to be " 982 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out waiting for PLI to be "
978 "received and a frame to be " 983 "received and a frame to be "
979 "rendered afterwards."; 984 "rendered afterwards.";
980 } 985 }
981 986
987 rtc::CriticalSection crit_;
pbos-webrtc 2015/10/27 14:06:30 guarded_by
stefan-webrtc 2015/10/27 14:33:16 Done.
982 int rtp_history_ms_; 988 int rtp_history_ms_;
983 bool nack_enabled_; 989 bool nack_enabled_;
984 uint32_t highest_dropped_timestamp_; 990 uint32_t highest_dropped_timestamp_;
985 int frames_to_drop_; 991 int frames_to_drop_;
986 bool received_pli_; 992 bool received_pli_;
987 } test(rtp_history_ms); 993 } test(rtp_history_ms);
988 994
989 RunBaseTest(&test); 995 RunBaseTest(&test, FakeNetworkPipe::Config());
990 } 996 }
991 997
992 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) { 998 TEST_F(EndToEndTest, ReceivesPliAndRecoversWithNack) {
993 ReceivesPliAndRecovers(1000); 999 ReceivesPliAndRecovers(1000);
994 } 1000 }
995 1001
996 // TODO(pbos): Enable this when 2250 is resolved. 1002 // TODO(pbos): Enable this when 2250 is resolved.
997 TEST_F(EndToEndTest, DISABLED_ReceivesPliAndRecoversWithoutNack) { 1003 TEST_F(EndToEndTest, DISABLED_ReceivesPliAndRecoversWithoutNack) {
998 ReceivesPliAndRecovers(0); 1004 ReceivesPliAndRecovers(0);
999 } 1005 }
(...skipping 24 matching lines...) Expand all
1024 return delivery_status; 1030 return delivery_status;
1025 } 1031 }
1026 } 1032 }
1027 1033
1028 PacketReceiver* receiver_; 1034 PacketReceiver* receiver_;
1029 rtc::scoped_ptr<EventWrapper> delivered_packet_; 1035 rtc::scoped_ptr<EventWrapper> delivered_packet_;
1030 }; 1036 };
1031 1037
1032 CreateCalls(Call::Config(), Call::Config()); 1038 CreateCalls(Call::Config(), Call::Config());
1033 1039
1034 test::DirectTransport send_transport, receive_transport; 1040 test::DirectTransport send_transport(sender_call_.get());
1041 test::DirectTransport receive_transport(receiver_call_.get());
1035 PacketInputObserver input_observer(receiver_call_->Receiver()); 1042 PacketInputObserver input_observer(receiver_call_->Receiver());
1036 send_transport.SetReceiver(&input_observer); 1043 send_transport.SetReceiver(&input_observer);
1037 receive_transport.SetReceiver(sender_call_->Receiver()); 1044 receive_transport.SetReceiver(sender_call_->Receiver());
1038 1045
1039 CreateSendConfig(1, &send_transport); 1046 CreateSendConfig(1, &send_transport);
1040 CreateMatchingReceiveConfigs(&receive_transport); 1047 CreateMatchingReceiveConfigs(&receive_transport);
1041 1048
1042 CreateStreams(); 1049 CreateStreams();
1043 CreateFrameGeneratorCapturer(); 1050 CreateFrameGeneratorCapturer();
1044 Start(); 1051 Start();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 << (rtcp_mode_ == RtcpMode::kCompound 1135 << (rtcp_mode_ == RtcpMode::kCompound
1129 ? "Timed out before observing enough compound packets." 1136 ? "Timed out before observing enough compound packets."
1130 : "Timed out before receiving a non-compound RTCP packet."); 1137 : "Timed out before receiving a non-compound RTCP packet.");
1131 } 1138 }
1132 1139
1133 RtcpMode rtcp_mode_; 1140 RtcpMode rtcp_mode_;
1134 int sent_rtp_; 1141 int sent_rtp_;
1135 int sent_rtcp_; 1142 int sent_rtcp_;
1136 } test(rtcp_mode); 1143 } test(rtcp_mode);
1137 1144
1138 RunBaseTest(&test); 1145 RunBaseTest(&test, FakeNetworkPipe::Config());
1139 } 1146 }
1140 1147
1141 TEST_F(EndToEndTest, UsesRtcpCompoundMode) { 1148 TEST_F(EndToEndTest, UsesRtcpCompoundMode) {
1142 RespectsRtcpMode(RtcpMode::kCompound); 1149 RespectsRtcpMode(RtcpMode::kCompound);
1143 } 1150 }
1144 1151
1145 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) { 1152 TEST_F(EndToEndTest, UsesRtcpReducedSizeMode) {
1146 RespectsRtcpMode(RtcpMode::kReducedSize); 1153 RespectsRtcpMode(RtcpMode::kReducedSize);
1147 } 1154 }
1148 1155
(...skipping 11 matching lines...) Expand all
1160 MultiStreamTest() { 1167 MultiStreamTest() {
1161 // TODO(sprang): Cleanup when msvc supports explicit initializers for array. 1168 // TODO(sprang): Cleanup when msvc supports explicit initializers for array.
1162 codec_settings[0] = {1, 640, 480}; 1169 codec_settings[0] = {1, 640, 480};
1163 codec_settings[1] = {2, 320, 240}; 1170 codec_settings[1] = {2, 320, 240};
1164 codec_settings[2] = {3, 240, 160}; 1171 codec_settings[2] = {3, 240, 160};
1165 } 1172 }
1166 1173
1167 virtual ~MultiStreamTest() {} 1174 virtual ~MultiStreamTest() {}
1168 1175
1169 void RunTest() { 1176 void RunTest() {
1170 rtc::scoped_ptr<test::DirectTransport> sender_transport(
1171 CreateSendTransport());
1172 rtc::scoped_ptr<test::DirectTransport> receiver_transport(
1173 CreateReceiveTransport());
1174
1175 rtc::scoped_ptr<Call> sender_call(Call::Create(Call::Config())); 1177 rtc::scoped_ptr<Call> sender_call(Call::Create(Call::Config()));
1176 rtc::scoped_ptr<Call> receiver_call(Call::Create(Call::Config())); 1178 rtc::scoped_ptr<Call> receiver_call(Call::Create(Call::Config()));
1179 rtc::scoped_ptr<test::DirectTransport> sender_transport(
1180 CreateSendTransport(sender_call.get()));
1181 rtc::scoped_ptr<test::DirectTransport> receiver_transport(
1182 CreateReceiveTransport(receiver_call.get()));
1177 sender_transport->SetReceiver(receiver_call->Receiver()); 1183 sender_transport->SetReceiver(receiver_call->Receiver());
1178 receiver_transport->SetReceiver(sender_call->Receiver()); 1184 receiver_transport->SetReceiver(sender_call->Receiver());
1179 1185
1180 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams]; 1186 rtc::scoped_ptr<VideoEncoder> encoders[kNumStreams];
1181 for (size_t i = 0; i < kNumStreams; ++i) 1187 for (size_t i = 0; i < kNumStreams; ++i)
1182 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8)); 1188 encoders[i].reset(VideoEncoder::Create(VideoEncoder::kVp8));
1183 1189
1184 VideoSendStream* send_streams[kNumStreams]; 1190 VideoSendStream* send_streams[kNumStreams];
1185 VideoReceiveStream* receive_streams[kNumStreams]; 1191 VideoReceiveStream* receive_streams[kNumStreams];
1186 1192
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 // hasn't been created at the time of this call. Only when packets/frames 1256 // hasn't been created at the time of this call. Only when packets/frames
1251 // start flowing should this be dereferenced. 1257 // start flowing should this be dereferenced.
1252 virtual void UpdateSendConfig( 1258 virtual void UpdateSendConfig(
1253 size_t stream_index, 1259 size_t stream_index,
1254 VideoSendStream::Config* send_config, 1260 VideoSendStream::Config* send_config,
1255 VideoEncoderConfig* encoder_config, 1261 VideoEncoderConfig* encoder_config,
1256 test::FrameGeneratorCapturer** frame_generator) {} 1262 test::FrameGeneratorCapturer** frame_generator) {}
1257 virtual void UpdateReceiveConfig(size_t stream_index, 1263 virtual void UpdateReceiveConfig(size_t stream_index,
1258 VideoReceiveStream::Config* receive_config) { 1264 VideoReceiveStream::Config* receive_config) {
1259 } 1265 }
1260 virtual test::DirectTransport* CreateSendTransport() { 1266 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) {
pbos-webrtc 2015/10/27 14:06:30 Inline if this isn't overriding anything. If so ta
stefan-webrtc 2015/10/27 14:33:16 Done.
1261 return new test::DirectTransport(); 1267 return new test::DirectTransport(sender_call);
1262 } 1268 }
1263 virtual test::DirectTransport* CreateReceiveTransport() { 1269 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) {
1264 return new test::DirectTransport(); 1270 return new test::DirectTransport(receiver_call);
1265 } 1271 }
1266 }; 1272 };
1267 1273
1268 // Each renderer verifies that it receives the expected resolution, and as soon 1274 // Each renderer verifies that it receives the expected resolution, and as soon
1269 // as every renderer has received a frame, the test finishes. 1275 // as every renderer has received a frame, the test finishes.
1270 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) { 1276 TEST_F(EndToEndTest, SendsAndReceivesMultipleStreams) {
1271 class VideoOutputObserver : public VideoRenderer { 1277 class VideoOutputObserver : public VideoRenderer {
1272 public: 1278 public:
1273 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings, 1279 VideoOutputObserver(const MultiStreamTest::CodecSettings& settings,
1274 uint32_t ssrc, 1280 uint32_t ssrc,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 } tester; 1339 } tester;
1334 1340
1335 tester.RunTest(); 1341 tester.RunTest();
1336 } 1342 }
1337 1343
1338 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) { 1344 TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
1339 static const int kExtensionId = 5; 1345 static const int kExtensionId = 5;
1340 1346
1341 class RtpExtensionHeaderObserver : public test::DirectTransport { 1347 class RtpExtensionHeaderObserver : public test::DirectTransport {
1342 public: 1348 public:
1343 RtpExtensionHeaderObserver(const uint32_t& first_media_ssrc, 1349 RtpExtensionHeaderObserver(Call* sender_call,
1350 const uint32_t& first_media_ssrc,
1344 const std::map<uint32_t, uint32_t>& ssrc_map) 1351 const std::map<uint32_t, uint32_t>& ssrc_map)
1345 : done_(EventWrapper::Create()), 1352 : DirectTransport(sender_call),
1353 done_(EventWrapper::Create()),
1346 parser_(RtpHeaderParser::Create()), 1354 parser_(RtpHeaderParser::Create()),
1347 first_media_ssrc_(first_media_ssrc), 1355 first_media_ssrc_(first_media_ssrc),
1348 rtx_to_media_ssrcs_(ssrc_map), 1356 rtx_to_media_ssrcs_(ssrc_map),
1349 padding_observed_(false), 1357 padding_observed_(false),
1350 rtx_padding_observed_(false), 1358 rtx_padding_observed_(false),
1351 retransmit_observed_(false), 1359 retransmit_observed_(false),
1352 started_(false) { 1360 started_(false) {
1353 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber, 1361 parser_->RegisterRtpHeaderExtension(kRtpExtensionTransportSequenceNumber,
1354 kExtensionId); 1362 kExtensionId);
1355 } 1363 }
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1500 1508
1501 void UpdateReceiveConfig( 1509 void UpdateReceiveConfig(
1502 size_t stream_index, 1510 size_t stream_index,
1503 VideoReceiveStream::Config* receive_config) override { 1511 VideoReceiveStream::Config* receive_config) override {
1504 receive_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 1512 receive_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
1505 receive_config->rtp.extensions.clear(); 1513 receive_config->rtp.extensions.clear();
1506 receive_config->rtp.extensions.push_back( 1514 receive_config->rtp.extensions.push_back(
1507 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 1515 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
1508 } 1516 }
1509 1517
1510 virtual test::DirectTransport* CreateSendTransport() { 1518 virtual test::DirectTransport* CreateSendTransport(Call* sender_call) {
pbos-webrtc 2015/10/27 14:06:30 Mark as override or inline if not overriding.
stefan-webrtc 2015/10/27 14:33:16 Done.
1511 observer_ = new RtpExtensionHeaderObserver(first_media_ssrc_, 1519 observer_ = new RtpExtensionHeaderObserver(sender_call, first_media_ssrc_,
1512 rtx_to_media_ssrcs_); 1520 rtx_to_media_ssrcs_);
1513 return observer_; 1521 return observer_;
1514 } 1522 }
1515 1523
1516 private: 1524 private:
1517 uint32_t first_media_ssrc_; 1525 uint32_t first_media_ssrc_;
1518 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_; 1526 std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_;
1519 RtpExtensionHeaderObserver* observer_; 1527 RtpExtensionHeaderObserver* observer_;
1520 } tester; 1528 } tester;
1521 1529
1522 tester.RunTest(); 1530 tester.RunTest();
1523 } 1531 }
1524 1532
1525 TEST_F(EndToEndTest, ReceivesTransportFeedback) { 1533 TEST_F(EndToEndTest, ReceivesTransportFeedback) {
1526 static const int kExtensionId = 5; 1534 static const int kExtensionId = 5;
1527 1535
1528 class TransportFeedbackObserver : public test::DirectTransport { 1536 class TransportFeedbackObserver : public test::DirectTransport {
1529 public: 1537 public:
1530 TransportFeedbackObserver(rtc::Event* done_event) : done_(done_event) {} 1538 TransportFeedbackObserver(Call* receiver_call, rtc::Event* done_event)
1539 : DirectTransport(receiver_call), done_(done_event) {}
1531 virtual ~TransportFeedbackObserver() {} 1540 virtual ~TransportFeedbackObserver() {}
1532 1541
1533 bool SendRtcp(const uint8_t* data, size_t length) override { 1542 bool SendRtcp(const uint8_t* data, size_t length) override {
1534 RTCPUtility::RTCPParserV2 parser(data, length, true); 1543 RTCPUtility::RTCPParserV2 parser(data, length, true);
1535 EXPECT_TRUE(parser.IsValid()); 1544 EXPECT_TRUE(parser.IsValid());
1536 1545
1537 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); 1546 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin();
1538 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { 1547 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) {
1539 if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) { 1548 if (packet_type == RTCPUtility::RTCPPacketTypes::kTransportFeedback) {
1540 done_->Set(); 1549 done_->Set();
(...skipping 27 matching lines...) Expand all
1568 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 1577 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
1569 } 1578 }
1570 1579
1571 void UpdateReceiveConfig( 1580 void UpdateReceiveConfig(
1572 size_t stream_index, 1581 size_t stream_index,
1573 VideoReceiveStream::Config* receive_config) override { 1582 VideoReceiveStream::Config* receive_config) override {
1574 receive_config->rtp.extensions.push_back( 1583 receive_config->rtp.extensions.push_back(
1575 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); 1584 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId));
1576 } 1585 }
1577 1586
1578 virtual test::DirectTransport* CreateReceiveTransport() { 1587 virtual test::DirectTransport* CreateReceiveTransport(Call* receiver_call) {
pbos-webrtc 2015/10/27 14:06:30 override?
stefan-webrtc 2015/10/27 14:33:16 Done.
1579 return new TransportFeedbackObserver(&done_); 1588 return new TransportFeedbackObserver(receiver_call, &done_);
1580 } 1589 }
1581 1590
1582 private: 1591 private:
1583 rtc::Event done_; 1592 rtc::Event done_;
1584 } tester; 1593 } tester;
1585 tester.RunTest(); 1594 tester.RunTest();
1586 } 1595 }
1587 TEST_F(EndToEndTest, ObserversEncodedFrames) { 1596 TEST_F(EndToEndTest, ObserversEncodedFrames) {
1588 class EncodedFrameTestObserver : public EncodedFrameObserver { 1597 class EncodedFrameTestObserver : public EncodedFrameObserver {
1589 public: 1598 public:
(...skipping 27 matching lines...) Expand all
1617 size_t length_; 1626 size_t length_;
1618 FrameType frame_type_; 1627 FrameType frame_type_;
1619 rtc::scoped_ptr<EventWrapper> called_; 1628 rtc::scoped_ptr<EventWrapper> called_;
1620 }; 1629 };
1621 1630
1622 EncodedFrameTestObserver post_encode_observer; 1631 EncodedFrameTestObserver post_encode_observer;
1623 EncodedFrameTestObserver pre_decode_observer; 1632 EncodedFrameTestObserver pre_decode_observer;
1624 1633
1625 CreateCalls(Call::Config(), Call::Config()); 1634 CreateCalls(Call::Config(), Call::Config());
1626 1635
1627 test::DirectTransport sender_transport, receiver_transport; 1636 test::DirectTransport sender_transport(sender_call_.get());
1637 test::DirectTransport receiver_transport(receiver_call_.get());
1628 sender_transport.SetReceiver(receiver_call_->Receiver()); 1638 sender_transport.SetReceiver(receiver_call_->Receiver());
1629 receiver_transport.SetReceiver(sender_call_->Receiver()); 1639 receiver_transport.SetReceiver(sender_call_->Receiver());
1630 1640
1631 CreateSendConfig(1, &sender_transport); 1641 CreateSendConfig(1, &sender_transport);
1632 CreateMatchingReceiveConfigs(&receiver_transport); 1642 CreateMatchingReceiveConfigs(&receiver_transport);
1633 send_config_.post_encode_callback = &post_encode_observer; 1643 send_config_.post_encode_callback = &post_encode_observer;
1634 receive_configs_[0].pre_decode_callback = &pre_decode_observer; 1644 receive_configs_[0].pre_decode_callback = &pre_decode_observer;
1635 1645
1636 CreateStreams(); 1646 CreateStreams();
1637 Start(); 1647 Start();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 observation_complete_->Set(); 1697 observation_complete_->Set();
1688 return SEND_PACKET; 1698 return SEND_PACKET;
1689 } 1699 }
1690 void PerformTest() override { 1700 void PerformTest() override {
1691 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for a " 1701 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for a "
1692 "receiver RTCP REMB packet to be " 1702 "receiver RTCP REMB packet to be "
1693 "sent."; 1703 "sent.";
1694 } 1704 }
1695 } test; 1705 } test;
1696 1706
1697 RunBaseTest(&test); 1707 RunBaseTest(&test, FakeNetworkPipe::Config());
1698 } 1708 }
1699 1709
1700 TEST_F(EndToEndTest, VerifyBandwidthStats) { 1710 TEST_F(EndToEndTest, VerifyBandwidthStats) {
1701 class RtcpObserver : public test::EndToEndTest, public PacketReceiver { 1711 class RtcpObserver : public test::EndToEndTest {
1702 public: 1712 public:
1703 RtcpObserver() 1713 RtcpObserver()
1704 : EndToEndTest(kDefaultTimeoutMs), 1714 : EndToEndTest(kDefaultTimeoutMs),
1705 sender_call_(nullptr), 1715 sender_call_(nullptr),
1706 receiver_call_(nullptr), 1716 receiver_call_(nullptr),
1707 has_seen_pacer_delay_(false) {} 1717 has_seen_pacer_delay_(false) {}
1708 1718
1709 DeliveryStatus DeliverPacket(MediaType media_type, 1719 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1710 const uint8_t* packet,
1711 size_t length,
1712 const PacketTime& packet_time) override {
1713 Call::Stats sender_stats = sender_call_->GetStats(); 1720 Call::Stats sender_stats = sender_call_->GetStats();
1714 Call::Stats receiver_stats = receiver_call_->GetStats(); 1721 Call::Stats receiver_stats = receiver_call_->GetStats();
1715 if (!has_seen_pacer_delay_) 1722 if (!has_seen_pacer_delay_)
1716 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0; 1723 has_seen_pacer_delay_ = sender_stats.pacer_delay_ms > 0;
1717 if (sender_stats.send_bandwidth_bps > 0 && 1724 if (sender_stats.send_bandwidth_bps > 0 &&
1718 receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) { 1725 receiver_stats.recv_bandwidth_bps > 0 && has_seen_pacer_delay_) {
1719 observation_complete_->Set(); 1726 observation_complete_->Set();
1720 } 1727 }
1721 return receiver_call_->Receiver()->DeliverPacket(media_type, packet, 1728 return SEND_PACKET;
1722 length, packet_time);
1723 } 1729 }
1724 1730
1725 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 1731 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1726 sender_call_ = sender_call; 1732 sender_call_ = sender_call;
1727 receiver_call_ = receiver_call; 1733 receiver_call_ = receiver_call;
1728 } 1734 }
1729 1735
1730 void PerformTest() override { 1736 void PerformTest() override {
1731 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for " 1737 EXPECT_EQ(kEventSignaled, Wait()) << "Timed out while waiting for "
1732 "non-zero bandwidth stats."; 1738 "non-zero bandwidth stats.";
1733 } 1739 }
1734 1740
1735 void SetReceivers(PacketReceiver* send_transport_receiver,
1736 PacketReceiver* receive_transport_receiver) override {
1737 test::RtpRtcpObserver::SetReceivers(this, receive_transport_receiver);
1738 }
1739
1740 private: 1741 private:
1741 Call* sender_call_; 1742 Call* sender_call_;
1742 Call* receiver_call_; 1743 Call* receiver_call_;
1743 bool has_seen_pacer_delay_; 1744 bool has_seen_pacer_delay_;
1744 } test; 1745 } test;
1745 1746
1746 RunBaseTest(&test); 1747 RunBaseTest(&test, FakeNetworkPipe::Config());
1747 } 1748 }
1748 1749
1749 TEST_F(EndToEndTest, VerifyNackStats) { 1750 TEST_F(EndToEndTest, VerifyNackStats) {
1750 static const int kPacketNumberToDrop = 200; 1751 static const int kPacketNumberToDrop = 200;
1751 class NackObserver : public test::EndToEndTest { 1752 class NackObserver : public test::EndToEndTest {
1752 public: 1753 public:
1753 NackObserver() 1754 NackObserver()
1754 : EndToEndTest(kLongTimeoutMs), 1755 : EndToEndTest(kLongTimeoutMs),
1755 sent_rtp_packets_(0), 1756 sent_rtp_packets_(0),
1756 dropped_rtp_packet_(0), 1757 dropped_rtp_packet_(0),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 1838
1838 uint64_t sent_rtp_packets_; 1839 uint64_t sent_rtp_packets_;
1839 uint16_t dropped_rtp_packet_; 1840 uint16_t dropped_rtp_packet_;
1840 bool dropped_rtp_packet_requested_; 1841 bool dropped_rtp_packet_requested_;
1841 std::vector<VideoReceiveStream*> receive_streams_; 1842 std::vector<VideoReceiveStream*> receive_streams_;
1842 VideoSendStream* send_stream_; 1843 VideoSendStream* send_stream_;
1843 int64_t start_runtime_ms_; 1844 int64_t start_runtime_ms_;
1844 } test; 1845 } test;
1845 1846
1846 test::ClearHistograms(); 1847 test::ClearHistograms();
1847 RunBaseTest(&test); 1848 RunBaseTest(&test, FakeNetworkPipe::Config());
1848 1849
1849 EXPECT_EQ(1, test::NumHistogramSamples( 1850 EXPECT_EQ(1, test::NumHistogramSamples(
1850 "WebRTC.Video.UniqueNackRequestsSentInPercent")); 1851 "WebRTC.Video.UniqueNackRequestsSentInPercent"));
1851 EXPECT_EQ(1, test::NumHistogramSamples( 1852 EXPECT_EQ(1, test::NumHistogramSamples(
1852 "WebRTC.Video.UniqueNackRequestsReceivedInPercent")); 1853 "WebRTC.Video.UniqueNackRequestsReceivedInPercent"));
1853 EXPECT_GT(test::LastHistogramSample( 1854 EXPECT_GT(test::LastHistogramSample(
1854 "WebRTC.Video.NackPacketsSentPerMinute"), 0); 1855 "WebRTC.Video.NackPacketsSentPerMinute"), 0);
1855 EXPECT_GT(test::LastHistogramSample( 1856 EXPECT_GT(test::LastHistogramSample(
1856 "WebRTC.Video.NackPacketsReceivedPerMinute"), 0); 1857 "WebRTC.Video.NackPacketsReceivedPerMinute"), 0);
1857 } 1858 }
1858 1859
1859 void EndToEndTest::VerifyHistogramStats(bool use_rtx, bool use_red) { 1860 void EndToEndTest::VerifyHistogramStats(bool use_rtx, bool use_red) {
1860 class StatsObserver : public test::EndToEndTest, public PacketReceiver { 1861 class StatsObserver : public test::EndToEndTest {
1861 public: 1862 public:
1862 StatsObserver(bool use_rtx, bool use_red) 1863 StatsObserver(bool use_rtx, bool use_red)
1863 : EndToEndTest(kLongTimeoutMs), 1864 : EndToEndTest(kLongTimeoutMs),
1864 use_rtx_(use_rtx), 1865 use_rtx_(use_rtx),
1865 use_red_(use_red), 1866 use_red_(use_red),
1866 sender_call_(nullptr), 1867 sender_call_(nullptr),
1867 receiver_call_(nullptr), 1868 receiver_call_(nullptr),
1868 start_runtime_ms_(-1) {} 1869 start_runtime_ms_(-1) {}
1869 1870
1870 private: 1871 private:
1871 Action OnSendRtp(const uint8_t* packet, size_t length) override { 1872 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1872 if (MinMetricRunTimePassed()) 1873 if (MinMetricRunTimePassed())
1873 observation_complete_->Set(); 1874 observation_complete_->Set();
1874 1875
1875 return SEND_PACKET;
1876 }
1877
1878 DeliveryStatus DeliverPacket(MediaType media_type,
1879 const uint8_t* packet,
1880 size_t length,
1881 const PacketTime& packet_time) override {
1882 // GetStats calls GetSendChannelRtcpStatistics 1876 // GetStats calls GetSendChannelRtcpStatistics
1883 // (via VideoSendStream::GetRtt) which updates ReportBlockStats used by 1877 // (via VideoSendStream::GetRtt) which updates ReportBlockStats used by
1884 // WebRTC.Video.SentPacketsLostInPercent. 1878 // WebRTC.Video.SentPacketsLostInPercent.
1885 // TODO(asapersson): Remove dependency on calling GetStats. 1879 // TODO(asapersson): Remove dependency on calling GetStats.
1886 sender_call_->GetStats(); 1880 sender_call_->GetStats();
1887 return receiver_call_->Receiver()->DeliverPacket(media_type, packet, 1881
1888 length, packet_time); 1882 return SEND_PACKET;
1889 } 1883 }
1890 1884
1891 bool MinMetricRunTimePassed() { 1885 bool MinMetricRunTimePassed() {
1892 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); 1886 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds();
1893 if (start_runtime_ms_ == -1) { 1887 if (start_runtime_ms_ == -1) {
1894 start_runtime_ms_ = now; 1888 start_runtime_ms_ = now;
1895 return false; 1889 return false;
1896 } 1890 }
1897 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; 1891 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000;
1898 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; 1892 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2;
(...skipping 21 matching lines...) Expand all
1920 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type = 1914 (*receive_configs)[0].rtp.rtx[kFakeSendPayloadType].payload_type =
1921 kSendRtxPayloadType; 1915 kSendRtxPayloadType;
1922 } 1916 }
1923 } 1917 }
1924 1918
1925 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { 1919 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1926 sender_call_ = sender_call; 1920 sender_call_ = sender_call;
1927 receiver_call_ = receiver_call; 1921 receiver_call_ = receiver_call;
1928 } 1922 }
1929 1923
1930 void SetReceivers(PacketReceiver* send_transport_receiver,
1931 PacketReceiver* receive_transport_receiver) override {
1932 test::RtpRtcpObserver::SetReceivers(this, receive_transport_receiver);
1933 }
1934
1935 void PerformTest() override { 1924 void PerformTest() override {
1936 EXPECT_EQ(kEventSignaled, Wait()) 1925 EXPECT_EQ(kEventSignaled, Wait())
1937 << "Timed out waiting for packet to be NACKed."; 1926 << "Timed out waiting for packet to be NACKed.";
1938 } 1927 }
1939 1928
1940 bool use_rtx_; 1929 bool use_rtx_;
1941 bool use_red_; 1930 bool use_red_;
1942 Call* sender_call_; 1931 Call* sender_call_;
1943 Call* receiver_call_; 1932 Call* receiver_call_;
1944 int64_t start_runtime_ms_; 1933 int64_t start_runtime_ms_;
1945 } test(use_rtx, use_red); 1934 } test(use_rtx, use_red);
1946 1935
1947 test::ClearHistograms(); 1936 test::ClearHistograms();
1948 RunBaseTest(&test); 1937 RunBaseTest(&test, FakeNetworkPipe::Config());
1949 1938
1950 // Verify that stats have been updated once. 1939 // Verify that stats have been updated once.
1951 EXPECT_EQ(1, test::NumHistogramSamples( 1940 EXPECT_EQ(1, test::NumHistogramSamples(
1952 "WebRTC.Video.NackPacketsSentPerMinute")); 1941 "WebRTC.Video.NackPacketsSentPerMinute"));
1953 EXPECT_EQ(1, test::NumHistogramSamples( 1942 EXPECT_EQ(1, test::NumHistogramSamples(
1954 "WebRTC.Video.NackPacketsReceivedPerMinute")); 1943 "WebRTC.Video.NackPacketsReceivedPerMinute"));
1955 EXPECT_EQ(1, test::NumHistogramSamples( 1944 EXPECT_EQ(1, test::NumHistogramSamples(
1956 "WebRTC.Video.FirPacketsSentPerMinute")); 1945 "WebRTC.Video.FirPacketsSentPerMinute"));
1957 EXPECT_EQ(1, test::NumHistogramSamples( 1946 EXPECT_EQ(1, test::NumHistogramSamples(
1958 "WebRTC.Video.FirPacketsReceivedPerMinute")); 1947 "WebRTC.Video.FirPacketsReceivedPerMinute"));
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 << "Timed out while waiting for RTCP SR/RR packets to be sent."; 2111 << "Timed out while waiting for RTCP SR/RR packets to be sent.";
2123 } 2112 }
2124 2113
2125 bool enable_rrtr_; 2114 bool enable_rrtr_;
2126 int sent_rtcp_sr_; 2115 int sent_rtcp_sr_;
2127 int sent_rtcp_rr_; 2116 int sent_rtcp_rr_;
2128 int sent_rtcp_rrtr_; 2117 int sent_rtcp_rrtr_;
2129 int sent_rtcp_dlrr_; 2118 int sent_rtcp_dlrr_;
2130 } test(enable_rrtr); 2119 } test(enable_rrtr);
2131 2120
2132 RunBaseTest(&test); 2121 RunBaseTest(&test, FakeNetworkPipe::Config());
2133 } 2122 }
2134 2123
2135 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs, 2124 void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
2136 bool send_single_ssrc_first) { 2125 bool send_single_ssrc_first) {
2137 class SendsSetSsrcs : public test::EndToEndTest { 2126 class SendsSetSsrcs : public test::EndToEndTest {
2138 public: 2127 public:
2139 SendsSetSsrcs(const uint32_t* ssrcs, 2128 SendsSetSsrcs(const uint32_t* ssrcs,
2140 size_t num_ssrcs, 2129 size_t num_ssrcs,
2141 bool send_single_ssrc_first) 2130 bool send_single_ssrc_first)
2142 : EndToEndTest(kDefaultTimeoutMs), 2131 : EndToEndTest(kDefaultTimeoutMs),
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 const size_t num_ssrcs_; 2209 const size_t num_ssrcs_;
2221 const bool send_single_ssrc_first_; 2210 const bool send_single_ssrc_first_;
2222 2211
2223 size_t ssrcs_to_observe_; 2212 size_t ssrcs_to_observe_;
2224 bool expect_single_ssrc_; 2213 bool expect_single_ssrc_;
2225 2214
2226 VideoSendStream* send_stream_; 2215 VideoSendStream* send_stream_;
2227 VideoEncoderConfig encoder_config_all_streams_; 2216 VideoEncoderConfig encoder_config_all_streams_;
2228 } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first); 2217 } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first);
2229 2218
2230 RunBaseTest(&test); 2219 RunBaseTest(&test, FakeNetworkPipe::Config());
2231 } 2220 }
2232 2221
2233 TEST_F(EndToEndTest, ReportsSetEncoderRates) { 2222 TEST_F(EndToEndTest, ReportsSetEncoderRates) {
2234 class EncoderRateStatsTest : public test::EndToEndTest, 2223 class EncoderRateStatsTest : public test::EndToEndTest,
2235 public test::FakeEncoder { 2224 public test::FakeEncoder {
2236 public: 2225 public:
2237 EncoderRateStatsTest() 2226 EncoderRateStatsTest()
2238 : EndToEndTest(kDefaultTimeoutMs), 2227 : EndToEndTest(kDefaultTimeoutMs),
2239 FakeEncoder(Clock::GetRealTimeClock()), 2228 FakeEncoder(Clock::GetRealTimeClock()),
2240 send_stream_(nullptr), 2229 send_stream_(nullptr),
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2275 return; 2264 return;
2276 } 2265 }
2277 } 2266 }
2278 SleepMs(1); 2267 SleepMs(1);
2279 } 2268 }
2280 FAIL() 2269 FAIL()
2281 << "Timed out waiting for stats reporting the currently set bitrate."; 2270 << "Timed out waiting for stats reporting the currently set bitrate.";
2282 } 2271 }
2283 2272
2284 private: 2273 private:
2274 rtc::CriticalSection crit_;
2285 VideoSendStream* send_stream_; 2275 VideoSendStream* send_stream_;
2286 uint32_t bitrate_kbps_ GUARDED_BY(crit_); 2276 uint32_t bitrate_kbps_ GUARDED_BY(crit_);
2287 } test; 2277 } test;
2288 2278
2289 RunBaseTest(&test); 2279 RunBaseTest(&test, FakeNetworkPipe::Config());
2290 } 2280 }
2291 2281
2292 TEST_F(EndToEndTest, GetStats) { 2282 TEST_F(EndToEndTest, GetStats) {
2293 static const int kStartBitrateBps = 3000000; 2283 static const int kStartBitrateBps = 3000000;
2294 static const int kExpectedRenderDelayMs = 20; 2284 static const int kExpectedRenderDelayMs = 20;
2295 class StatsObserver : public test::EndToEndTest, public I420FrameCallback { 2285 class StatsObserver : public test::EndToEndTest, public I420FrameCallback {
2296 public: 2286 public:
2297 explicit StatsObserver(const FakeNetworkPipe::Config& config) 2287 StatsObserver()
2298 : EndToEndTest(kLongTimeoutMs, config), 2288 : EndToEndTest(kLongTimeoutMs),
2299 send_stream_(nullptr), 2289 send_stream_(nullptr),
2300 expected_send_ssrcs_(), 2290 expected_send_ssrcs_(),
2301 check_stats_event_(EventWrapper::Create()) {} 2291 check_stats_event_(EventWrapper::Create()) {}
2302 2292
2303 private: 2293 private:
2304 Action OnSendRtp(const uint8_t* packet, size_t length) override { 2294 Action OnSendRtp(const uint8_t* packet, size_t length) override {
2305 check_stats_event_->Set(); 2295 check_stats_event_->Set();
2306 return SEND_PACKET; 2296 return SEND_PACKET;
2307 } 2297 }
2308 2298
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
2535 std::map<std::string, bool> receive_stats_filled_; 2525 std::map<std::string, bool> receive_stats_filled_;
2536 2526
2537 VideoSendStream* send_stream_; 2527 VideoSendStream* send_stream_;
2538 std::map<std::string, bool> send_stats_filled_; 2528 std::map<std::string, bool> send_stats_filled_;
2539 2529
2540 std::vector<uint32_t> expected_receive_ssrcs_; 2530 std::vector<uint32_t> expected_receive_ssrcs_;
2541 std::set<uint32_t> expected_send_ssrcs_; 2531 std::set<uint32_t> expected_send_ssrcs_;
2542 std::string expected_cname_; 2532 std::string expected_cname_;
2543 2533
2544 rtc::scoped_ptr<EventWrapper> check_stats_event_; 2534 rtc::scoped_ptr<EventWrapper> check_stats_event_;
2545 }; 2535 } test;
2546 2536
2547 FakeNetworkPipe::Config network_config; 2537 FakeNetworkPipe::Config network_config;
2548 network_config.loss_percent = 5; 2538 network_config.loss_percent = 5;
2549 2539 RunBaseTest(&test, network_config);
2550 StatsObserver test(network_config);
2551 RunBaseTest(&test);
2552 } 2540 }
2553 2541
2554 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) { 2542 TEST_F(EndToEndTest, ReceiverReferenceTimeReportEnabled) {
2555 TestXrReceiverReferenceTimeReport(true); 2543 TestXrReceiverReferenceTimeReport(true);
2556 } 2544 }
2557 2545
2558 TEST_F(EndToEndTest, ReceiverReferenceTimeReportDisabled) { 2546 TEST_F(EndToEndTest, ReceiverReferenceTimeReportDisabled) {
2559 TestXrReceiverReferenceTimeReport(false); 2547 TestXrReceiverReferenceTimeReport(false);
2560 } 2548 }
2561 2549
(...skipping 27 matching lines...) Expand all
2589 2577
2590 void PerformTest() override { 2578 void PerformTest() override {
2591 EXPECT_EQ(kEventSignaled, Wait()) 2579 EXPECT_EQ(kEventSignaled, Wait())
2592 << "Timed out while verifying number of received RTP packets."; 2580 << "Timed out while verifying number of received RTP packets.";
2593 } 2581 }
2594 2582
2595 VideoReceiveStream* receive_stream_; 2583 VideoReceiveStream* receive_stream_;
2596 uint32_t sent_rtp_; 2584 uint32_t sent_rtp_;
2597 } test; 2585 } test;
2598 2586
2599 RunBaseTest(&test); 2587 RunBaseTest(&test, FakeNetworkPipe::Config());
2600 } 2588 }
2601 2589
2602 TEST_F(EndToEndTest, SendsSetSsrc) { TestSendsSetSsrcs(1, false); } 2590 TEST_F(EndToEndTest, SendsSetSsrc) { TestSendsSetSsrcs(1, false); }
2603 2591
2604 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) { 2592 TEST_F(EndToEndTest, SendsSetSimulcastSsrcs) {
2605 TestSendsSetSsrcs(kNumSsrcs, false); 2593 TestSendsSetSsrcs(kNumSsrcs, false);
2606 } 2594 }
2607 2595
2608 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) { 2596 TEST_F(EndToEndTest, CanSwitchToUseAllSsrcs) {
2609 TestSendsSetSsrcs(kNumSsrcs, true); 2597 TestSendsSetSsrcs(kNumSsrcs, true);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
2669 EXPECT_EQ(kEventSignaled, Wait()) 2657 EXPECT_EQ(kEventSignaled, Wait())
2670 << "Timed out while waiting for redundant payloads on all SSRCs."; 2658 << "Timed out while waiting for redundant payloads on all SSRCs.";
2671 } 2659 }
2672 2660
2673 private: 2661 private:
2674 size_t ssrcs_to_observe_; 2662 size_t ssrcs_to_observe_;
2675 std::map<uint32_t, bool> observed_redundant_retransmission_; 2663 std::map<uint32_t, bool> observed_redundant_retransmission_;
2676 std::map<uint32_t, bool> registered_rtx_ssrc_; 2664 std::map<uint32_t, bool> registered_rtx_ssrc_;
2677 } test; 2665 } test;
2678 2666
2679 RunBaseTest(&test); 2667 RunBaseTest(&test, FakeNetworkPipe::Config());
2680 } 2668 }
2681 2669
2682 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) { 2670 void EndToEndTest::TestRtpStatePreservation(bool use_rtx) {
2683 static const uint32_t kMaxSequenceNumberGap = 100; 2671 static const uint32_t kMaxSequenceNumberGap = 100;
2684 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90; 2672 static const uint64_t kMaxTimestampGap = kDefaultTimeoutMs * 90;
2685 class RtpSequenceObserver : public test::RtpRtcpObserver { 2673 class RtpSequenceObserver : public test::RtpRtcpObserver {
2686 public: 2674 public:
2687 explicit RtpSequenceObserver(bool use_rtx) 2675 explicit RtpSequenceObserver(bool use_rtx)
2688 : test::RtpRtcpObserver(kDefaultTimeoutMs), 2676 : test::RtpRtcpObserver(kDefaultTimeoutMs),
2689 ssrcs_to_observe_(kNumSsrcs) { 2677 ssrcs_to_observe_(kNumSsrcs) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2764 std::map<uint32_t, uint16_t> last_observed_sequence_number_; 2752 std::map<uint32_t, uint16_t> last_observed_sequence_number_;
2765 std::map<uint32_t, uint32_t> last_observed_timestamp_; 2753 std::map<uint32_t, uint32_t> last_observed_timestamp_;
2766 std::map<uint32_t, bool> configured_ssrcs_; 2754 std::map<uint32_t, bool> configured_ssrcs_;
2767 2755
2768 rtc::CriticalSection crit_; 2756 rtc::CriticalSection crit_;
2769 size_t ssrcs_to_observe_ GUARDED_BY(crit_); 2757 size_t ssrcs_to_observe_ GUARDED_BY(crit_);
2770 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_); 2758 std::map<uint32_t, bool> ssrc_observed_ GUARDED_BY(crit_);
2771 } observer(use_rtx); 2759 } observer(use_rtx);
2772 2760
2773 CreateCalls(Call::Config(), Call::Config()); 2761 CreateCalls(Call::Config(), Call::Config());
2774 observer.SetReceivers(sender_call_->Receiver(), nullptr);
2775 2762
2776 CreateSendConfig(kNumSsrcs, observer.SendTransport()); 2763 test::PacketTransport send_transport(sender_call_.get(), &observer,
2764 test::PacketTransport::kSender,
2765 FakeNetworkPipe::Config());
2766 test::PacketTransport receive_transport(nullptr, &observer,
2767 test::PacketTransport::kReceiver,
2768 FakeNetworkPipe::Config());
2769 send_transport.SetReceiver(receiver_call_->Receiver());
2770 receive_transport.SetReceiver(sender_call_->Receiver());
2771 observer.SetTransports(&send_transport, &receive_transport);
2772
2773 CreateSendConfig(kNumSsrcs, &send_transport);
2777 2774
2778 if (use_rtx) { 2775 if (use_rtx) {
2779 for (size_t i = 0; i < kNumSsrcs; ++i) { 2776 for (size_t i = 0; i < kNumSsrcs; ++i) {
2780 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); 2777 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]);
2781 } 2778 }
2782 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; 2779 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType;
2783 } 2780 }
2784 2781
2785 // Lower bitrates so that all streams send initially. 2782 // Lower bitrates so that all streams send initially.
2786 for (size_t i = 0; i < encoder_config_.streams.size(); ++i) { 2783 for (size_t i = 0; i < encoder_config_.streams.size(); ++i) {
2787 encoder_config_.streams[i].min_bitrate_bps = 10000; 2784 encoder_config_.streams[i].min_bitrate_bps = 10000;
2788 encoder_config_.streams[i].target_bitrate_bps = 15000; 2785 encoder_config_.streams[i].target_bitrate_bps = 15000;
2789 encoder_config_.streams[i].max_bitrate_bps = 20000; 2786 encoder_config_.streams[i].max_bitrate_bps = 20000;
2790 } 2787 }
2791 2788
2792 // Use the same total bitrates when sending a single stream to avoid lowering 2789 // Use the same total bitrates when sending a single stream to avoid lowering
2793 // the bitrate estimate and requiring a subsequent rampup. 2790 // the bitrate estimate and requiring a subsequent rampup.
2794 VideoEncoderConfig one_stream = encoder_config_; 2791 VideoEncoderConfig one_stream = encoder_config_;
2795 one_stream.streams.resize(1); 2792 one_stream.streams.resize(1);
2796 for (size_t i = 1; i < encoder_config_.streams.size(); ++i) { 2793 for (size_t i = 1; i < encoder_config_.streams.size(); ++i) {
2797 one_stream.streams.front().min_bitrate_bps += 2794 one_stream.streams.front().min_bitrate_bps +=
2798 encoder_config_.streams[i].min_bitrate_bps; 2795 encoder_config_.streams[i].min_bitrate_bps;
2799 one_stream.streams.front().target_bitrate_bps += 2796 one_stream.streams.front().target_bitrate_bps +=
2800 encoder_config_.streams[i].target_bitrate_bps; 2797 encoder_config_.streams[i].target_bitrate_bps;
2801 one_stream.streams.front().max_bitrate_bps += 2798 one_stream.streams.front().max_bitrate_bps +=
2802 encoder_config_.streams[i].max_bitrate_bps; 2799 encoder_config_.streams[i].max_bitrate_bps;
2803 } 2800 }
2804 2801
2805 CreateMatchingReceiveConfigs(observer.ReceiveTransport()); 2802 CreateMatchingReceiveConfigs(&receive_transport);
2806 2803
2807 CreateStreams(); 2804 CreateStreams();
2808 CreateFrameGeneratorCapturer(); 2805 CreateFrameGeneratorCapturer();
2809 2806
2810 Start(); 2807 Start();
2811 EXPECT_EQ(kEventSignaled, observer.Wait()) 2808 EXPECT_EQ(kEventSignaled, observer.Wait())
2812 << "Timed out waiting for all SSRCs to send packets."; 2809 << "Timed out waiting for all SSRCs to send packets.";
2813 2810
2814 // Test stream resetting more than once to make sure that the state doesn't 2811 // Test stream resetting more than once to make sure that the state doesn't
2815 // get set once (this could be due to using std::map::insert for instance). 2812 // get set once (this could be due to using std::map::insert for instance).
(...skipping 24 matching lines...) Expand all
2840 EXPECT_EQ(kEventSignaled, observer.Wait()) 2837 EXPECT_EQ(kEventSignaled, observer.Wait())
2841 << "Timed out waiting for single RTP packet."; 2838 << "Timed out waiting for single RTP packet.";
2842 2839
2843 // Reconfigure back to use all streams. 2840 // Reconfigure back to use all streams.
2844 send_stream_->ReconfigureVideoEncoder(encoder_config_); 2841 send_stream_->ReconfigureVideoEncoder(encoder_config_);
2845 observer.ResetExpectedSsrcs(kNumSsrcs); 2842 observer.ResetExpectedSsrcs(kNumSsrcs);
2846 EXPECT_EQ(kEventSignaled, observer.Wait()) 2843 EXPECT_EQ(kEventSignaled, observer.Wait())
2847 << "Timed out waiting for all SSRCs to send packets."; 2844 << "Timed out waiting for all SSRCs to send packets.";
2848 } 2845 }
2849 2846
2850 observer.StopSending(); 2847 send_transport.StopSending();
2848 receive_transport.StopSending();
2851 2849
2852 Stop(); 2850 Stop();
2853 DestroyStreams(); 2851 DestroyStreams();
2854 } 2852 }
2855 2853
2856 TEST_F(EndToEndTest, DISABLED_RestartingSendStreamPreservesRtpState) { 2854 TEST_F(EndToEndTest, DISABLED_RestartingSendStreamPreservesRtpState) {
2857 TestRtpStatePreservation(false); 2855 TestRtpStatePreservation(false);
2858 } 2856 }
2859 2857
2860 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) { 2858 TEST_F(EndToEndTest, RestartingSendStreamPreservesRtpStatesWithRtx) {
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
3026 const rtc::scoped_ptr<EventWrapper> packet_event_; 3024 const rtc::scoped_ptr<EventWrapper> packet_event_;
3027 Call* sender_call_; 3025 Call* sender_call_;
3028 Call* receiver_call_; 3026 Call* receiver_call_;
3029 NetworkState sender_state_ GUARDED_BY(test_crit_); 3027 NetworkState sender_state_ GUARDED_BY(test_crit_);
3030 int sender_rtp_ GUARDED_BY(test_crit_); 3028 int sender_rtp_ GUARDED_BY(test_crit_);
3031 int sender_rtcp_ GUARDED_BY(test_crit_); 3029 int sender_rtcp_ GUARDED_BY(test_crit_);
3032 int receiver_rtcp_ GUARDED_BY(test_crit_); 3030 int receiver_rtcp_ GUARDED_BY(test_crit_);
3033 int down_frames_ GUARDED_BY(test_crit_); 3031 int down_frames_ GUARDED_BY(test_crit_);
3034 } test; 3032 } test;
3035 3033
3036 RunBaseTest(&test); 3034 RunBaseTest(&test, FakeNetworkPipe::Config());
3037 } 3035 }
3038 3036
3039 TEST_F(EndToEndTest, CallReportsRttForSender) { 3037 TEST_F(EndToEndTest, CallReportsRttForSender) {
3040 static const int kSendDelayMs = 30; 3038 static const int kSendDelayMs = 30;
3041 static const int kReceiveDelayMs = 70; 3039 static const int kReceiveDelayMs = 70;
3042 3040
3043 CreateCalls(Call::Config(), Call::Config()); 3041 CreateCalls(Call::Config(), Call::Config());
3044 3042
3045 FakeNetworkPipe::Config config; 3043 FakeNetworkPipe::Config config;
3046 config.queue_delay_ms = kSendDelayMs; 3044 config.queue_delay_ms = kSendDelayMs;
3047 test::DirectTransport sender_transport(config); 3045 test::DirectTransport sender_transport(config, sender_call_.get());
3048 config.queue_delay_ms = kReceiveDelayMs; 3046 config.queue_delay_ms = kReceiveDelayMs;
3049 test::DirectTransport receiver_transport(config); 3047 test::DirectTransport receiver_transport(config, receiver_call_.get());
3050 sender_transport.SetReceiver(receiver_call_->Receiver()); 3048 sender_transport.SetReceiver(receiver_call_->Receiver());
3051 receiver_transport.SetReceiver(sender_call_->Receiver()); 3049 receiver_transport.SetReceiver(sender_call_->Receiver());
3052 3050
3053 CreateSendConfig(1, &sender_transport); 3051 CreateSendConfig(1, &sender_transport);
3054 CreateMatchingReceiveConfigs(&receiver_transport); 3052 CreateMatchingReceiveConfigs(&receiver_transport);
3055 3053
3056 CreateStreams(); 3054 CreateStreams();
3057 CreateFrameGeneratorCapturer(); 3055 CreateFrameGeneratorCapturer();
3058 Start(); 3056 Start();
3059 3057
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3101 SleepMs(kSilenceTimeoutMs); 3099 SleepMs(kSilenceTimeoutMs);
3102 Stop(); 3100 Stop();
3103 3101
3104 DestroyStreams(); 3102 DestroyStreams();
3105 } 3103 }
3106 3104
3107 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) { 3105 TEST_F(EndToEndTest, NewReceiveStreamsRespectNetworkDown) {
3108 CreateCalls(Call::Config(), Call::Config()); 3106 CreateCalls(Call::Config(), Call::Config());
3109 receiver_call_->SignalNetworkState(kNetworkDown); 3107 receiver_call_->SignalNetworkState(kNetworkDown);
3110 3108
3111 test::DirectTransport sender_transport; 3109 test::DirectTransport sender_transport(sender_call_.get());
3112 sender_transport.SetReceiver(receiver_call_->Receiver()); 3110 sender_transport.SetReceiver(receiver_call_->Receiver());
3113 CreateSendConfig(1, &sender_transport); 3111 CreateSendConfig(1, &sender_transport);
3114 UnusedTransport transport; 3112 UnusedTransport transport;
3115 CreateMatchingReceiveConfigs(&transport); 3113 CreateMatchingReceiveConfigs(&transport);
3116 CreateStreams(); 3114 CreateStreams();
3117 CreateFrameGeneratorCapturer(); 3115 CreateFrameGeneratorCapturer();
3118 3116
3119 Start(); 3117 Start();
3120 SleepMs(kSilenceTimeoutMs); 3118 SleepMs(kSilenceTimeoutMs);
3121 Stop(); 3119 Stop();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
3164 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) 3162 EXPECT_TRUE(default_receive_config.rtp.rtx.empty())
3165 << "Enabling RTX requires rtpmap: rtx negotiation."; 3163 << "Enabling RTX requires rtpmap: rtx negotiation.";
3166 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) 3164 EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
3167 << "Enabling RTP extensions require negotiation."; 3165 << "Enabling RTP extensions require negotiation.";
3168 3166
3169 VerifyEmptyNackConfig(default_receive_config.rtp.nack); 3167 VerifyEmptyNackConfig(default_receive_config.rtp.nack);
3170 VerifyEmptyFecConfig(default_receive_config.rtp.fec); 3168 VerifyEmptyFecConfig(default_receive_config.rtp.fec);
3171 } 3169 }
3172 3170
3173 } // namespace webrtc 3171 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698