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

Side by Side Diff: chrome/browser/media/chrome_webrtc_audio_quality_browsertest.cc

Issue 227633002: Fixed quality tests after PyAuto test purge. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: .gitignore'ing resource files Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « .gitignore ('k') | chrome/browser/media/chrome_webrtc_browsertest.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 #include <ctime> 5 #include <ctime>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/path_service.h" 9 #include "base/path_service.h"
10 #include "base/process/launch.h" 10 #include "base/process/launch.h"
11 #include "base/scoped_native_library.h" 11 #include "base/scoped_native_library.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/win/windows_version.h" 13 #include "base/win/windows_version.h"
14 #include "chrome/browser/media/webrtc_browsertest_base.h" 14 #include "chrome/browser/media/webrtc_browsertest_base.h"
15 #include "chrome/browser/media/webrtc_browsertest_common.h" 15 #include "chrome/browser/media/webrtc_browsertest_common.h"
16 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
18 #include "chrome/browser/ui/browser_tabstrip.h" 18 #include "chrome/browser/ui/browser_tabstrip.h"
19 #include "chrome/browser/ui/tabs/tab_strip_model.h" 19 #include "chrome/browser/ui/tabs/tab_strip_model.h"
20 #include "chrome/common/chrome_paths.h" 20 #include "chrome/common/chrome_paths.h"
21 #include "chrome/common/chrome_switches.h" 21 #include "chrome/common/chrome_switches.h"
22 #include "chrome/test/base/ui_test_utils.h" 22 #include "chrome/test/base/ui_test_utils.h"
23 #include "content/public/test/browser_test_utils.h" 23 #include "content/public/test/browser_test_utils.h"
24 #include "net/test/embedded_test_server/embedded_test_server.h" 24 #include "net/test/embedded_test_server/embedded_test_server.h"
25 #include "testing/perf/perf_test.h" 25 #include "testing/perf/perf_test.h"
26 26
27 // These are relative to the reference file dir defined by
28 // webrtc_browsertest_common.h (i.e. chrome/test/data/webrtc/resources).
27 static const base::FilePath::CharType kReferenceFile[] = 29 static const base::FilePath::CharType kReferenceFile[] =
28 #if defined (OS_WIN) 30 #if defined (OS_WIN)
29 FILE_PATH_LITERAL("pyauto_private/webrtc/human-voice-win.wav"); 31 FILE_PATH_LITERAL("human-voice-win.wav");
30 #else 32 #else
31 FILE_PATH_LITERAL("pyauto_private/webrtc/human-voice-linux.wav"); 33 FILE_PATH_LITERAL("human-voice-linux.wav");
32 #endif 34 #endif
33 35
34 // The javascript will load the reference file relative to its location, 36 // The javascript will load the reference file relative to its location,
35 // which is in /webrtc on the web server. Therefore, prepend a '..' traversal. 37 // which is in /webrtc on the web server. The files we are looking for are in
38 // webrtc/resources in the chrome/test/data folder.
36 static const char kReferenceFileRelativeUrl[] = 39 static const char kReferenceFileRelativeUrl[] =
37 #if defined (OS_WIN) 40 #if defined (OS_WIN)
38 "../pyauto_private/webrtc/human-voice-win.wav"; 41 "resources/human-voice-win.wav";
39 #else 42 #else
40 "../pyauto_private/webrtc/human-voice-linux.wav"; 43 "resources/human-voice-linux.wav";
41 #endif 44 #endif
42 45
43 static const base::FilePath::CharType kToolsPath[] =
44 FILE_PATH_LITERAL("pyauto_private/media/tools");
45
46 static const char kMainWebrtcTestHtmlPage[] = 46 static const char kMainWebrtcTestHtmlPage[] =
47 "/webrtc/webrtc_audio_quality_test.html"; 47 "/webrtc/webrtc_audio_quality_test.html";
48 48
49 static base::FilePath GetTestDataDir() {
50 base::FilePath source_dir;
51 PathService::Get(chrome::DIR_TEST_DATA, &source_dir);
52 return source_dir;
53 }
54
55 // Test we can set up a WebRTC call and play audio through it. 49 // Test we can set up a WebRTC call and play audio through it.
56 // 50 //
57 // You must have the src-internal solution in your .gclient to put the required 51 // You must have the src-internal solution in your .gclient to put the required
58 // pyauto_private directory into chrome/test/data/. 52 // pyauto_private directory into chrome/test/data/.
59 // 53 //
60 // This test will only work on machines that have been configured to record 54 // This test will only work on machines that have been configured to record
61 // their own input. 55 // their own input.
62 // 56 //
63 // On Linux: 57 // On Linux:
64 // 1. # sudo apt-get install pavucontrol 58 // 1. # sudo apt-get install pavucontrol
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 EXPECT_FALSE(command_line->HasSwitch( 97 EXPECT_FALSE(command_line->HasSwitch(
104 switches::kUseFakeDeviceForMediaStream)); 98 switches::kUseFakeDeviceForMediaStream));
105 EXPECT_FALSE(command_line->HasSwitch( 99 EXPECT_FALSE(command_line->HasSwitch(
106 switches::kUseFakeUIForMediaStream)); 100 switches::kUseFakeUIForMediaStream));
107 101
108 bool enable_audio_track_processing = GetParam(); 102 bool enable_audio_track_processing = GetParam();
109 if (enable_audio_track_processing) 103 if (enable_audio_track_processing)
110 command_line->AppendSwitch(switches::kEnableAudioTrackProcessing); 104 command_line->AppendSwitch(switches::kEnableAudioTrackProcessing);
111 } 105 }
112 106
113 bool HasAllRequiredResources() {
114 base::FilePath reference_file = GetTestDataDir().Append(kReferenceFile);
115 if (!base::PathExists(reference_file)) {
116 LOG(ERROR) << "Cannot find the reference file to be used for audio "
117 << "quality comparison: " << reference_file.value();
118 return false;
119 }
120 return true;
121 }
122
123 void AddAudioFile(const std::string& input_file_relative_url, 107 void AddAudioFile(const std::string& input_file_relative_url,
124 content::WebContents* tab_contents) { 108 content::WebContents* tab_contents) {
125 EXPECT_EQ("ok-added", ExecuteJavascript( 109 EXPECT_EQ("ok-added", ExecuteJavascript(
126 "addAudioFile('" + input_file_relative_url + "')", tab_contents)); 110 "addAudioFile('" + input_file_relative_url + "')", tab_contents));
127 } 111 }
128 112
129 void PlayAudioFile(content::WebContents* tab_contents) { 113 void PlayAudioFile(content::WebContents* tab_contents) {
130 EXPECT_EQ("ok-playing", ExecuteJavascript("playAudioFile()", tab_contents)); 114 EXPECT_EQ("ok-playing", ExecuteJavascript("playAudioFile()", tab_contents));
131 } 115 }
132 116
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 int exit_code = -1; 204 int exit_code = -1;
221 base::WaitForExitCode(recording_application_, &exit_code); 205 base::WaitForExitCode(recording_application_, &exit_code);
222 return exit_code == 0; 206 return exit_code == 0;
223 } 207 }
224 private: 208 private:
225 base::ProcessHandle recording_application_; 209 base::ProcessHandle recording_application_;
226 }; 210 };
227 211
228 bool ForceMicrophoneVolumeTo100Percent() { 212 bool ForceMicrophoneVolumeTo100Percent() {
229 #if defined(OS_WIN) 213 #if defined(OS_WIN)
230 CommandLine command_line(GetTestDataDir().Append(kToolsPath).Append( 214 CommandLine command_line(test::GetReferenceFilesDir().Append(
231 FILE_PATH_LITERAL("force_mic_volume_max.exe"))); 215 FILE_PATH_LITERAL("force_mic_volume_max.exe")));
232 VLOG(0) << "Running " << command_line.GetCommandLineString(); 216 VLOG(0) << "Running " << command_line.GetCommandLineString();
233 std::string result; 217 std::string result;
234 if (!base::GetAppOutput(command_line, &result)) { 218 if (!base::GetAppOutput(command_line, &result)) {
235 LOG(ERROR) << "Failed to set source volume: output was " << result; 219 LOG(ERROR) << "Failed to set source volume: output was " << result;
236 return false; 220 return false;
237 } 221 }
238 #else 222 #else
239 // Just force the volume of, say the first 5 devices. A machine will rarely 223 // Just force the volume of, say the first 5 devices. A machine will rarely
240 // have more input sources than that. This is way easier than finding the 224 // have more input sources than that. This is way easier than finding the
(...skipping 27 matching lines...) Expand all
268 // ABOVE_PERIODS: The period for which silence occurs. Value 1 is used for 252 // ABOVE_PERIODS: The period for which silence occurs. Value 1 is used for
269 // silence at beginning of audio. 253 // silence at beginning of audio.
270 // DURATION: the amount of time in seconds that non-silence must be detected 254 // DURATION: the amount of time in seconds that non-silence must be detected
271 // before sox stops trimming audio. 255 // before sox stops trimming audio.
272 // THRESHOLD: value used to indicate what sample value is treates as silence. 256 // THRESHOLD: value used to indicate what sample value is treates as silence.
273 const char* kAbovePeriods = "1"; 257 const char* kAbovePeriods = "1";
274 const char* kDuration = "2"; 258 const char* kDuration = "2";
275 const char* kTreshold = "5%"; 259 const char* kTreshold = "5%";
276 260
277 #if defined(OS_WIN) 261 #if defined(OS_WIN)
278 CommandLine command_line(GetTestDataDir().Append(kToolsPath).Append( 262 CommandLine command_line(test::GetReferenceFilesDir().Append(
279 FILE_PATH_LITERAL("sox.exe"))); 263 FILE_PATH_LITERAL("sox.exe")));
280 #else 264 #else
281 CommandLine command_line(base::FilePath(FILE_PATH_LITERAL("sox"))); 265 CommandLine command_line(base::FilePath(FILE_PATH_LITERAL("sox")));
282 #endif 266 #endif
283 command_line.AppendArgPath(input_file); 267 command_line.AppendArgPath(input_file);
284 command_line.AppendArgPath(output_file); 268 command_line.AppendArgPath(output_file);
285 command_line.AppendArg("silence"); 269 command_line.AppendArg("silence");
286 command_line.AppendArg(kAbovePeriods); 270 command_line.AppendArg(kAbovePeriods);
287 command_line.AppendArg(kDuration); 271 command_line.AppendArg(kDuration);
288 command_line.AppendArg(kTreshold); 272 command_line.AppendArg(kTreshold);
(...skipping 28 matching lines...) Expand all
317 // "3.145", etc). Returns true on success. 301 // "3.145", etc). Returns true on success.
318 bool RunPesq(const base::FilePath& reference_file, 302 bool RunPesq(const base::FilePath& reference_file,
319 const base::FilePath& actual_file, 303 const base::FilePath& actual_file,
320 int sample_rate, std::string* raw_mos, std::string* mos_lqo) { 304 int sample_rate, std::string* raw_mos, std::string* mos_lqo) {
321 // PESQ will break if the paths are too long (!). 305 // PESQ will break if the paths are too long (!).
322 EXPECT_LT(reference_file.value().length(), 128u); 306 EXPECT_LT(reference_file.value().length(), 128u);
323 EXPECT_LT(actual_file.value().length(), 128u); 307 EXPECT_LT(actual_file.value().length(), 128u);
324 308
325 #if defined(OS_WIN) 309 #if defined(OS_WIN)
326 base::FilePath pesq_path = 310 base::FilePath pesq_path =
327 GetTestDataDir().Append(kToolsPath).Append(FILE_PATH_LITERAL("pesq.exe")); 311 test::GetReferenceFilesDir().Append(FILE_PATH_LITERAL("pesq.exe"));
328 #else 312 #else
329 base::FilePath pesq_path = 313 base::FilePath pesq_path =
330 GetTestDataDir().Append(kToolsPath).Append(FILE_PATH_LITERAL("pesq")); 314 test::GetReferenceFilesDir().Append(FILE_PATH_LITERAL("pesq"));
331 #endif 315 #endif
332 316
333 if (!base::PathExists(pesq_path)) { 317 if (!base::PathExists(pesq_path)) {
334 LOG(ERROR) << "Missing PESQ binary in " << pesq_path.value(); 318 LOG(ERROR) << "Missing PESQ binary in " << pesq_path.value();
335 return false; 319 return false;
336 } 320 }
337 321
338 CommandLine command_line(pesq_path); 322 CommandLine command_line(pesq_path);
339 command_line.AppendArg(base::StringPrintf("+%d", sample_rate)); 323 command_line.AppendArg(base::StringPrintf("+%d", sample_rate));
340 command_line.AppendArgPath(reference_file); 324 command_line.AppendArgPath(reference_file);
(...skipping 30 matching lines...) Expand all
371 WebRtcAudioQualityBrowserTest, 355 WebRtcAudioQualityBrowserTest,
372 testing::ValuesIn(kRunTestsWithFlag)); 356 testing::ValuesIn(kRunTestsWithFlag));
373 357
374 #if defined(OS_LINUX) || defined(OS_WIN) 358 #if defined(OS_LINUX) || defined(OS_WIN)
375 // Only implemented on Linux and Windows for now. 359 // Only implemented on Linux and Windows for now.
376 #define MAYBE_MANUAL_TestAudioQuality MANUAL_TestAudioQuality 360 #define MAYBE_MANUAL_TestAudioQuality MANUAL_TestAudioQuality
377 #else 361 #else
378 #define MAYBE_MANUAL_TestAudioQuality DISABLED_MANUAL_TestAudioQuality 362 #define MAYBE_MANUAL_TestAudioQuality DISABLED_MANUAL_TestAudioQuality
379 #endif 363 #endif
380 364
381 // Disabled due to crbug.com/359579.
382 IN_PROC_BROWSER_TEST_P(WebRtcAudioQualityBrowserTest, 365 IN_PROC_BROWSER_TEST_P(WebRtcAudioQualityBrowserTest,
383 DISABLED_MANUAL_TestAudioQuality) { 366 MANUAL_TestAudioQuality) {
384 #if defined(OS_WIN) 367 #if defined(OS_WIN)
385 if (base::win::GetVersion() < base::win::VERSION_VISTA) { 368 if (base::win::GetVersion() < base::win::VERSION_VISTA) {
386 // It would take work to implement this on XP; not prioritized right now. 369 // It would take work to implement this on XP; not prioritized right now.
387 LOG(ERROR) << "This test is not implemented for Windows XP."; 370 LOG(ERROR) << "This test is not implemented for Windows XP.";
388 return; 371 return;
389 } 372 }
390 #endif 373 #endif
391 ASSERT_TRUE(HasAllRequiredResources()); 374 ASSERT_TRUE(test::HasReferenceFilesInCheckout());
392 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 375 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
393 ASSERT_TRUE(peerconnection_server_.Start()); 376 ASSERT_TRUE(peerconnection_server_.Start());
394 377
395 ASSERT_TRUE(ForceMicrophoneVolumeTo100Percent()); 378 ASSERT_TRUE(ForceMicrophoneVolumeTo100Percent());
396 379
397 ui_test_utils::NavigateToURL( 380 ui_test_utils::NavigateToURL(
398 browser(), embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage)); 381 browser(), embedded_test_server()->GetURL(kMainWebrtcTestHtmlPage));
399 content::WebContents* left_tab = 382 content::WebContents* left_tab =
400 browser()->tab_strip_model()->GetActiveWebContents(); 383 browser()->tab_strip_model()->GetActiveWebContents();
401 384
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 WaitUntilHangupVerified(right_tab); 422 WaitUntilHangupVerified(right_tab);
440 423
441 base::FilePath trimmed_recording = CreateTemporaryWaveFile(); 424 base::FilePath trimmed_recording = CreateTemporaryWaveFile();
442 425
443 ASSERT_TRUE(RemoveSilence(recording, trimmed_recording)); 426 ASSERT_TRUE(RemoveSilence(recording, trimmed_recording));
444 VLOG(0) << "Trimmed silence: " << trimmed_recording.value() << std::endl; 427 VLOG(0) << "Trimmed silence: " << trimmed_recording.value() << std::endl;
445 428
446 std::string raw_mos; 429 std::string raw_mos;
447 std::string mos_lqo; 430 std::string mos_lqo;
448 base::FilePath reference_file_in_test_dir = 431 base::FilePath reference_file_in_test_dir =
449 GetTestDataDir().Append(kReferenceFile); 432 test::GetReferenceFilesDir().Append(kReferenceFile);
450 ASSERT_TRUE(RunPesq(reference_file_in_test_dir, trimmed_recording, 16000, 433 ASSERT_TRUE(RunPesq(reference_file_in_test_dir, trimmed_recording, 16000,
451 &raw_mos, &mos_lqo)); 434 &raw_mos, &mos_lqo));
452 435
453 perf_test::PrintResult("audio_pesq", "", "raw_mos", raw_mos, "score", true); 436 perf_test::PrintResult("audio_pesq", "", "raw_mos", raw_mos, "score", true);
454 perf_test::PrintResult("audio_pesq", "", "mos_lqo", mos_lqo, "score", true); 437 perf_test::PrintResult("audio_pesq", "", "mos_lqo", mos_lqo, "score", true);
455 438
456 EXPECT_TRUE(base::DeleteFile(recording, false)); 439 EXPECT_TRUE(base::DeleteFile(recording, false));
457 EXPECT_TRUE(base::DeleteFile(trimmed_recording, false)); 440 EXPECT_TRUE(base::DeleteFile(trimmed_recording, false));
458 441
459 ASSERT_TRUE(peerconnection_server_.Stop()); 442 ASSERT_TRUE(peerconnection_server_.Stop());
460 } 443 }
OLDNEW
« no previous file with comments | « .gitignore ('k') | chrome/browser/media/chrome_webrtc_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698