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

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

Issue 136903003: cast: Wire upp logging to be sent over RTCP between receiver and sender. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge TOT Created 6 years, 11 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/encode_decode_test.cc ('k') | media/cast/test/receiver.cc » ('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 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 protected: 315 protected:
316 virtual ~TestReceiverVideoCallback() {} 316 virtual ~TestReceiverVideoCallback() {}
317 317
318 private: 318 private:
319 friend class base::RefCountedThreadSafe<TestReceiverVideoCallback>; 319 friend class base::RefCountedThreadSafe<TestReceiverVideoCallback>;
320 320
321 int num_called_; 321 int num_called_;
322 std::list<ExpectedVideoFrame> expected_frame_; 322 std::list<ExpectedVideoFrame> expected_frame_;
323 }; 323 };
324 324
325 CastLoggingConfig EnableCastLoggingConfig() { 325 CastLoggingConfig EnableCastLoggingConfig(bool sender) {
326 CastLoggingConfig config; 326 CastLoggingConfig config(sender);
327 config.enable_raw_data_collection = true; 327 config.enable_raw_data_collection = true;
328 config.enable_stats_data_collection = true; 328 config.enable_stats_data_collection = true;
329 return config; 329 return config;
330 } 330 }
331 // The actual test class, generate synthetic data for both audio and video and 331 // The actual test class, generate synthetic data for both audio and video and
332 // send those through the sender and receiver and analyzes the result. 332 // send those through the sender and receiver and analyzes the result.
333 class End2EndTest : public ::testing::Test { 333 class End2EndTest : public ::testing::Test {
334 protected: 334 protected:
335 End2EndTest() 335 End2EndTest()
336 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), 336 : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
337 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, 337 cast_environment_sender_(new CastEnvironment(&testing_clock_,
338 task_runner_, task_runner_, task_runner_, task_runner_, 338 task_runner_, task_runner_, task_runner_, task_runner_,
339 task_runner_, EnableCastLoggingConfig())), 339 task_runner_, task_runner_, EnableCastLoggingConfig(true))),
340 cast_environment_receiver_(new CastEnvironment(&testing_clock_,
341 task_runner_, task_runner_, task_runner_, task_runner_,
342 task_runner_, task_runner_, EnableCastLoggingConfig(false))),
340 start_time_(), 343 start_time_(),
341 sender_to_receiver_(cast_environment_), 344 sender_to_receiver_(cast_environment_sender_),
342 receiver_to_sender_(cast_environment_), 345 receiver_to_sender_(cast_environment_receiver_),
343 test_receiver_audio_callback_(new TestReceiverAudioCallback()), 346 test_receiver_audio_callback_(new TestReceiverAudioCallback()),
344 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 347 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
345 testing_clock_.Advance( 348 testing_clock_.Advance(
346 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 349 base::TimeDelta::FromMilliseconds(kStartMillisecond));
347 } 350 }
348 351
349 void SetupConfig(transport::AudioCodec audio_codec, 352 void SetupConfig(transport::AudioCodec audio_codec,
350 int audio_sampling_frequency, 353 int audio_sampling_frequency,
351 // TODO(miu): 3rd arg is meaningless?!? 354 // TODO(miu): 3rd arg is meaningless?!?
352 bool external_audio_decoder, 355 bool external_audio_decoder,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 video_sender_config_.incoming_feedback_ssrc; 398 video_sender_config_.incoming_feedback_ssrc;
396 video_receiver_config_.incoming_ssrc = 399 video_receiver_config_.incoming_ssrc =
397 video_sender_config_.sender_ssrc; 400 video_sender_config_.sender_ssrc;
398 video_receiver_config_.rtp_payload_type = 401 video_receiver_config_.rtp_payload_type =
399 video_sender_config_.rtp_payload_type; 402 video_sender_config_.rtp_payload_type;
400 video_receiver_config_.use_external_decoder = false; 403 video_receiver_config_.use_external_decoder = false;
401 video_receiver_config_.codec = video_sender_config_.codec; 404 video_receiver_config_.codec = video_sender_config_.codec;
402 } 405 }
403 406
404 void Create() { 407 void Create() {
405 cast_receiver_.reset(CastReceiver::CreateCastReceiver(cast_environment_, 408 cast_receiver_.reset(CastReceiver::CreateCastReceiver(
406 audio_receiver_config_, video_receiver_config_, &receiver_to_sender_)); 409 cast_environment_receiver_,
410 audio_receiver_config_,
411 video_receiver_config_,
412 &receiver_to_sender_));
407 413
408 cast_sender_.reset(CastSender::CreateCastSender(cast_environment_, 414 cast_sender_.reset(CastSender::CreateCastSender(cast_environment_sender_,
409 audio_sender_config_, 415 audio_sender_config_,
410 video_sender_config_, 416 video_sender_config_,
411 NULL, 417 NULL,
412 &sender_to_receiver_)); 418 &sender_to_receiver_));
413 419
414 receiver_to_sender_.RegisterPacketReceiver(cast_sender_->packet_receiver()); 420 receiver_to_sender_.RegisterPacketReceiver(cast_sender_->packet_receiver());
415 sender_to_receiver_.RegisterPacketReceiver( 421 sender_to_receiver_.RegisterPacketReceiver(
416 cast_receiver_->packet_receiver()); 422 cast_receiver_->packet_receiver());
417 423
418 frame_input_ = cast_sender_->frame_input(); 424 frame_input_ = cast_sender_->frame_input();
(...skipping 29 matching lines...) Expand all
448 } 454 }
449 } 455 }
450 456
451 AudioReceiverConfig audio_receiver_config_; 457 AudioReceiverConfig audio_receiver_config_;
452 VideoReceiverConfig video_receiver_config_; 458 VideoReceiverConfig video_receiver_config_;
453 AudioSenderConfig audio_sender_config_; 459 AudioSenderConfig audio_sender_config_;
454 VideoSenderConfig video_sender_config_; 460 VideoSenderConfig video_sender_config_;
455 461
456 base::SimpleTestTickClock testing_clock_; 462 base::SimpleTestTickClock testing_clock_;
457 scoped_refptr<test::FakeTaskRunner> task_runner_; 463 scoped_refptr<test::FakeTaskRunner> task_runner_;
458 scoped_refptr<CastEnvironment> cast_environment_; 464 scoped_refptr<CastEnvironment> cast_environment_sender_;
465 scoped_refptr<CastEnvironment> cast_environment_receiver_;
459 base::TimeTicks start_time_; 466 base::TimeTicks start_time_;
460 467
461 LoopBackTransport sender_to_receiver_; 468 LoopBackTransport sender_to_receiver_;
462 LoopBackTransport receiver_to_sender_; 469 LoopBackTransport receiver_to_sender_;
463 470
464 scoped_ptr<CastReceiver> cast_receiver_; 471 scoped_ptr<CastReceiver> cast_receiver_;
465 scoped_ptr<CastSender> cast_sender_; 472 scoped_ptr<CastSender> cast_sender_;
466 scoped_refptr<FrameInput> frame_input_; 473 scoped_refptr<FrameInput> frame_input_;
467 scoped_refptr<FrameReceiver> frame_receiver_; 474 scoped_refptr<FrameReceiver> frame_receiver_;
468 475
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
926 frame_receiver_->GetRawVideoFrame( 933 frame_receiver_->GetRawVideoFrame(
927 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 934 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
928 test_receiver_video_callback_)); 935 test_receiver_video_callback_));
929 936
930 video_start++; 937 video_start++;
931 } 938 }
932 939
933 // Basic tests. 940 // Basic tests.
934 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 941 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
935 EXPECT_EQ(i, test_receiver_video_callback_->number_times_called()); 942 EXPECT_EQ(i, test_receiver_video_callback_->number_times_called());
936 // Logging tests.
937 LoggingImpl* logging = cast_environment_->Logging();
938 943
939 // Frame logging. 944 // Sender logging tests.
945 LoggingImpl* sender_log = cast_environment_sender_->Logging();
940 946
941 // Verify that all frames and all required events were logged. 947 // Verify that all frames and all required events were logged.
942 FrameRawMap frame_raw_log = logging->GetFrameRawData(); 948 FrameRawMap frame_raw_log = sender_log->GetFrameRawData();
949
943 // Every frame should have only one entry. 950 // Every frame should have only one entry.
944 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size()); 951 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size());
945 FrameRawMap::const_iterator frame_it = frame_raw_log.begin(); 952 FrameRawMap::const_iterator frame_it = frame_raw_log.begin();
953
946 // Choose a video frame, and verify that all events were logged. 954 // Choose a video frame, and verify that all events were logged.
947 std::vector<CastLoggingEvent> event_log = frame_it->second.type; 955 std::vector<CastLoggingEvent> event_log = frame_it->second.type;
948 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 956 std::vector<CastLoggingEvent>::iterator event_it;
949 kVideoFrameReceived)) != event_log.end()); 957 event_it = std::find(event_log.begin(), event_log.end(),
950 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 958 kVideoFrameSentToEncoder);
951 kVideoFrameSentToEncoder)) != event_log.end()); 959 EXPECT_TRUE(event_it != event_log.end());
952 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 960 event_log.erase(event_it);
953 kVideoFrameEncoded)) != event_log.end()); 961
954 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 962 event_it = std::find(event_log.begin(), event_log.end(),
955 kVideoRenderDelay)) != event_log.end()); 963 kVideoFrameEncoded);
964 EXPECT_TRUE(event_it != event_log.end());
965 event_log.erase(event_it);
966
967 event_it = std::find(event_log.begin(), event_log.end(),
968 kVideoFrameReceived);
969 EXPECT_TRUE(event_it != event_log.end());
970 event_log.erase(event_it);
971
972 event_it = std::find(event_log.begin(), event_log.end(),
973 kVideoRenderDelay);
974 EXPECT_TRUE(event_it != event_log.end());
975 event_log.erase(event_it);
976
956 // TODO(mikhal): Plumb this one through. 977 // TODO(mikhal): Plumb this one through.
957 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 978 event_it = std::find(event_log.begin(), event_log.end(),
958 kVideoFrameDecoded)) == event_log.end()); 979 kVideoFrameDecoded);
980 EXPECT_TRUE(event_it == event_log.end());
981
959 // Verify that there were no other events logged with respect to this frame. 982 // Verify that there were no other events logged with respect to this frame.
960 EXPECT_EQ(4u, event_log.size()); 983 EXPECT_EQ(0u, event_log.size());
961 984
962 // Packet logging. 985 // Packet logging.
963 // Verify that all packet related events were logged. 986 // Verify that all packet related events were logged.
964 PacketRawMap packet_raw_log = logging->GetPacketRawData(); 987 PacketRawMap packet_raw_log = sender_log->GetPacketRawData();
965 // Every rtp_timestamp should have only one entry. 988 // Every rtp_timestamp should have only one entry.
966 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size()); 989 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size());
967 PacketRawMap::const_iterator packet_it = packet_raw_log.begin(); 990 PacketRawMap::const_iterator packet_it = packet_raw_log.begin();
968 // Choose a packet, and verify that all events were logged. 991 // Choose a packet, and verify that all events were logged.
969 event_log = (++(packet_it->second.packet_map.begin()))->second.type; 992 event_log = (++(packet_it->second.packet_map.begin()))->second.type;
970 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 993 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
971 kPacketReceived)) != event_log.end()); 994 kVideoPacketReceived)) != event_log.end());
972 // Verify that there were no other events logged with respect to this frame. 995 // Verify that there were no other events logged with respect to this frame.
973 EXPECT_EQ(1u, event_log.size()); 996 EXPECT_EQ(1u, event_log.size());
997
998 RunTasks(750); // Make sure that we send a RTCP message with the log.
999
1000 // Receiver logging tests.
1001 LoggingImpl* receiver_log = cast_environment_receiver_->Logging();
1002
1003 // Verify that all frames and all required events were logged.
1004 frame_raw_log = receiver_log->GetFrameRawData();
1005 EXPECT_EQ(static_cast<unsigned int>(i), frame_raw_log.size());
1006 frame_it = frame_raw_log.begin();
1007
1008 // Choose a video frame, and verify that all events were logged.
1009 event_log = frame_it->second.type;
1010
1011 event_it = std::find(event_log.begin(), event_log.end(),
1012 kVideoFrameEncoded);
1013 EXPECT_TRUE(event_it != event_log.end());
1014
1015 event_it = std::find(event_log.begin(), event_log.end(),
1016 kVideoRenderDelay);
1017
1018 EXPECT_TRUE(event_it != event_log.end());
1019 EXPECT_EQ(2u, event_log.size());
974 } 1020 }
975 1021
976 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 1022 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563
977 #if defined(OS_WIN) 1023 #if defined(OS_WIN)
978 #define MAYBE_AudioLogging DISABLED_AudioLogging 1024 #define MAYBE_AudioLogging DISABLED_AudioLogging
979 #else 1025 #else
980 #define MAYBE_AudioLogging AudioLogging 1026 #define MAYBE_AudioLogging AudioLogging
981 #endif 1027 #endif
982 // Audio test without packet loss; This test is targeted at testing the logging 1028 // Audio test without packet loss; This test is targeted at testing the logging
983 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. 1029 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 base::Bind(&TestReceiverAudioCallback::CheckPcmAudioFrame, 1069 base::Bind(&TestReceiverAudioCallback::CheckPcmAudioFrame,
1024 test_receiver_audio_callback_)); 1070 test_receiver_audio_callback_));
1025 } 1071 }
1026 } 1072 }
1027 1073
1028 // Basic tests. 1074 // Basic tests.
1029 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 1075 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
1030 //EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); 1076 //EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called());
1031 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); 1077 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called());
1032 // Logging tests. 1078 // Logging tests.
1033 LoggingImpl* logging = cast_environment_->Logging(); 1079 LoggingImpl* sender_log = cast_environment_sender_->Logging();
1034 // Verify that all frames and all required events were logged. 1080 // Verify that all frames and all required events were logged.
1035 FrameRawMap frame_raw_log = logging->GetFrameRawData(); 1081 FrameRawMap frame_raw_log = sender_log->GetFrameRawData();
1036 // TODO(mikhal): Results are wrong. Need to resolve passing/calculation of 1082 // TODO(mikhal): Results are wrong. Need to resolve passing/calculation of
1037 // rtp_timestamp for audio for this to work. 1083 // rtp_timestamp for audio for this to work.
1038 // Should have logged both audio and video. Every frame should have only one 1084 // Should have logged both audio and video. Every frame should have only one
1039 // entry. 1085 // entry.
1040 //EXPECT_EQ(static_cast<unsigned int>(i - 1), frame_raw_log.size()); 1086 //EXPECT_EQ(static_cast<unsigned int>(i - 1), frame_raw_log.size());
1041 FrameRawMap::const_iterator frame_it = frame_raw_log.begin(); 1087 FrameRawMap::const_iterator frame_it = frame_raw_log.begin();
1042 // Choose a video frame, and verify that all events were logged. 1088 // Choose a video frame, and verify that all events were logged.
1043 std::vector<CastLoggingEvent> event_log = frame_it->second.type; 1089 std::vector<CastLoggingEvent> event_log = frame_it->second.type;
1044 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 1090 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
1045 kAudioFrameReceived)) != event_log.end()); 1091 kAudioFrameReceived)) != event_log.end());
1046 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 1092 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
1047 kAudioFrameEncoded)) != event_log.end()); 1093 kAudioFrameEncoded)) != event_log.end());
1048 // EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 1094 // EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
1049 // kAudioPlayoutDelay)) != event_log.end()); 1095 // kAudioPlayoutDelay)) != event_log.end());
1050 // TODO(mikhal): Plumb this one through. 1096 // TODO(mikhal): Plumb this one through.
1051 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 1097 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
1052 kAudioFrameDecoded)) == event_log.end()); 1098 kAudioFrameDecoded)) == event_log.end());
1053 // Verify that there were no other events logged with respect to this frame. 1099 // Verify that there were no other events logged with respect to this frame.
1054 EXPECT_EQ(2u, event_log.size()); 1100 EXPECT_EQ(2u, event_log.size());
1055 } 1101 }
1056 1102
1057 1103
1058 // TODO(pwestin): Add repeatable packet loss test. 1104 // TODO(pwestin): Add repeatable packet loss test.
1059 // TODO(pwestin): Add test for misaligned send get calls. 1105 // TODO(pwestin): Add test for misaligned send get calls.
1060 // TODO(pwestin): Add more tests that does not resample. 1106 // TODO(pwestin): Add more tests that does not resample.
1061 // TODO(pwestin): Add test when we have starvation for our RunTask. 1107 // TODO(pwestin): Add test when we have starvation for our RunTask.
1062 1108
1063 } // namespace cast 1109 } // namespace cast
1064 } // namespace media 1110 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/encode_decode_test.cc ('k') | media/cast/test/receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698