summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorprimiano@chromium.org <primiano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-12 11:19:31 +0000
committerprimiano@chromium.org <primiano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-12 11:19:31 +0000
commit7a9497110188e5473173b87f1481d17eb87ba3d8 (patch)
tree1ff8b18455a9ba62ff70920d7f3bb6d0ffc0ac9d /content
parentb26305b415e6f241a906e4f3bfc781187198b5d0 (diff)
downloadchromium_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.cc11
-rw-r--r--content/browser/speech/speech_recognizer.h6
-rw-r--r--content/browser/speech/speech_recognizer_unittest.cc69
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 *