| 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 #include <ctime> | 5 #include <ctime> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_enumerator.h" | 8 #include "base/files/file_enumerator.h" |
| 9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
| 10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 content::WebContents* tab = | 148 content::WebContents* tab = |
| 149 browser()->tab_strip_model()->GetActiveWebContents(); | 149 browser()->tab_strip_model()->GetActiveWebContents(); |
| 150 | 150 |
| 151 // Prepare the peer connections manually in this test since we don't add | 151 // Prepare the peer connections manually in this test since we don't add |
| 152 // getUserMedia-derived media streams in this test like the other tests. | 152 // getUserMedia-derived media streams in this test like the other tests. |
| 153 EXPECT_EQ("ok-peerconnection-created", | 153 EXPECT_EQ("ok-peerconnection-created", |
| 154 ExecuteJavascript("preparePeerConnection()", tab)); | 154 ExecuteJavascript("preparePeerConnection()", tab)); |
| 155 return tab; | 155 return tab; |
| 156 } | 156 } |
| 157 | 157 |
| 158 void MuteMediaElement(const std::string& element_id, |
| 159 content::WebContents* tab_contents) { |
| 160 EXPECT_EQ("ok-muted", ExecuteJavascript( |
| 161 "setMediaElementMuted('" + element_id + "', true)", tab_contents)); |
| 162 } |
| 163 |
| 158 protected: | 164 protected: |
| 159 void TestAutoGainControl(const base::FilePath::StringType& reference_filename, | 165 void TestAutoGainControl(const base::FilePath::StringType& reference_filename, |
| 160 const std::string& constraints, | 166 const std::string& constraints, |
| 161 const std::string& perf_modifier); | 167 const std::string& perf_modifier); |
| 162 void SetupAndRecordAudioCall(const base::FilePath& reference_file, | 168 void SetupAndRecordAudioCall(const base::FilePath& reference_file, |
| 163 const base::FilePath& recording, | 169 const base::FilePath& recording, |
| 164 const std::string& constraints, | 170 const std::string& constraints, |
| 165 const base::TimeDelta recording_time); | 171 const base::TimeDelta recording_time); |
| 166 }; | 172 }; |
| 167 | 173 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 if (!base::GetAppOutput(command_line, &result)) { | 265 if (!base::GetAppOutput(command_line, &result)) { |
| 260 LOG(ERROR) << "Failed to set source volume: output was " << result; | 266 LOG(ERROR) << "Failed to set source volume: output was " << result; |
| 261 return false; | 267 return false; |
| 262 } | 268 } |
| 263 #elif defined(OS_MACOSX) | 269 #elif defined(OS_MACOSX) |
| 264 base::CommandLine command_line( | 270 base::CommandLine command_line( |
| 265 base::FilePath(FILE_PATH_LITERAL("osascript"))); | 271 base::FilePath(FILE_PATH_LITERAL("osascript"))); |
| 266 command_line.AppendArg("-e"); | 272 command_line.AppendArg("-e"); |
| 267 command_line.AppendArg("set volume input volume 100"); | 273 command_line.AppendArg("set volume input volume 100"); |
| 268 command_line.AppendArg("-e"); | 274 command_line.AppendArg("-e"); |
| 269 command_line.AppendArg("set volume output volume 100"); | 275 command_line.AppendArg("set volume output volume 85"); |
| 270 | 276 |
| 271 std::string result; | 277 std::string result; |
| 272 if (!base::GetAppOutput(command_line, &result)) { | 278 if (!base::GetAppOutput(command_line, &result)) { |
| 273 LOG(ERROR) << "Failed to set source volume: output was " << result; | 279 LOG(ERROR) << "Failed to set source volume: output was " << result; |
| 274 return false; | 280 return false; |
| 275 } | 281 } |
| 276 #else | 282 #else |
| 277 // Just force the volume of, say the first 5 devices. A machine will rarely | 283 // Just force the volume of, say the first 5 devices. A machine will rarely |
| 278 // have more input sources than that. This is way easier than finding the | 284 // have more input sources than that. This is way easier than finding the |
| 279 // input device we happen to be using. | 285 // input device we happen to be using. |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 558 "audio_pesq", perf_modifier, "raw_mos", raw_mos, "score", true); | 564 "audio_pesq", perf_modifier, "raw_mos", raw_mos, "score", true); |
| 559 perf_test::PrintResult( | 565 perf_test::PrintResult( |
| 560 "audio_pesq", perf_modifier, "mos_lqo", mos_lqo, "score", true); | 566 "audio_pesq", perf_modifier, "mos_lqo", mos_lqo, "score", true); |
| 561 | 567 |
| 562 EXPECT_TRUE(base::DeleteFile(trimmed_reference, false)); | 568 EXPECT_TRUE(base::DeleteFile(trimmed_reference, false)); |
| 563 EXPECT_TRUE(base::DeleteFile(trimmed_recording, false)); | 569 EXPECT_TRUE(base::DeleteFile(trimmed_recording, false)); |
| 564 } | 570 } |
| 565 | 571 |
| 566 } // namespace | 572 } // namespace |
| 567 | 573 |
| 568 // Sets up a one-way WebRTC call and records its output to |recording|, using | 574 // Sets up a two-way WebRTC call and records its output to |recording|, using |
| 569 // getUserMedia. | 575 // getUserMedia. |
| 570 // | 576 // |
| 571 // |reference_file| should have at least two seconds of silence in the | 577 // |reference_file| should have at least two seconds of silence in the |
| 572 // beginning: otherwise all the reference audio will not be picked up by the | 578 // beginning: otherwise all the reference audio will not be picked up by the |
| 573 // recording. Note that the reference file will start playing as soon as the | 579 // recording. Note that the reference file will start playing as soon as the |
| 574 // audio device is up following the getUserMedia call in the left tab. The time | 580 // audio device is up following the getUserMedia call in the left tab. The time |
| 575 // it takes to negotiate a call isn't deterministic, but two seconds should be | 581 // it takes to negotiate a call isn't deterministic, but two seconds should be |
| 576 // plenty of time. Similarly, the recording time should be enough to catch the | 582 // plenty of time. Similarly, the recording time should be enough to catch the |
| 577 // whole reference file. If you then silence-trim the reference file and actual | 583 // whole reference file. If you then silence-trim the reference file and actual |
| 578 // file, you should end up with two time-synchronized files. | 584 // file, you should end up with two time-synchronized files. |
| 579 void MAYBE_WebRtcAudioQualityBrowserTest::SetupAndRecordAudioCall( | 585 void MAYBE_WebRtcAudioQualityBrowserTest::SetupAndRecordAudioCall( |
| 580 const base::FilePath& reference_file, | 586 const base::FilePath& reference_file, |
| 581 const base::FilePath& recording, | 587 const base::FilePath& recording, |
| 582 const std::string& constraints, | 588 const std::string& constraints, |
| 583 const base::TimeDelta recording_time) { | 589 const base::TimeDelta recording_time) { |
| 584 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 590 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 585 ASSERT_TRUE(test::HasReferenceFilesInCheckout()); | 591 ASSERT_TRUE(test::HasReferenceFilesInCheckout()); |
| 586 ASSERT_TRUE(ForceMicrophoneVolumeTo100Percent()); | 592 ASSERT_TRUE(ForceMicrophoneVolumeTo100Percent()); |
| 587 | 593 |
| 588 ConfigureFakeDeviceToPlayFile(reference_file); | 594 ConfigureFakeDeviceToPlayFile(reference_file); |
| 589 | 595 |
| 590 // Create a one-way call. | 596 // Create a two-way call. Mute one of the receivers though; that way it will |
| 597 // be receiving audio bytes, but we will not be playing out of both elements. |
| 591 GURL test_page = embedded_test_server()->GetURL(kWebRtcAudioTestHtmlPage); | 598 GURL test_page = embedded_test_server()->GetURL(kWebRtcAudioTestHtmlPage); |
| 592 content::WebContents* left_tab = | 599 content::WebContents* left_tab = |
| 593 OpenPageAndGetUserMediaInNewTabWithConstraints(test_page, constraints); | 600 OpenPageAndGetUserMediaInNewTabWithConstraints(test_page, constraints); |
| 594 SetupPeerconnectionWithLocalStream(left_tab); | 601 SetupPeerconnectionWithLocalStream(left_tab); |
| 602 MuteMediaElement("remote-view", left_tab); |
| 595 | 603 |
| 596 content::WebContents* right_tab = | 604 content::WebContents* right_tab = |
| 597 OpenPageWithoutGetUserMedia(kWebRtcAudioTestHtmlPage); | 605 OpenPageAndGetUserMediaInNewTabWithConstraints(test_page, constraints); |
| 606 SetupPeerconnectionWithLocalStream(right_tab); |
| 598 | 607 |
| 599 AudioRecorder recorder; | 608 AudioRecorder recorder; |
| 600 ASSERT_TRUE(recorder.StartRecording(recording_time, recording)); | 609 ASSERT_TRUE(recorder.StartRecording(recording_time, recording)); |
| 601 | 610 |
| 602 NegotiateCall(left_tab, right_tab); | 611 NegotiateCall(left_tab, right_tab); |
| 603 | 612 |
| 604 ASSERT_TRUE(recorder.WaitForRecordingToEnd()); | 613 ASSERT_TRUE(recorder.WaitForRecordingToEnd()); |
| 605 DVLOG(0) << "Done recording to " << recording.value() << std::endl; | 614 DVLOG(0) << "Done recording to " << recording.value() << std::endl; |
| 606 | 615 |
| 607 HangUp(left_tab); | 616 HangUp(left_tab); |
| 608 } | 617 } |
| 609 | 618 |
| 610 #if defined(OS_MACOSX) | |
| 611 // Broken on Mac for some reason: http://crbug.com/446859. | |
| 612 #define MAYBE_MANUAL_TestCallQualityWithAudioFromFakeDevice \ | |
| 613 DISABLED_MANUAL_TestCallQualityWithAudioFromFakeDevice | |
| 614 #else | |
| 615 #define MAYBE_MANUAL_TestCallQualityWithAudioFromFakeDevice \ | |
| 616 MANUAL_TestCallQualityWithAudioFromFakeDevice | |
| 617 #endif | |
| 618 | |
| 619 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest, | 619 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest, |
| 620 MAYBE_MANUAL_TestCallQualityWithAudioFromFakeDevice) { | 620 MANUAL_TestCallQualityWithAudioFromFakeDevice) { |
| 621 if (OnWinXp() || OnWin8()) { | 621 if (OnWinXp() || OnWin8()) { |
| 622 // http://crbug.com/379798. | 622 // http://crbug.com/379798. |
| 623 LOG(ERROR) << "This test is not implemented for Windows XP/Win8."; | 623 LOG(ERROR) << "This test is not implemented for Windows XP/Win8."; |
| 624 return; | 624 return; |
| 625 } | 625 } |
| 626 | 626 |
| 627 base::FilePath reference_file = | 627 base::FilePath reference_file = |
| 628 test::GetReferenceFilesDir().Append(kReferenceFile); | 628 test::GetReferenceFilesDir().Append(kReferenceFile); |
| 629 base::FilePath recording = CreateTemporaryWaveFile(); | 629 base::FilePath recording = CreateTemporaryWaveFile(); |
| 630 | 630 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 774 #endif | 774 #endif |
| 775 | 775 |
| 776 // Since the AGC is off here there should be no gain at all. | 776 // Since the AGC is off here there should be no gain at all. |
| 777 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest, | 777 IN_PROC_BROWSER_TEST_F(MAYBE_WebRtcAudioQualityBrowserTest, |
| 778 MAYBE_MANUAL_TestAutoGainIsOffWithAudioProcessingOff) { | 778 MAYBE_MANUAL_TestAutoGainIsOffWithAudioProcessingOff) { |
| 779 const char* kAudioCallWithoutAudioProcessing = | 779 const char* kAudioCallWithoutAudioProcessing = |
| 780 "{audio: { mandatory: { echoCancellation: false } } }"; | 780 "{audio: { mandatory: { echoCancellation: false } } }"; |
| 781 ASSERT_NO_FATAL_FAILURE(TestAutoGainControl( | 781 ASSERT_NO_FATAL_FAILURE(TestAutoGainControl( |
| 782 kReferenceFile, kAudioCallWithoutAudioProcessing, "_no_agc")); | 782 kReferenceFile, kAudioCallWithoutAudioProcessing, "_no_agc")); |
| 783 } | 783 } |
| OLD | NEW |