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

Side by Side Diff: media/audio/android/audio_android_unittest.cc

Issue 131503006: Initialization of audio manager for Android is now done on the audio thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tommi@ 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 | Annotate | Revision Log
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 "base/android/build_info.h" 5 #include "base/android/build_info.h"
6 #include "base/basictypes.h" 6 #include "base/basictypes.h"
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 tests.push_back(true); 501 tests.push_back(true);
502 return tests; 502 return tests;
503 } 503 }
504 504
505 // Test fixture class for tests which exercise the input path, or both input and 505 // Test fixture class for tests which exercise the input path, or both input and
506 // output paths. It is value-parameterized to test against both the Java 506 // output paths. It is value-parameterized to test against both the Java
507 // AudioRecord (when true) and native OpenSLES (when false) input paths. 507 // AudioRecord (when true) and native OpenSLES (when false) input paths.
508 class AudioAndroidInputTest : public AudioAndroidOutputTest, 508 class AudioAndroidInputTest : public AudioAndroidOutputTest,
509 public testing::WithParamInterface<bool> { 509 public testing::WithParamInterface<bool> {
510 public: 510 public:
511 AudioAndroidInputTest() {} 511 AudioAndroidInputTest()
512 : event_(false, false),
513 audio_input_stream_(NULL) {}
512 514
513 protected: 515 protected:
516 AudioInputStream* audio_input_stream() { return audio_input_stream_; }
517
514 AudioParameters GetInputStreamParameters() { 518 AudioParameters GetInputStreamParameters() {
515 AudioParameters input_params = audio_manager()->GetInputStreamParameters( 519 AudioParameters input_params = audio_manager()->GetInputStreamParameters(
516 AudioManagerBase::kDefaultDeviceId); 520 AudioManagerBase::kDefaultDeviceId);
517 // Override the platform effects setting to use the AudioRecord or OpenSLES 521 // Override the platform effects setting to use the AudioRecord or OpenSLES
518 // path as requested. 522 // path as requested.
519 int effects = GetParam() ? AudioParameters::ECHO_CANCELLER : 523 int effects = GetParam() ? AudioParameters::ECHO_CANCELLER :
520 AudioParameters::NO_EFFECTS; 524 AudioParameters::NO_EFFECTS;
521 AudioParameters params(input_params.format(), 525 AudioParameters params(input_params.format(),
522 input_params.channel_layout(), 526 input_params.channel_layout(),
523 input_params.input_channels(), 527 input_params.input_channels(),
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 VLOG(0) << "expected time between callbacks: " 564 VLOG(0) << "expected time between callbacks: "
561 << expected_time_between_callbacks_ms << " ms"; 565 << expected_time_between_callbacks_ms << " ms";
562 VLOG(0) << "average time between callbacks: " 566 VLOG(0) << "average time between callbacks: "
563 << average_time_between_callbacks_ms << " ms"; 567 << average_time_between_callbacks_ms << " ms";
564 EXPECT_GE(average_time_between_callbacks_ms, 568 EXPECT_GE(average_time_between_callbacks_ms,
565 0.70 * expected_time_between_callbacks_ms); 569 0.70 * expected_time_between_callbacks_ms);
566 EXPECT_LE(average_time_between_callbacks_ms, 570 EXPECT_LE(average_time_between_callbacks_ms,
567 1.30 * expected_time_between_callbacks_ms); 571 1.30 * expected_time_between_callbacks_ms);
568 } 572 }
569 573
574 void CreateAndCloseAISOnAudioThread(const AudioParameters& params) {
575 if (!audio_manager()->GetTaskRunner()->BelongsToCurrentThread()) {
576 audio_manager()->GetTaskRunner()->PostTask(
577 FROM_HERE,
578 base::Bind(&AudioAndroidInputTest::CreateAndCloseAISOnAudioThread,
579 base::Unretained(this),
580 params));
581 event_.Wait();
582 } else {
583 audio_input_stream_ = audio_manager()->MakeAudioInputStream(
584 params, AudioManagerBase::kDefaultDeviceId);
585 EXPECT_TRUE(audio_input_stream_);
586 audio_input_stream_->Close();
587 event_.Signal();
588 }
589 }
570 590
571 private: 591 private:
592 base::WaitableEvent event_;
tommi (sloooow) - chröme 2014/01/30 15:26:04 This pattern is racy and could throw TSAN off. Cre
henrika (OOO until Aug 14) 2014/01/30 17:20:23 Uploaded new and improved version after offline di
593 AudioInputStream* audio_input_stream_;
572 DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest); 594 DISALLOW_COPY_AND_ASSIGN(AudioAndroidInputTest);
573 }; 595 };
574 596
575 // Get the default audio input parameters and log the result. 597 // Get the default audio input parameters and log the result.
576 TEST_P(AudioAndroidInputTest, GetDefaultInputStreamParameters) { 598 TEST_P(AudioAndroidInputTest, GetDefaultInputStreamParameters) {
577 // We don't go through AudioAndroidInputTest::GetInputStreamParameters() here 599 // We don't go through AudioAndroidInputTest::GetInputStreamParameters() here
578 // so that we can log the real (non-overridden) values of the effects. 600 // so that we can log the real (non-overridden) values of the effects.
579 AudioParameters params = audio_manager()->GetInputStreamParameters( 601 AudioParameters params = audio_manager()->GetInputStreamParameters(
580 AudioManagerBase::kDefaultDeviceId); 602 AudioManagerBase::kDefaultDeviceId);
581 EXPECT_TRUE(params.IsValid()); 603 EXPECT_TRUE(params.IsValid());
(...skipping 30 matching lines...) Expand all
612 if (!audio_manager()->HasAudioOutputDevices()) 634 if (!audio_manager()->HasAudioOutputDevices())
613 return; 635 return;
614 AudioDeviceNames devices; 636 AudioDeviceNames devices;
615 audio_manager()->GetAudioOutputDeviceNames(&devices); 637 audio_manager()->GetAudioOutputDeviceNames(&devices);
616 CheckDeviceNames(devices); 638 CheckDeviceNames(devices);
617 } 639 }
618 640
619 // Ensure that a default input stream can be created and closed. 641 // Ensure that a default input stream can be created and closed.
620 TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) { 642 TEST_P(AudioAndroidInputTest, CreateAndCloseInputStream) {
621 AudioParameters params = GetInputStreamParameters(); 643 AudioParameters params = GetInputStreamParameters();
622 AudioInputStream* ais = audio_manager()->MakeAudioInputStream( 644 CreateAndCloseAISOnAudioThread(params);
623 params, AudioManagerBase::kDefaultDeviceId);
624 EXPECT_TRUE(ais);
625 ais->Close();
626 } 645 }
627 646
628 // Ensure that a default output stream can be created and closed. 647 // Ensure that a default output stream can be created and closed.
629 // TODO(henrika): should we also verify that this API changes the audio mode 648 // TODO(henrika): should we also verify that this API changes the audio mode
630 // to communication mode, and calls RegisterHeadsetReceiver, the first time 649 // to communication mode, and calls RegisterHeadsetReceiver, the first time
631 // it is called? 650 // it is called?
632 TEST_F(AudioAndroidOutputTest, CreateAndCloseOutputStream) { 651 TEST_F(AudioAndroidOutputTest, CreateAndCloseOutputStream) {
633 AudioParameters params = GetDefaultOutputStreamParameters(); 652 AudioParameters params = GetDefaultOutputStreamParameters();
634 AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream( 653 AudioOutputStream* aos = audio_manager()->MakeAudioOutputStream(
635 params, std::string(), std::string()); 654 params, std::string(), std::string());
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 aos->Stop(); 881 aos->Stop();
863 ais->Stop(); 882 ais->Stop();
864 aos->Close(); 883 aos->Close();
865 ais->Close(); 884 ais->Close();
866 } 885 }
867 886
868 INSTANTIATE_TEST_CASE_P(AudioAndroidInputTest, AudioAndroidInputTest, 887 INSTANTIATE_TEST_CASE_P(AudioAndroidInputTest, AudioAndroidInputTest,
869 testing::ValuesIn(RunAudioRecordInputPathTests())); 888 testing::ValuesIn(RunAudioRecordInputPathTests()));
870 889
871 } // namespace media 890 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698