OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // This test generate synthetic data. For audio it's a sinusoid waveform with | 5 // This test generate synthetic data. For audio it's a sinusoid waveform with |
6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern | 6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern |
7 // that is shifting by one pixel per frame, each pixels neighbors right and down | 7 // that is shifting by one pixel per frame, each pixels neighbors right and down |
8 // is this pixels value +1, since the pixel value is 8 bit it will wrap | 8 // is this pixels value +1, since the pixel value is 8 bit it will wrap |
9 // frequently within the image. Visually this will create diagonally color bands | 9 // frequently within the image. Visually this will create diagonally color bands |
10 // that moves across the screen | 10 // that moves across the screen |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 }; | 389 }; |
390 | 390 |
391 // The actual test class, generate synthetic data for both audio and video and | 391 // The actual test class, generate synthetic data for both audio and video and |
392 // send those through the sender and receiver and analyzes the result. | 392 // send those through the sender and receiver and analyzes the result. |
393 class End2EndTest : public ::testing::Test { | 393 class End2EndTest : public ::testing::Test { |
394 protected: | 394 protected: |
395 End2EndTest() | 395 End2EndTest() |
396 : start_time_(), | 396 : start_time_(), |
397 testing_clock_sender_(new base::SimpleTestTickClock()), | 397 testing_clock_sender_(new base::SimpleTestTickClock()), |
398 testing_clock_receiver_(new base::SimpleTestTickClock()), | 398 testing_clock_receiver_(new base::SimpleTestTickClock()), |
399 task_runner_(new test::FakeSingleThreadTaskRunner( | 399 task_runner_( |
400 testing_clock_sender_)), | 400 new test::FakeSingleThreadTaskRunner(testing_clock_sender_)), |
| 401 logging_config_(GetLoggingConfigWithRawEventsAndStatsEnabled()), |
401 cast_environment_sender_(new CastEnvironment( | 402 cast_environment_sender_(new CastEnvironment( |
402 scoped_ptr<base::TickClock>(testing_clock_sender_).Pass(), | 403 scoped_ptr<base::TickClock>(testing_clock_sender_).Pass(), |
403 task_runner_, | 404 task_runner_, |
404 task_runner_, | 405 task_runner_, |
405 task_runner_, | 406 task_runner_, |
406 task_runner_, | 407 task_runner_, |
407 task_runner_, | 408 task_runner_, |
408 task_runner_, | 409 task_runner_, |
409 GetLoggingConfigWithRawEventsAndStatsEnabled())), | 410 logging_config_)), |
410 cast_environment_receiver_(new CastEnvironment( | 411 cast_environment_receiver_(new CastEnvironment( |
411 scoped_ptr<base::TickClock>(testing_clock_receiver_).Pass(), | 412 scoped_ptr<base::TickClock>(testing_clock_receiver_).Pass(), |
412 task_runner_, | 413 task_runner_, |
413 task_runner_, | 414 task_runner_, |
414 task_runner_, | 415 task_runner_, |
415 task_runner_, | 416 task_runner_, |
416 task_runner_, | 417 task_runner_, |
417 task_runner_, | 418 task_runner_, |
418 GetLoggingConfigWithRawEventsAndStatsEnabled())), | 419 logging_config_)), |
419 receiver_to_sender_(cast_environment_receiver_), | 420 receiver_to_sender_(cast_environment_receiver_), |
420 sender_to_receiver_(cast_environment_sender_), | 421 sender_to_receiver_(cast_environment_sender_), |
421 test_receiver_audio_callback_(new TestReceiverAudioCallback()), | 422 test_receiver_audio_callback_(new TestReceiverAudioCallback()), |
422 test_receiver_video_callback_(new TestReceiverVideoCallback()) { | 423 test_receiver_video_callback_(new TestReceiverVideoCallback()) { |
423 testing_clock_sender_->Advance( | 424 testing_clock_sender_->Advance( |
424 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 425 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
425 testing_clock_receiver_->Advance( | 426 testing_clock_receiver_->Advance( |
426 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 427 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
427 cast_environment_sender_->Logging()->AddRawEventSubscriber( | 428 cast_environment_sender_->Logging()->AddRawEventSubscriber( |
428 &event_subscriber_sender_); | 429 &event_subscriber_sender_); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 CastReceiver::CreateCastReceiver(cast_environment_receiver_, | 496 CastReceiver::CreateCastReceiver(cast_environment_receiver_, |
496 audio_receiver_config_, | 497 audio_receiver_config_, |
497 video_receiver_config_, | 498 video_receiver_config_, |
498 &receiver_to_sender_)); | 499 &receiver_to_sender_)); |
499 net::IPEndPoint dummy_endpoint; | 500 net::IPEndPoint dummy_endpoint; |
500 transport_sender_.reset(new transport::CastTransportSenderImpl( | 501 transport_sender_.reset(new transport::CastTransportSenderImpl( |
501 NULL, | 502 NULL, |
502 testing_clock_sender_, | 503 testing_clock_sender_, |
503 dummy_endpoint, | 504 dummy_endpoint, |
504 dummy_endpoint, | 505 dummy_endpoint, |
| 506 logging_config_, |
505 base::Bind(&UpdateCastTransportStatus), | 507 base::Bind(&UpdateCastTransportStatus), |
| 508 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)), |
| 509 base::TimeDelta::FromSeconds(1), |
506 task_runner_, | 510 task_runner_, |
507 &sender_to_receiver_)); | 511 &sender_to_receiver_)); |
508 transport_sender_->InitializeAudio(transport_audio_config_); | 512 transport_sender_->InitializeAudio(transport_audio_config_); |
509 transport_sender_->InitializeVideo(transport_video_config_); | 513 transport_sender_->InitializeVideo(transport_video_config_); |
510 | 514 |
511 cast_sender_.reset(CastSender::CreateCastSender( | 515 cast_sender_.reset(CastSender::CreateCastSender( |
512 cast_environment_sender_, | 516 cast_environment_sender_, |
513 &audio_sender_config_, | 517 &audio_sender_config_, |
514 &video_sender_config_, | 518 &video_sender_config_, |
515 NULL, | 519 NULL, |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 testing_clock_sender_->Advance(base::TimeDelta::FromMilliseconds(1)); | 564 testing_clock_sender_->Advance(base::TimeDelta::FromMilliseconds(1)); |
561 testing_clock_receiver_->Advance(base::TimeDelta::FromMilliseconds(1)); | 565 testing_clock_receiver_->Advance(base::TimeDelta::FromMilliseconds(1)); |
562 task_runner_->RunTasks(); | 566 task_runner_->RunTasks(); |
563 } | 567 } |
564 } | 568 } |
565 | 569 |
566 void InitializationResult(CastInitializationStatus result) { | 570 void InitializationResult(CastInitializationStatus result) { |
567 EXPECT_EQ(result, STATUS_INITIALIZED); | 571 EXPECT_EQ(result, STATUS_INITIALIZED); |
568 } | 572 } |
569 | 573 |
| 574 void LogRawEvents(const std::vector<PacketEvent>& packet_events) { |
| 575 EXPECT_FALSE(packet_events.empty()); |
| 576 for (std::vector<media::cast::PacketEvent>::const_iterator it = |
| 577 packet_events.begin(); |
| 578 it != packet_events.end(); |
| 579 ++it) { |
| 580 cast_environment_sender_->Logging()->InsertPacketEvent(it->timestamp, |
| 581 it->type, |
| 582 it->rtp_timestamp, |
| 583 it->frame_id, |
| 584 it->packet_id, |
| 585 it->max_packet_id, |
| 586 it->size); |
| 587 } |
| 588 } |
| 589 |
570 AudioReceiverConfig audio_receiver_config_; | 590 AudioReceiverConfig audio_receiver_config_; |
571 VideoReceiverConfig video_receiver_config_; | 591 VideoReceiverConfig video_receiver_config_; |
572 AudioSenderConfig audio_sender_config_; | 592 AudioSenderConfig audio_sender_config_; |
573 VideoSenderConfig video_sender_config_; | 593 VideoSenderConfig video_sender_config_; |
574 transport::CastTransportAudioConfig transport_audio_config_; | 594 transport::CastTransportAudioConfig transport_audio_config_; |
575 transport::CastTransportVideoConfig transport_video_config_; | 595 transport::CastTransportVideoConfig transport_video_config_; |
576 | 596 |
577 base::TimeTicks start_time_; | 597 base::TimeTicks start_time_; |
578 base::SimpleTestTickClock* testing_clock_sender_; | 598 base::SimpleTestTickClock* testing_clock_sender_; |
579 base::SimpleTestTickClock* testing_clock_receiver_; | 599 base::SimpleTestTickClock* testing_clock_receiver_; |
580 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 600 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
| 601 CastLoggingConfig logging_config_; |
581 scoped_refptr<CastEnvironment> cast_environment_sender_; | 602 scoped_refptr<CastEnvironment> cast_environment_sender_; |
582 scoped_refptr<CastEnvironment> cast_environment_receiver_; | 603 scoped_refptr<CastEnvironment> cast_environment_receiver_; |
583 | 604 |
584 LoopBackTransport receiver_to_sender_; | 605 LoopBackTransport receiver_to_sender_; |
585 LoopBackTransport sender_to_receiver_; | 606 LoopBackTransport sender_to_receiver_; |
586 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_; | 607 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_; |
587 | 608 |
588 scoped_ptr<CastReceiver> cast_receiver_; | 609 scoped_ptr<CastReceiver> cast_receiver_; |
589 scoped_ptr<CastSender> cast_sender_; | 610 scoped_ptr<CastSender> cast_sender_; |
590 scoped_refptr<FrameInput> frame_input_; | 611 scoped_refptr<FrameInput> frame_input_; |
591 scoped_refptr<FrameReceiver> frame_receiver_; | 612 scoped_refptr<FrameReceiver> frame_receiver_; |
592 | 613 |
593 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; | 614 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; |
594 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; | 615 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; |
595 | 616 |
596 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; | 617 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; |
597 | 618 |
598 SimpleEventSubscriber event_subscriber_sender_; | 619 SimpleEventSubscriber event_subscriber_sender_; |
599 std::vector<FrameEvent> frame_events_; | 620 std::vector<FrameEvent> frame_events_; |
600 std::vector<PacketEvent> packet_events_; | 621 std::vector<PacketEvent> packet_events_; |
601 std::vector<GenericEvent> generic_events_; | 622 std::vector<GenericEvent> generic_events_; |
| 623 |
| 624 // |transport_sender_| has a RepeatingTimer which needs a MessageLoop. |
| 625 base::MessageLoop message_loop_; |
602 }; | 626 }; |
603 | 627 |
604 TEST_F(End2EndTest, LoopNoLossPcm16) { | 628 TEST_F(End2EndTest, LoopNoLossPcm16) { |
605 SetupConfig(transport::kPcm16, 32000, false, 1); | 629 SetupConfig(transport::kPcm16, 32000, false, 1); |
606 // Reduce video resolution to allow processing multiple frames within a | 630 // Reduce video resolution to allow processing multiple frames within a |
607 // reasonable time frame. | 631 // reasonable time frame. |
608 video_sender_config_.width = kVideoQcifWidth; | 632 video_sender_config_.width = kVideoQcifWidth; |
609 video_sender_config_.height = kVideoQcifHeight; | 633 video_sender_config_.height = kVideoQcifHeight; |
610 Create(); | 634 Create(); |
611 | 635 |
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame); | 1345 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame); |
1322 } | 1346 } |
1323 | 1347 |
1324 // TODO(pwestin): Add repeatable packet loss test. | 1348 // TODO(pwestin): Add repeatable packet loss test. |
1325 // TODO(pwestin): Add test for misaligned send get calls. | 1349 // TODO(pwestin): Add test for misaligned send get calls. |
1326 // TODO(pwestin): Add more tests that does not resample. | 1350 // TODO(pwestin): Add more tests that does not resample. |
1327 // TODO(pwestin): Add test when we have starvation for our RunTask. | 1351 // TODO(pwestin): Add test when we have starvation for our RunTask. |
1328 | 1352 |
1329 } // namespace cast | 1353 } // namespace cast |
1330 } // namespace media | 1354 } // namespace media |
OLD | NEW |