diff options
author | primiano@chromium.org <primiano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-12 11:19:31 +0000 |
---|---|---|
committer | primiano@chromium.org <primiano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-12 11:19:31 +0000 |
commit | 7a9497110188e5473173b87f1481d17eb87ba3d8 (patch) | |
tree | 1ff8b18455a9ba62ff70920d7f3bb6d0ffc0ac9d /content | |
parent | b26305b415e6f241a906e4f3bfc781187198b5d0 (diff) | |
download | chromium_src-7a9497110188e5473173b87f1481d17eb87ba3d8.zip chromium_src-7a9497110188e5473173b87f1481d17eb87ba3d8.tar.gz chromium_src-7a9497110188e5473173b87f1481d17eb87ba3d8.tar.bz2 |
Small refactor to media architecture in order to allow end-to-end tests.
- Introduced the class MockAudioManager that will be used by upcoming speech recognition tests.
- Added interface TestAudioInputController::Delegate, which allows to intercept Record/Close events.
- Added audio_manager_for_tests_ static field in SpeechRecognizer to inject the MockAudioManager during tests.
BUG=116954
TEST=none
Review URL: https://chromiumcodereview.appspot.com/10704154
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146316 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/speech/speech_recognizer.cc | 11 | ||||
-rw-r--r-- | content/browser/speech/speech_recognizer.h | 6 | ||||
-rw-r--r-- | content/browser/speech/speech_recognizer_unittest.cc | 69 |
3 files changed, 13 insertions, 73 deletions
diff --git a/content/browser/speech/speech_recognizer.cc b/content/browser/speech/speech_recognizer.cc index 36a2565..66a2fb3 100644 --- a/content/browser/speech/speech_recognizer.cc +++ b/content/browser/speech/speech_recognizer.cc @@ -73,6 +73,7 @@ const ChannelLayout SpeechRecognizer::kChannelLayout = CHANNEL_LAYOUT_MONO; const int SpeechRecognizer::kNumBitsPerAudioSample = 16; const int SpeechRecognizer::kNoSpeechTimeoutMs = 8000; const int SpeechRecognizer::kEndpointerEstimationTimeMs = 300; +media::AudioManager* SpeechRecognizer::audio_manager_for_tests_ = NULL; COMPILE_ASSERT(SpeechRecognizer::kNumBitsPerAudioSample % 8 == 0, kNumBitsPerAudioSample_must_be_a_multiple_of_8); @@ -83,7 +84,6 @@ SpeechRecognizer::SpeechRecognizer( bool is_single_shot, SpeechRecognitionEngine* engine) : listener_(listener), - testing_audio_manager_(NULL), recognition_engine_(engine), endpointer_(kAudioSampleRate), session_id_(session_id), @@ -242,7 +242,6 @@ void SpeechRecognizer::DispatchEvent(const FSMEventArgs& event_args) { // The audio pipeline must be processed before the event dispatch, otherwise // it would take actions according to the future state instead of the current. state_ = ExecuteTransitionAndGetNextState(event_args); - is_dispatching_event_ = false; } @@ -393,8 +392,8 @@ SpeechRecognizer::FSMState SpeechRecognizer::StartRecording(const FSMEventArgs&) { DCHECK(recognition_engine_.get() != NULL); DCHECK(!IsCapturingAudio()); - AudioManager* audio_manager = (testing_audio_manager_ != NULL) ? - testing_audio_manager_ : + AudioManager* audio_manager = (audio_manager_for_tests_ != NULL) ? + audio_manager_for_tests_ : BrowserMainLoop::GetAudioManager(); DCHECK(audio_manager != NULL); @@ -649,9 +648,9 @@ void SpeechRecognizer::UpdateSignalAndNoiseLevels(const float& rms, session_id_, clip_detected ? 1.0f : audio_level_, noise_level); } -void SpeechRecognizer::SetAudioManagerForTesting( +void SpeechRecognizer::SetAudioManagerForTests( AudioManager* audio_manager) { - testing_audio_manager_ = audio_manager; + audio_manager_for_tests_ = audio_manager; } SpeechRecognizer::FSMEventArgs::FSMEventArgs(FSMEvent event_value) diff --git a/content/browser/speech/speech_recognizer.h b/content/browser/speech/speech_recognizer.h index 44db1ee..633f5b7 100644 --- a/content/browser/speech/speech_recognizer.h +++ b/content/browser/speech/speech_recognizer.h @@ -38,6 +38,8 @@ class CONTENT_EXPORT SpeechRecognizer static const int kNoSpeechTimeoutMs; static const int kEndpointerEstimationTimeMs; + static void SetAudioManagerForTests(media::AudioManager* audio_manager); + SpeechRecognizer( content::SpeechRecognitionEventListener* listener, int session_id, @@ -122,7 +124,6 @@ class CONTENT_EXPORT SpeechRecognizer void UpdateSignalAndNoiseLevels(const float& rms, bool clip_detected); void CloseAudioControllerAsynchronously(); - void SetAudioManagerForTesting(media::AudioManager* audio_manager); // Callback called on IO thread by audio_controller->Close(). void OnAudioClosed(media::AudioInputController*); @@ -141,8 +142,9 @@ class CONTENT_EXPORT SpeechRecognizer virtual void OnSpeechRecognitionEngineError( const content::SpeechRecognitionError& error) OVERRIDE; + static media::AudioManager* audio_manager_for_tests_; + content::SpeechRecognitionEventListener* listener_; - media::AudioManager* testing_audio_manager_; scoped_ptr<SpeechRecognitionEngine> recognition_engine_; Endpointer endpointer_; scoped_refptr<media::AudioInputController> audio_controller_; diff --git a/content/browser/speech/speech_recognizer_unittest.cc b/content/browser/speech/speech_recognizer_unittest.cc index 8631217..bd39c19 100644 --- a/content/browser/speech/speech_recognizer_unittest.cc +++ b/content/browser/speech/speech_recognizer_unittest.cc @@ -8,7 +8,7 @@ #include "content/browser/speech/google_one_shot_remote_engine.h" #include "content/browser/speech/speech_recognizer.h" #include "content/public/browser/speech_recognition_event_listener.h" -#include "media/audio/audio_manager.h" +#include "media/audio/mock_audio_manager.h" #include "media/audio/fake_audio_input_stream.h" #include "media/audio/fake_audio_output_stream.h" #include "media/audio/test_audio_input_controller_factory.h" @@ -28,68 +28,6 @@ using media::AudioParameters; using media::TestAudioInputController; using media::TestAudioInputControllerFactory; -namespace { - -class MockAudioManager : public media::AudioManagerBase { - public: - MockAudioManager() { - audio_thread_.reset(new base::Thread("MockAudioThread")); - CHECK(audio_thread_->Start()); - } - virtual bool HasAudioOutputDevices() OVERRIDE { return true; } - virtual bool HasAudioInputDevices() OVERRIDE { return true; } - virtual string16 GetAudioInputDeviceModel() OVERRIDE { return string16(); } - virtual bool CanShowAudioInputSettings() OVERRIDE { return false; } - virtual void ShowAudioInputSettings() OVERRIDE {} - virtual void GetAudioInputDeviceNames( - media::AudioDeviceNames* device_names) OVERRIDE {} - virtual AudioOutputStream* MakeAudioOutputStream( - const AudioParameters& params) OVERRIDE { - return media::FakeAudioOutputStream::MakeFakeStream(this, params); - } - virtual AudioOutputStream* MakeAudioOutputStreamProxy( - const AudioParameters& params) OVERRIDE { - NOTREACHED(); - return NULL; - } - virtual AudioInputStream* MakeAudioInputStream( - const AudioParameters& params, const std::string& device_id) OVERRIDE { - return media::FakeAudioInputStream::MakeFakeStream(this, params); - } - virtual AudioOutputStream* MakeLinearOutputStream( - const AudioParameters& params) OVERRIDE { - NOTREACHED(); - return NULL; - } - virtual AudioOutputStream* MakeLowLatencyOutputStream( - const AudioParameters& params) OVERRIDE { - NOTREACHED(); - return NULL; - } - virtual AudioInputStream* MakeLinearInputStream( - const AudioParameters& params, const std::string& device_id) OVERRIDE { - NOTREACHED(); - return NULL; - } - virtual AudioInputStream* MakeLowLatencyInputStream( - const AudioParameters& params, const std::string& device_id) OVERRIDE { - NOTREACHED(); - return NULL; - } - virtual void MuteAll() OVERRIDE {} - virtual void UnMuteAll() OVERRIDE {} - virtual bool IsRecordingInProcess() OVERRIDE { return false; } - virtual scoped_refptr<base::MessageLoopProxy> GetMessageLoop() OVERRIDE { - return audio_thread_->message_loop_proxy(); - } - virtual void Init() OVERRIDE {}; - private: - scoped_ptr<base::Thread> audio_thread_; - DISALLOW_COPY_AND_ASSIGN(MockAudioManager); -}; -} // namespace - - namespace speech { class SpeechRecognizerTest : public content::SpeechRecognitionEventListener, @@ -97,7 +35,6 @@ class SpeechRecognizerTest : public content::SpeechRecognitionEventListener, public: SpeechRecognizerTest() : io_thread_(BrowserThread::IO, &message_loop_), - audio_manager_(new MockAudioManager()), recognition_started_(false), recognition_ended_(false), result_received_(false), @@ -120,7 +57,9 @@ class SpeechRecognizerTest : public content::SpeechRecognitionEventListener, const bool kOneShotMode = true; recognizer_ = new SpeechRecognizer( this, kTestingSessionId, kOneShotMode, sr_engine); - recognizer_->SetAudioManagerForTesting(audio_manager_.get()); + audio_manager_.reset(new media::MockAudioManager( + MessageLoop::current()->message_loop_proxy())); + recognizer_->SetAudioManagerForTests(audio_manager_.get()); int audio_packet_length_bytes = (SpeechRecognizer::kAudioSampleRate * |