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

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

Issue 1515023002: Simplify interface for media/cast: CastTransportSenderImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « media/cast/test/cast_benchmarks.cc ('k') | media/cast/test/loopback_transport.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 compressed.reserve(base_16.size() / 2); 87 compressed.reserve(base_16.size() / 2);
88 88
89 std::vector<uint8_t> v; 89 std::vector<uint8_t> v;
90 if (!base::HexStringToBytes(base_16, &v)) { 90 if (!base::HexStringToBytes(base_16, &v)) {
91 NOTREACHED(); 91 NOTREACHED();
92 } 92 }
93 compressed.assign(reinterpret_cast<const char*>(&v[0]), v.size()); 93 compressed.assign(reinterpret_cast<const char*>(&v[0]), v.size());
94 return compressed; 94 return compressed;
95 } 95 }
96 96
97 void UpdateCastTransportStatus(CastTransportStatus status) {
98 bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
99 status == TRANSPORT_VIDEO_INITIALIZED);
100 EXPECT_TRUE(result);
101 }
102
103 void ExpectSuccessOperationalStatus(OperationalStatus status) { 97 void ExpectSuccessOperationalStatus(OperationalStatus status) {
104 EXPECT_EQ(STATUS_INITIALIZED, status); 98 EXPECT_EQ(STATUS_INITIALIZED, status);
105 } 99 }
106 100
107 // This is wrapped in a struct because it needs to be put into a std::map. 101 // This is wrapped in a struct because it needs to be put into a std::map.
108 typedef struct { int counter[kNumOfLoggingEvents]; } LoggingEventCounts; 102 typedef struct { int counter[kNumOfLoggingEvents]; } LoggingEventCounts;
109 103
110 // Constructs a map from each frame (RTP timestamp) to counts of each event 104 // Constructs a map from each frame (RTP timestamp) to counts of each event
111 // type logged for that frame. 105 // type logged for that frame.
112 std::map<RtpTimeTicks, LoggingEventCounts> GetEventCountsForFrameEvents( 106 std::map<RtpTimeTicks, LoggingEventCounts> GetEventCountsForFrameEvents(
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 return true; 200 return true;
207 } 201 }
208 202
209 scoped_ptr<Packet> packet_copy(new Packet(packet->data)); 203 scoped_ptr<Packet> packet_copy(new Packet(packet->data));
210 packet_pipe_->Send(std::move(packet_copy)); 204 packet_pipe_->Send(std::move(packet_copy));
211 return true; 205 return true;
212 } 206 }
213 207
214 int64_t GetBytesSent() final { return bytes_sent_; } 208 int64_t GetBytesSent() final { return bytes_sent_; }
215 209
210 void StartReceiving(
211 const PacketReceiverCallbackWithStatus& packet_receiver) final {}
212
213 void StopReceiving() final {}
214
216 void SetSendPackets(bool send_packets) { send_packets_ = send_packets; } 215 void SetSendPackets(bool send_packets) { send_packets_ = send_packets; }
217 216
218 void DropAllPacketsBelongingToOddFrames() { 217 void DropAllPacketsBelongingToOddFrames() {
219 drop_packets_belonging_to_odd_frames_ = true; 218 drop_packets_belonging_to_odd_frames_ = true;
220 } 219 }
221 220
222 void SetPacketPipe(scoped_ptr<test::PacketPipe> pipe) { 221 void SetPacketPipe(scoped_ptr<test::PacketPipe> pipe) {
223 // Append the loopback pipe to the end. 222 // Append the loopback pipe to the end.
224 pipe->AppendToPipe(std::move(packet_pipe_)); 223 pipe->AppendToPipe(std::move(packet_pipe_));
225 packet_pipe_ = std::move(pipe); 224 packet_pipe_ = std::move(pipe);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 int num_called_; 389 int num_called_;
391 std::list<ExpectedVideoFrame> expected_frame_; 390 std::list<ExpectedVideoFrame> expected_frame_;
392 base::TimeTicks last_playout_time_; 391 base::TimeTicks last_playout_time_;
393 }; 392 };
394 393
395 } // namespace 394 } // namespace
396 395
397 // The actual test class, generate synthetic data for both audio and video and 396 // The actual test class, generate synthetic data for both audio and video and
398 // send those through the sender and receiver and analyzes the result. 397 // send those through the sender and receiver and analyzes the result.
399 class End2EndTest : public ::testing::Test { 398 class End2EndTest : public ::testing::Test {
399 public:
400 void ReceivePacket(scoped_ptr<media::cast::Packet> packet) {
401 cast_receiver_->ReceivePacket(std::move(packet));
402 };
403
400 protected: 404 protected:
401 End2EndTest() 405 End2EndTest()
402 : start_time_(), 406 : start_time_(),
403 task_runner_(new test::FakeSingleThreadTaskRunner(&testing_clock_)), 407 task_runner_(new test::FakeSingleThreadTaskRunner(&testing_clock_)),
404 testing_clock_sender_(new test::SkewedTickClock(&testing_clock_)), 408 testing_clock_sender_(new test::SkewedTickClock(&testing_clock_)),
405 task_runner_sender_( 409 task_runner_sender_(
406 new test::SkewedSingleThreadTaskRunner(task_runner_)), 410 new test::SkewedSingleThreadTaskRunner(task_runner_)),
407 testing_clock_receiver_(new test::SkewedTickClock(&testing_clock_)), 411 testing_clock_receiver_(new test::SkewedTickClock(&testing_clock_)),
408 task_runner_receiver_( 412 task_runner_receiver_(
409 new test::SkewedSingleThreadTaskRunner(task_runner_)), 413 new test::SkewedSingleThreadTaskRunner(task_runner_)),
410 cast_environment_sender_(new CastEnvironment( 414 cast_environment_sender_(new CastEnvironment(
411 scoped_ptr<base::TickClock>(testing_clock_sender_), 415 scoped_ptr<base::TickClock>(testing_clock_sender_),
412 task_runner_sender_, 416 task_runner_sender_,
413 task_runner_sender_, 417 task_runner_sender_,
414 task_runner_sender_)), 418 task_runner_sender_)),
415 cast_environment_receiver_(new CastEnvironment( 419 cast_environment_receiver_(new CastEnvironment(
416 scoped_ptr<base::TickClock>(testing_clock_receiver_), 420 scoped_ptr<base::TickClock>(testing_clock_receiver_),
417 task_runner_receiver_, 421 task_runner_receiver_,
418 task_runner_receiver_, 422 task_runner_receiver_,
419 task_runner_receiver_)), 423 task_runner_receiver_)),
420 receiver_to_sender_(cast_environment_receiver_), 424 receiver_to_sender_(new LoopBackTransport(cast_environment_receiver_)),
421 sender_to_receiver_(cast_environment_sender_), 425 sender_to_receiver_(new LoopBackTransport(cast_environment_sender_)),
422 test_receiver_audio_callback_(new TestReceiverAudioCallback()), 426 test_receiver_audio_callback_(new TestReceiverAudioCallback()),
423 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 427 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
424 testing_clock_.Advance( 428 testing_clock_.Advance(
425 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 429 base::TimeDelta::FromMilliseconds(kStartMillisecond));
426 cast_environment_sender_->logger()->Subscribe(&event_subscriber_sender_); 430 cast_environment_sender_->logger()->Subscribe(&event_subscriber_sender_);
427 } 431 }
428 432
429 void Configure(Codec video_codec, Codec audio_codec) { 433 void Configure(Codec video_codec, Codec audio_codec) {
430 audio_sender_config_.ssrc = 1; 434 audio_sender_config_.ssrc = 1;
431 audio_sender_config_.receiver_ssrc = 2; 435 audio_sender_config_.receiver_ssrc = 2;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 546
543 void RequestAudioFrames(int count, bool with_check) { 547 void RequestAudioFrames(int count, bool with_check) {
544 for (int i = 0; i < count; ++i) { 548 for (int i = 0; i < count; ++i) {
545 cast_receiver_->RequestDecodedAudioFrame( 549 cast_receiver_->RequestDecodedAudioFrame(
546 base::Bind(with_check ? &TestReceiverAudioCallback::CheckAudioFrame : 550 base::Bind(with_check ? &TestReceiverAudioCallback::CheckAudioFrame :
547 &TestReceiverAudioCallback::IgnoreAudioFrame, 551 &TestReceiverAudioCallback::IgnoreAudioFrame,
548 test_receiver_audio_callback_)); 552 test_receiver_audio_callback_));
549 } 553 }
550 } 554 }
551 555
552 void ReceivePacket(scoped_ptr<Packet> packet) { 556 void Create();
553 cast_receiver_->ReceivePacket(std::move(packet));
554 }
555
556 void Create() {
557 net::IPEndPoint dummy_endpoint;
558 transport_sender_.reset(new CastTransportSenderImpl(
559 nullptr, testing_clock_sender_, dummy_endpoint, dummy_endpoint,
560 make_scoped_ptr(new base::DictionaryValue),
561 base::Bind(&UpdateCastTransportStatus),
562 base::Bind(&LogEventDispatcher::DispatchBatchOfEvents,
563 base::Unretained(cast_environment_sender_->logger())),
564 base::TimeDelta::FromMilliseconds(1), task_runner_sender_,
565 PacketReceiverCallback(), &sender_to_receiver_));
566
567 transport_receiver_.reset(new CastTransportSenderImpl(
568 nullptr, testing_clock_sender_, dummy_endpoint, dummy_endpoint,
569 make_scoped_ptr(new base::DictionaryValue),
570 base::Bind(&UpdateCastTransportStatus),
571 base::Bind(&LogEventDispatcher::DispatchBatchOfEvents,
572 base::Unretained(cast_environment_receiver_->logger())),
573 base::TimeDelta::FromMilliseconds(1), task_runner_sender_,
574 base::Bind(&End2EndTest::ReceivePacket, base::Unretained(this)),
575 &receiver_to_sender_));
576
577 cast_receiver_ = CastReceiver::Create(cast_environment_receiver_,
578 audio_receiver_config_,
579 video_receiver_config_,
580 transport_receiver_.get());
581
582 cast_sender_ =
583 CastSender::Create(cast_environment_sender_, transport_sender_.get());
584
585 // Initializing audio and video senders.
586 cast_sender_->InitializeAudio(
587 audio_sender_config_,
588 base::Bind(&ExpectSuccessOperationalStatus));
589 cast_sender_->InitializeVideo(
590 video_sender_config_,
591 base::Bind(&ExpectSuccessOperationalStatus),
592 CreateDefaultVideoEncodeAcceleratorCallback(),
593 CreateDefaultVideoEncodeMemoryCallback());
594 task_runner_->RunTasks();
595
596 receiver_to_sender_.SetPacketReceiver(
597 transport_sender_->PacketReceiverForTesting(),
598 task_runner_,
599 &testing_clock_);
600 sender_to_receiver_.SetPacketReceiver(
601 transport_receiver_->PacketReceiverForTesting(),
602 task_runner_,
603 &testing_clock_);
604
605 audio_frame_input_ = cast_sender_->audio_frame_input();
606 video_frame_input_ = cast_sender_->video_frame_input();
607
608 audio_bus_factory_.reset(
609 new TestAudioBusFactory(audio_sender_config_.channels,
610 audio_sender_config_.frequency,
611 kSoundFrequency,
612 kSoundVolume));
613 }
614 557
615 ~End2EndTest() override { 558 ~End2EndTest() override {
616 cast_environment_sender_->logger()->Unsubscribe(&event_subscriber_sender_); 559 cast_environment_sender_->logger()->Unsubscribe(&event_subscriber_sender_);
617 } 560 }
618 561
619 void TearDown() final { 562 void TearDown() final {
620 cast_sender_.reset(); 563 cast_sender_.reset();
621 cast_receiver_.reset(); 564 cast_receiver_.reset();
622 task_runner_->RunTasks(); 565 task_runner_->RunTasks();
623 } 566 }
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 base::TimeDelta min_video_playout_delta_; 852 base::TimeDelta min_video_playout_delta_;
910 base::TimeDelta max_video_playout_delta_; 853 base::TimeDelta max_video_playout_delta_;
911 base::TimeDelta max_video_playout_curvature_; 854 base::TimeDelta max_video_playout_curvature_;
912 base::TimeTicks last_video_playout_time_; 855 base::TimeTicks last_video_playout_time_;
913 base::TimeDelta last_video_playout_delta_; 856 base::TimeDelta last_video_playout_delta_;
914 base::TimeTicks last_audio_playout_time_; 857 base::TimeTicks last_audio_playout_time_;
915 858
916 scoped_refptr<CastEnvironment> cast_environment_sender_; 859 scoped_refptr<CastEnvironment> cast_environment_sender_;
917 scoped_refptr<CastEnvironment> cast_environment_receiver_; 860 scoped_refptr<CastEnvironment> cast_environment_receiver_;
918 861
919 LoopBackTransport receiver_to_sender_; 862 LoopBackTransport* receiver_to_sender_; // Owned by CastTransportSender.
920 LoopBackTransport sender_to_receiver_; 863 LoopBackTransport* sender_to_receiver_; // Owned by CastTransportSender.
864
921 scoped_ptr<CastTransportSenderImpl> transport_sender_; 865 scoped_ptr<CastTransportSenderImpl> transport_sender_;
922 scoped_ptr<CastTransportSenderImpl> transport_receiver_; 866 scoped_ptr<CastTransportSenderImpl> transport_receiver_;
923 867
924 scoped_ptr<CastReceiver> cast_receiver_; 868 scoped_ptr<CastReceiver> cast_receiver_;
925 scoped_ptr<CastSender> cast_sender_; 869 scoped_ptr<CastSender> cast_sender_;
926 scoped_refptr<AudioFrameInput> audio_frame_input_; 870 scoped_refptr<AudioFrameInput> audio_frame_input_;
927 scoped_refptr<VideoFrameInput> video_frame_input_; 871 scoped_refptr<VideoFrameInput> video_frame_input_;
928 872
929 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; 873 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_;
930 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; 874 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_;
931 875
932 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; 876 scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
933 877
934 SimpleEventSubscriber event_subscriber_sender_; 878 SimpleEventSubscriber event_subscriber_sender_;
935 879
936 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > audio_ticks_; 880 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > audio_ticks_;
937 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > video_ticks_; 881 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > video_ticks_;
938 882
939 // |transport_sender_| has a RepeatingTimer which needs a MessageLoop. 883 // |transport_sender_| has a RepeatingTimer which needs a MessageLoop.
940 base::MessageLoop message_loop_; 884 base::MessageLoop message_loop_;
941 }; 885 };
942 886
887 namespace {
888
889 class TransportClient : public CastTransportSender::Client {
890 public:
891 TransportClient(LogEventDispatcher* log_event_dispatcher,
892 End2EndTest* e2e_test)
893 : log_event_dispatcher_(log_event_dispatcher), e2e_test_(e2e_test) {}
894
895 void OnStatusChanged(media::cast::CastTransportStatus status) final {
896 bool result = (status == TRANSPORT_AUDIO_INITIALIZED ||
897 status == TRANSPORT_VIDEO_INITIALIZED);
898 EXPECT_TRUE(result);
899 };
900 void OnLoggingEventsReceived(
901 scoped_ptr<std::vector<FrameEvent>> frame_events,
902 scoped_ptr<std::vector<PacketEvent>> packet_events) final {
903 log_event_dispatcher_->DispatchBatchOfEvents(std::move(frame_events),
904 std::move(packet_events));
905 };
906 void ProcessRtpPacket(scoped_ptr<Packet> packet) final {
907 if (e2e_test_)
908 e2e_test_->ReceivePacket(std::move(packet));
909 };
910
911 private:
912 LogEventDispatcher* const log_event_dispatcher_; // Not owned by this class.
913 End2EndTest* const e2e_test_; // Not owned by this class.
914
915 DISALLOW_COPY_AND_ASSIGN(TransportClient);
916 };
917
918 } // namespace
919
920 void End2EndTest::Create() {
921 transport_sender_.reset(new CastTransportSenderImpl(
922 testing_clock_sender_, base::TimeDelta::FromMilliseconds(1),
923 make_scoped_ptr(
924 new TransportClient(cast_environment_sender_->logger(), nullptr)),
925 make_scoped_ptr(sender_to_receiver_), task_runner_sender_));
926
927 transport_receiver_.reset(new CastTransportSenderImpl(
928 testing_clock_sender_, base::TimeDelta::FromMilliseconds(1),
929 make_scoped_ptr(
930 new TransportClient(cast_environment_receiver_->logger(), this)),
931 make_scoped_ptr(receiver_to_sender_), task_runner_sender_));
932
933 cast_receiver_ =
934 CastReceiver::Create(cast_environment_receiver_, audio_receiver_config_,
935 video_receiver_config_, transport_receiver_.get());
936
937 cast_sender_ =
938 CastSender::Create(cast_environment_sender_, transport_sender_.get());
939
940 // Initializing audio and video senders.
941 cast_sender_->InitializeAudio(audio_sender_config_,
942 base::Bind(&ExpectSuccessOperationalStatus));
943 cast_sender_->InitializeVideo(video_sender_config_,
944 base::Bind(&ExpectSuccessOperationalStatus),
945 CreateDefaultVideoEncodeAcceleratorCallback(),
946 CreateDefaultVideoEncodeMemoryCallback());
947 task_runner_->RunTasks();
948
949 receiver_to_sender_->SetPacketReceiver(
950 transport_sender_->PacketReceiverForTesting(), task_runner_,
951 &testing_clock_);
952 sender_to_receiver_->SetPacketReceiver(
953 transport_receiver_->PacketReceiverForTesting(), task_runner_,
954 &testing_clock_);
955
956 audio_frame_input_ = cast_sender_->audio_frame_input();
957 video_frame_input_ = cast_sender_->video_frame_input();
958
959 audio_bus_factory_.reset(new TestAudioBusFactory(
960 audio_sender_config_.channels, audio_sender_config_.frequency,
961 kSoundFrequency, kSoundVolume));
962 }
963
943 TEST_F(End2EndTest, LoopWithLosslessEncoding) { 964 TEST_F(End2EndTest, LoopWithLosslessEncoding) {
944 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16); 965 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
945 Create(); 966 Create();
946 967
947 const auto frames_sent = RunAudioVideoLoop(base::TimeDelta::FromSeconds(3)); 968 const auto frames_sent = RunAudioVideoLoop(base::TimeDelta::FromSeconds(3));
948 969
949 // Make sure that we send a RTCP message containing receiver log data, then 970 // Make sure that we send a RTCP message containing receiver log data, then
950 // verify the accumulated logging data. 971 // verify the accumulated logging data.
951 RunTasks(750); 972 RunTasks(750);
952 VerifyLogging(frames_sent.first, frames_sent.second); 973 VerifyLogging(frames_sent.first, frames_sent.second);
(...skipping 20 matching lines...) Expand all
973 // discontinuity in the timeline, throwing off the test expectations. See TODOs 994 // discontinuity in the timeline, throwing off the test expectations. See TODOs
974 // in audio_receiver.cc for likely cause(s) of this bug. 995 // in audio_receiver.cc for likely cause(s) of this bug.
975 // http://crbug.com/573126 (history: http://crbug.com/314233) 996 // http://crbug.com/573126 (history: http://crbug.com/314233)
976 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) { 997 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
977 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16); 998 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
978 Create(); 999 Create();
979 1000
980 int frame_number = 0; 1001 int frame_number = 0;
981 int audio_diff = kFrameTimerMs; 1002 int audio_diff = kFrameTimerMs;
982 1003
983 sender_to_receiver_.SetSendPackets(false); 1004 sender_to_receiver_->SetSendPackets(false);
984 1005
985 const int test_delay_ms = 100; 1006 const int test_delay_ms = 100;
986 1007
987 const int kNumVideoFramesBeforeReceiverStarted = 2; 1008 const int kNumVideoFramesBeforeReceiverStarted = 2;
988 const base::TimeTicks initial_send_time = testing_clock_sender_->NowTicks(); 1009 const base::TimeTicks initial_send_time = testing_clock_sender_->NowTicks();
989 const base::TimeDelta expected_delay = 1010 const base::TimeDelta expected_delay =
990 base::TimeDelta::FromMilliseconds(test_delay_ms + kFrameTimerMs); 1011 base::TimeDelta::FromMilliseconds(test_delay_ms + kFrameTimerMs);
991 for (int i = 0; i < kNumVideoFramesBeforeReceiverStarted; ++i) { 1012 for (int i = 0; i < kNumVideoFramesBeforeReceiverStarted; ++i) {
992 const int num_audio_frames = audio_diff / kAudioFrameDurationMs; 1013 const int num_audio_frames = audio_diff / kAudioFrameDurationMs;
993 audio_diff -= num_audio_frames * kAudioFrameDurationMs; 1014 audio_diff -= num_audio_frames * kAudioFrameDurationMs;
(...skipping 14 matching lines...) Expand all
1008 if (num_audio_frames > 0) 1029 if (num_audio_frames > 0)
1009 RunTasks(kAudioFrameDurationMs); // Advance clock forward. 1030 RunTasks(kAudioFrameDurationMs); // Advance clock forward.
1010 if (num_audio_frames > 1) 1031 if (num_audio_frames > 1)
1011 FeedAudioFramesWithExpectedDelay(num_audio_frames - 1, expected_delay); 1032 FeedAudioFramesWithExpectedDelay(num_audio_frames - 1, expected_delay);
1012 1033
1013 RunTasks(kFrameTimerMs - kAudioFrameDurationMs); 1034 RunTasks(kFrameTimerMs - kAudioFrameDurationMs);
1014 audio_diff += kFrameTimerMs; 1035 audio_diff += kFrameTimerMs;
1015 } 1036 }
1016 1037
1017 RunTasks(test_delay_ms); 1038 RunTasks(test_delay_ms);
1018 sender_to_receiver_.SetSendPackets(true); 1039 sender_to_receiver_->SetSendPackets(true);
1019 1040
1020 int num_audio_frames_requested = 0; 1041 int num_audio_frames_requested = 0;
1021 for (int j = 0; j < 10; ++j) { 1042 for (int j = 0; j < 10; ++j) {
1022 const int num_audio_frames = audio_diff / kAudioFrameDurationMs; 1043 const int num_audio_frames = audio_diff / kAudioFrameDurationMs;
1023 audio_diff -= num_audio_frames * kAudioFrameDurationMs; 1044 audio_diff -= num_audio_frames * kAudioFrameDurationMs;
1024 1045
1025 if (num_audio_frames > 0) 1046 if (num_audio_frames > 0)
1026 FeedAudioFrames(1, true); 1047 FeedAudioFrames(1, true);
1027 1048
1028 test_receiver_video_callback_->AddExpectedResult( 1049 test_receiver_video_callback_->AddExpectedResult(
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 ++frames_counter) { 1156 ++frames_counter) {
1136 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks()); 1157 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks());
1137 RunTasks(kFrameTimerMs); 1158 RunTasks(kFrameTimerMs);
1138 } 1159 }
1139 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1160 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1140 EXPECT_EQ(static_cast<size_t>(kLongTestIterations), video_ticks_.size()); 1161 EXPECT_EQ(static_cast<size_t>(kLongTestIterations), video_ticks_.size());
1141 } 1162 }
1142 1163
1143 TEST_F(End2EndTest, EvilNetwork) { 1164 TEST_F(End2EndTest, EvilNetwork) {
1144 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16); 1165 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
1145 receiver_to_sender_.SetPacketPipe(test::EvilNetwork()); 1166 receiver_to_sender_->SetPacketPipe(test::EvilNetwork());
1146 sender_to_receiver_.SetPacketPipe(test::EvilNetwork()); 1167 sender_to_receiver_->SetPacketPipe(test::EvilNetwork());
1147 Create(); 1168 Create();
1148 StartBasicPlayer(); 1169 StartBasicPlayer();
1149 1170
1150 for (int frames_counter = 0; frames_counter < kLongTestIterations; 1171 for (int frames_counter = 0; frames_counter < kLongTestIterations;
1151 ++frames_counter) { 1172 ++frames_counter) {
1152 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks()); 1173 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks());
1153 RunTasks(kFrameTimerMs); 1174 RunTasks(kFrameTimerMs);
1154 } 1175 }
1155 base::TimeTicks test_end = testing_clock_receiver_->NowTicks(); 1176 base::TimeTicks test_end = testing_clock_receiver_->NowTicks();
1156 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1177 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1157 EXPECT_LT(static_cast<size_t>(kLongTestIterations / 100), 1178 EXPECT_LT(static_cast<size_t>(kLongTestIterations / 100),
1158 video_ticks_.size()); 1179 video_ticks_.size());
1159 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames."; 1180 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames.";
1160 EXPECT_GT(1000, (video_ticks_.back().second - test_end).InMilliseconds()); 1181 EXPECT_GT(1000, (video_ticks_.back().second - test_end).InMilliseconds());
1161 } 1182 }
1162 1183
1163 // Tests that a system configured for 30 FPS drops frames when input is provided 1184 // Tests that a system configured for 30 FPS drops frames when input is provided
1164 // at a much higher frame rate. 1185 // at a much higher frame rate.
1165 TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) { 1186 TEST_F(End2EndTest, ShoveHighFrameRateDownYerThroat) {
1166 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16); 1187 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
1167 receiver_to_sender_.SetPacketPipe(test::EvilNetwork()); 1188 receiver_to_sender_->SetPacketPipe(test::EvilNetwork());
1168 sender_to_receiver_.SetPacketPipe(test::EvilNetwork()); 1189 sender_to_receiver_->SetPacketPipe(test::EvilNetwork());
1169 Create(); 1190 Create();
1170 StartBasicPlayer(); 1191 StartBasicPlayer();
1171 1192
1172 for (int frames_counter = 0; frames_counter < kLongTestIterations; 1193 for (int frames_counter = 0; frames_counter < kLongTestIterations;
1173 ++frames_counter) { 1194 ++frames_counter) {
1174 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks()); 1195 SendVideoFrame(frames_counter, testing_clock_sender_->NowTicks());
1175 RunTasks(10 /* 10 ms, but 33.3 expected by system */); 1196 RunTasks(10 /* 10 ms, but 33.3 expected by system */);
1176 } 1197 }
1177 base::TimeTicks test_end = testing_clock_receiver_->NowTicks(); 1198 base::TimeTicks test_end = testing_clock_receiver_->NowTicks();
1178 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1199 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1179 EXPECT_LT(static_cast<size_t>(kLongTestIterations / 100), 1200 EXPECT_LT(static_cast<size_t>(kLongTestIterations / 100),
1180 video_ticks_.size()); 1201 video_ticks_.size());
1181 EXPECT_GE(static_cast<size_t>(kLongTestIterations / 3), video_ticks_.size()); 1202 EXPECT_GE(static_cast<size_t>(kLongTestIterations / 3), video_ticks_.size());
1182 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames."; 1203 VLOG(1) << "Fully transmitted " << video_ticks_.size() << " frames.";
1183 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000); 1204 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000);
1184 } 1205 }
1185 1206
1186 TEST_F(End2EndTest, OldPacketNetwork) { 1207 TEST_F(End2EndTest, OldPacketNetwork) {
1187 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16); 1208 Configure(CODEC_VIDEO_FAKE, CODEC_AUDIO_PCM16);
1188 sender_to_receiver_.SetPacketPipe(test::NewRandomDrop(0.01)); 1209 sender_to_receiver_->SetPacketPipe(test::NewRandomDrop(0.01));
1189 scoped_ptr<test::PacketPipe> echo_chamber( 1210 scoped_ptr<test::PacketPipe> echo_chamber(
1190 test::NewDuplicateAndDelay(1, 10 * kFrameTimerMs)); 1211 test::NewDuplicateAndDelay(1, 10 * kFrameTimerMs));
1191 echo_chamber->AppendToPipe( 1212 echo_chamber->AppendToPipe(
1192 test::NewDuplicateAndDelay(1, 20 * kFrameTimerMs)); 1213 test::NewDuplicateAndDelay(1, 20 * kFrameTimerMs));
1193 echo_chamber->AppendToPipe( 1214 echo_chamber->AppendToPipe(
1194 test::NewDuplicateAndDelay(1, 40 * kFrameTimerMs)); 1215 test::NewDuplicateAndDelay(1, 40 * kFrameTimerMs));
1195 echo_chamber->AppendToPipe( 1216 echo_chamber->AppendToPipe(
1196 test::NewDuplicateAndDelay(1, 80 * kFrameTimerMs)); 1217 test::NewDuplicateAndDelay(1, 80 * kFrameTimerMs));
1197 echo_chamber->AppendToPipe( 1218 echo_chamber->AppendToPipe(
1198 test::NewDuplicateAndDelay(1, 160 * kFrameTimerMs)); 1219 test::NewDuplicateAndDelay(1, 160 * kFrameTimerMs));
1199 1220
1200 receiver_to_sender_.SetPacketPipe(std::move(echo_chamber)); 1221 receiver_to_sender_->SetPacketPipe(std::move(echo_chamber));
1201 Create(); 1222 Create();
1202 StartBasicPlayer(); 1223 StartBasicPlayer();
1203 1224
1204 SetExpectedVideoPlayoutSmoothness( 1225 SetExpectedVideoPlayoutSmoothness(
1205 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100, 1226 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100,
1206 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100, 1227 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100,
1207 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10); 1228 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10);
1208 1229
1209 for (int frames_counter = 0; frames_counter < kLongTestIterations; 1230 for (int frames_counter = 0; frames_counter < kLongTestIterations;
1210 ++frames_counter) { 1231 ++frames_counter) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 EXPECT_EQ(0u, jump); 1270 EXPECT_EQ(0u, jump);
1250 jump = i; 1271 jump = i;
1251 } 1272 }
1252 } 1273 }
1253 EXPECT_GT(jump, 49u); 1274 EXPECT_GT(jump, 49u);
1254 EXPECT_LT(jump, 120u); 1275 EXPECT_LT(jump, 120u);
1255 } 1276 }
1256 1277
1257 } // namespace cast 1278 } // namespace cast
1258 } // namespace media 1279 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/cast_benchmarks.cc ('k') | media/cast/test/loopback_transport.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698