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