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

Side by Side Diff: media/cast/test/end2end_unittest.cc

Issue 178073004: Cast: IPC from browser to renderer to send packet events from transport to cast library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change to DVLOG(1) Created 6 years, 10 months 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 // 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 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 }; 387 };
388 388
389 // The actual test class, generate synthetic data for both audio and video and 389 // The actual test class, generate synthetic data for both audio and video and
390 // send those through the sender and receiver and analyzes the result. 390 // send those through the sender and receiver and analyzes the result.
391 class End2EndTest : public ::testing::Test { 391 class End2EndTest : public ::testing::Test {
392 protected: 392 protected:
393 End2EndTest() 393 End2EndTest()
394 : start_time_(), 394 : start_time_(),
395 testing_clock_(new base::SimpleTestTickClock()), 395 testing_clock_(new base::SimpleTestTickClock()),
396 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), 396 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
397 logging_config_(GetLoggingConfigWithRawEventsAndStatsEnabled()),
397 cast_environment_(new CastEnvironment( 398 cast_environment_(new CastEnvironment(
398 scoped_ptr<base::TickClock>(testing_clock_).Pass(), 399 scoped_ptr<base::TickClock>(testing_clock_).Pass(),
399 task_runner_, 400 task_runner_,
400 task_runner_, 401 task_runner_,
401 task_runner_, 402 task_runner_,
402 task_runner_, 403 task_runner_,
403 task_runner_, 404 task_runner_,
404 task_runner_, 405 task_runner_,
405 GetLoggingConfigWithRawEventsAndStatsEnabled())), 406 logging_config_)),
406 receiver_to_sender_(cast_environment_), 407 receiver_to_sender_(cast_environment_),
407 sender_to_receiver_(cast_environment_), 408 sender_to_receiver_(cast_environment_),
408 test_receiver_audio_callback_(new TestReceiverAudioCallback()), 409 test_receiver_audio_callback_(new TestReceiverAudioCallback()),
409 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 410 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
410 testing_clock_->Advance( 411 testing_clock_->Advance(
411 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 412 base::TimeDelta::FromMilliseconds(kStartMillisecond));
412 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_); 413 cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
413 } 414 }
414 415
415 void SetupConfig(transport::AudioCodec audio_codec, 416 void SetupConfig(transport::AudioCodec audio_codec,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 void Create() { 478 void Create() {
478 cast_receiver_.reset( 479 cast_receiver_.reset(
479 CastReceiver::CreateCastReceiver(cast_environment_, 480 CastReceiver::CreateCastReceiver(cast_environment_,
480 audio_receiver_config_, 481 audio_receiver_config_,
481 video_receiver_config_, 482 video_receiver_config_,
482 &receiver_to_sender_)); 483 &receiver_to_sender_));
483 transport_sender_.reset(new transport::CastTransportSenderImpl( 484 transport_sender_.reset(new transport::CastTransportSenderImpl(
484 NULL, 485 NULL,
485 testing_clock_, 486 testing_clock_,
486 transport_config_, 487 transport_config_,
488 logging_config_,
487 base::Bind(&UpdateCastTransportStatus), 489 base::Bind(&UpdateCastTransportStatus),
490 base::Bind(&End2EndTest::LogRawEvents, base::Unretained(this)),
491 base::TimeDelta::FromSeconds(1),
488 task_runner_, 492 task_runner_,
489 &sender_to_receiver_)); 493 &sender_to_receiver_));
490 494
491 cast_sender_.reset(CastSender::CreateCastSender( 495 cast_sender_.reset(CastSender::CreateCastSender(
492 cast_environment_, 496 cast_environment_,
493 &audio_sender_config_, 497 &audio_sender_config_,
494 &video_sender_config_, 498 &video_sender_config_,
495 NULL, 499 NULL,
496 base::Bind(&End2EndTest::InitializationResult, base::Unretained(this)), 500 base::Bind(&End2EndTest::InitializationResult, base::Unretained(this)),
497 transport_sender_.get())); 501 transport_sender_.get()));
498 502
499 receiver_to_sender_.SetPacketReceiver(cast_sender_->packet_receiver()); 503 receiver_to_sender_.SetPacketReceiver(cast_sender_->packet_receiver());
500 sender_to_receiver_.SetPacketReceiver(cast_receiver_->packet_receiver()); 504 sender_to_receiver_.SetPacketReceiver(cast_receiver_->packet_receiver());
501 505
502 frame_input_ = cast_sender_->frame_input(); 506 frame_input_ = cast_sender_->frame_input();
503 frame_receiver_ = cast_receiver_->frame_receiver(); 507 frame_receiver_ = cast_receiver_->frame_receiver();
504 508
505 audio_bus_factory_.reset( 509 audio_bus_factory_.reset(
506 new TestAudioBusFactory(audio_sender_config_.channels, 510 new TestAudioBusFactory(audio_sender_config_.channels,
507 audio_sender_config_.frequency, 511 audio_sender_config_.frequency,
508 kSoundFrequency, 512 kSoundFrequency,
509 kSoundVolume)); 513 kSoundVolume));
510 } 514 }
511 515
512 virtual ~End2EndTest() { 516 virtual ~End2EndTest() {
513 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_); 517 cast_environment_->Logging()->RemoveRawEventSubscriber(&event_subscriber_);
514 } 518 }
515 519
516 virtual void TearDown() OVERRIDE { 520 virtual void TearDown() OVERRIDE {
517
518 cast_sender_.reset(); 521 cast_sender_.reset();
519 cast_receiver_.reset(); 522 cast_receiver_.reset();
520 task_runner_->RunTasks(); 523 task_runner_->RunTasks();
521 } 524 }
522 525
523 void SendVideoFrame(int start_value, const base::TimeTicks& capture_time) { 526 void SendVideoFrame(int start_value, const base::TimeTicks& capture_time) {
524 if (start_time_.is_null()) 527 if (start_time_.is_null())
525 start_time_ = capture_time; 528 start_time_ = capture_time;
526 base::TimeDelta time_diff = capture_time - start_time_; 529 base::TimeDelta time_diff = capture_time - start_time_;
527 gfx::Size size(video_sender_config_.width, video_sender_config_.height); 530 gfx::Size size(video_sender_config_.width, video_sender_config_.height);
(...skipping 11 matching lines...) Expand all
539 // Call process the timers every 1 ms. 542 // Call process the timers every 1 ms.
540 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1)); 543 testing_clock_->Advance(base::TimeDelta::FromMilliseconds(1));
541 task_runner_->RunTasks(); 544 task_runner_->RunTasks();
542 } 545 }
543 } 546 }
544 547
545 void InitializationResult(CastInitializationStatus result) { 548 void InitializationResult(CastInitializationStatus result) {
546 EXPECT_EQ(result, STATUS_INITIALIZED); 549 EXPECT_EQ(result, STATUS_INITIALIZED);
547 } 550 }
548 551
552 void LogRawEvents(const std::vector<PacketEvent>& packet_events) {
553 EXPECT_FALSE(packet_events.empty());
554 for (std::vector<media::cast::PacketEvent>::const_iterator it =
555 packet_events.begin();
556 it != packet_events.end();
557 ++it) {
558 cast_environment_->Logging()->InsertPacketEvent(it->timestamp,
559 it->type,
560 it->rtp_timestamp,
561 it->frame_id,
562 it->packet_id,
563 it->max_packet_id,
564 it->size);
565 }
566 }
567
549 AudioReceiverConfig audio_receiver_config_; 568 AudioReceiverConfig audio_receiver_config_;
550 VideoReceiverConfig video_receiver_config_; 569 VideoReceiverConfig video_receiver_config_;
551 AudioSenderConfig audio_sender_config_; 570 AudioSenderConfig audio_sender_config_;
552 VideoSenderConfig video_sender_config_; 571 VideoSenderConfig video_sender_config_;
553 transport::CastTransportConfig transport_config_; 572 transport::CastTransportConfig transport_config_;
554 573
555 base::TimeTicks start_time_; 574 base::TimeTicks start_time_;
556 base::SimpleTestTickClock* testing_clock_; 575 base::SimpleTestTickClock* testing_clock_;
557 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 576 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
577 CastLoggingConfig logging_config_;
558 scoped_refptr<CastEnvironment> cast_environment_; 578 scoped_refptr<CastEnvironment> cast_environment_;
559 579
560 LoopBackTransport receiver_to_sender_; 580 LoopBackTransport receiver_to_sender_;
561 LoopBackTransport sender_to_receiver_; 581 LoopBackTransport sender_to_receiver_;
562 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_; 582 scoped_ptr<transport::CastTransportSenderImpl> transport_sender_;
563 583
564 scoped_ptr<CastReceiver> cast_receiver_; 584 scoped_ptr<CastReceiver> cast_receiver_;
565 scoped_ptr<CastSender> cast_sender_; 585 scoped_ptr<CastSender> cast_sender_;
566 scoped_refptr<FrameInput> frame_input_; 586 scoped_refptr<FrameInput> frame_input_;
567 scoped_refptr<FrameReceiver> frame_receiver_; 587 scoped_refptr<FrameReceiver> frame_receiver_;
568 588
569 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; 589 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_;
570 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; 590 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_;
571 591
572 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; 592 scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
573 593
574 SimpleEventSubscriber event_subscriber_; 594 SimpleEventSubscriber event_subscriber_;
575 std::vector<FrameEvent> frame_events_; 595 std::vector<FrameEvent> frame_events_;
576 std::vector<PacketEvent> packet_events_; 596 std::vector<PacketEvent> packet_events_;
577 std::vector<GenericEvent> generic_events_; 597 std::vector<GenericEvent> generic_events_;
598
599 // For transport_sender_.
600 base::MessageLoopForIO message_loop_;
dcheng 2014/02/27 22:27:20 Where is this used?
imcheng 2014/02/28 00:15:06 CastTransportSenderImpl creates a RepeatingTimer w
dcheng 2014/02/28 19:46:11 OK, perhaps add a reference to the fact that CastT
imcheng 2014/03/03 19:00:09 Changed comments. I also changed it to a MessageLo
578 }; 601 };
579 602
580 #if defined(OS_WIN) 603 #if defined(OS_WIN)
581 #define MAYBE_LoopNoLossPcm16 DISABLED_LoopNoLossPcm16 604 #define MAYBE_LoopNoLossPcm16 DISABLED_LoopNoLossPcm16
582 #else 605 #else
583 #define MAYBE_LoopNoLossPcm16 LoopNoLossPcm16 606 #define MAYBE_LoopNoLossPcm16 LoopNoLossPcm16
584 #endif 607 #endif
585 // TODO(mikhal): Crashes in win bots (http://crbug.com/329563) 608 // TODO(mikhal): Crashes in win bots (http://crbug.com/329563)
586 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16) { 609 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16) {
587 SetupConfig(transport::kPcm16, 32000, false, 1); 610 SetupConfig(transport::kPcm16, 32000, false, 1);
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
1285 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame); 1308 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame);
1286 } 1309 }
1287 1310
1288 // TODO(pwestin): Add repeatable packet loss test. 1311 // TODO(pwestin): Add repeatable packet loss test.
1289 // TODO(pwestin): Add test for misaligned send get calls. 1312 // TODO(pwestin): Add test for misaligned send get calls.
1290 // TODO(pwestin): Add more tests that does not resample. 1313 // TODO(pwestin): Add more tests that does not resample.
1291 // TODO(pwestin): Add test when we have starvation for our RunTask. 1314 // TODO(pwestin): Add test when we have starvation for our RunTask.
1292 1315
1293 } // namespace cast 1316 } // namespace cast
1294 } // namespace media 1317 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698