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

Unified Diff: content/browser/speech/google_streaming_remote_engine.h

Issue 1891543002: Devirtualize SpeechRecognitionEngine (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kill_one_shot_engine
Patch Set: drop an include Created 4 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/speech/google_streaming_remote_engine.h
diff --git a/content/browser/speech/google_streaming_remote_engine.h b/content/browser/speech/google_streaming_remote_engine.h
deleted file mode 100644
index e2fcf227956cba50b43788b7a63f29ee0d8a74b8..0000000000000000000000000000000000000000
--- a/content/browser/speech/google_streaming_remote_engine.h
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_
-#define CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/threading/non_thread_safe.h"
-#include "content/browser/speech/audio_encoder.h"
-#include "content/browser/speech/chunked_byte_buffer.h"
-#include "content/browser/speech/speech_recognition_engine.h"
-#include "content/common/content_export.h"
-#include "content/public/common/speech_recognition_error.h"
-#include "net/url_request/url_fetcher_delegate.h"
-
-namespace net {
-class URLRequestContextGetter;
-}
-
-namespace content {
-
-class AudioChunk;
-struct SpeechRecognitionError;
-struct SpeechRecognitionResult;
-
-// Implements a SpeechRecognitionEngine supporting continuous recognition by
-// means of interaction with Google streaming speech recognition webservice.
-// More in details, this class establishes two HTTP(S) connections with the
-// webservice, for each session, herein called "upstream" and "downstream".
-// Audio chunks are sent on the upstream by means of a chunked HTTP POST upload.
-// Recognition results are retrieved in a full-duplex fashion (i.e. while
-// pushing audio on the upstream) on the downstream by means of a chunked
-// HTTP GET request. Pairing between the two stream is handled through a
-// randomly generated key, unique for each request, which is passed in the
-// &pair= arg to both stream request URLs.
-// In the case of a regular session, the upstream is closed when the audio
-// capture ends (notified through a |AudioChunksEnded| call) and the downstream
-// waits for a corresponding server closure (eventually some late results can
-// come after closing the upstream).
-// Both stream are guaranteed to be closed when |EndRecognition| call is issued.
-class CONTENT_EXPORT GoogleStreamingRemoteEngine
- : public NON_EXPORTED_BASE(SpeechRecognitionEngine),
- public net::URLFetcherDelegate,
- public NON_EXPORTED_BASE(base::NonThreadSafe) {
- public:
- // Duration of each audio packet.
- static const int kAudioPacketIntervalMs;
-
- // IDs passed to URLFetcher::Create(). Used for testing.
- static const int kUpstreamUrlFetcherIdForTesting;
- static const int kDownstreamUrlFetcherIdForTesting;
-
- explicit GoogleStreamingRemoteEngine(net::URLRequestContextGetter* context);
- ~GoogleStreamingRemoteEngine() override;
-
- // SpeechRecognitionEngine methods.
- void SetConfig(const SpeechRecognitionEngineConfig& config) override;
- void StartRecognition() override;
- void EndRecognition() override;
- void TakeAudioChunk(const AudioChunk& data) override;
- void AudioChunksEnded() override;
- bool IsRecognitionPending() const override;
- int GetDesiredAudioChunkDurationMs() const override;
-
- // net::URLFetcherDelegate methods.
- void OnURLFetchComplete(const net::URLFetcher* source) override;
- void OnURLFetchDownloadProgress(const net::URLFetcher* source,
- int64_t current,
- int64_t total) override;
-
- private:
- // Response status codes from the speech recognition webservice.
- static const int kWebserviceStatusNoError;
- static const int kWebserviceStatusErrorNoMatch;
-
- // Frame type for framed POST data. Do NOT change these. They must match
- // values the server expects.
- enum FrameType {
- FRAME_PREAMBLE_AUDIO = 0,
- FRAME_RECOGNITION_AUDIO = 1
- };
-
- // Data types for the internal Finite State Machine (FSM).
- enum FSMState {
- STATE_IDLE = 0,
- STATE_BOTH_STREAMS_CONNECTED,
- STATE_WAITING_DOWNSTREAM_RESULTS,
- STATE_MAX_VALUE = STATE_WAITING_DOWNSTREAM_RESULTS
- };
-
- enum FSMEvent {
- EVENT_END_RECOGNITION = 0,
- EVENT_START_RECOGNITION,
- EVENT_AUDIO_CHUNK,
- EVENT_AUDIO_CHUNKS_ENDED,
- EVENT_UPSTREAM_ERROR,
- EVENT_DOWNSTREAM_ERROR,
- EVENT_DOWNSTREAM_RESPONSE,
- EVENT_DOWNSTREAM_CLOSED,
- EVENT_MAX_VALUE = EVENT_DOWNSTREAM_CLOSED
- };
-
- struct FSMEventArgs {
- explicit FSMEventArgs(FSMEvent event_value);
- ~FSMEventArgs();
-
- FSMEvent event;
-
- // In case of EVENT_AUDIO_CHUNK, holds the chunk pushed by |TakeAudioChunk|.
- scoped_refptr<const AudioChunk> audio_data;
-
- // In case of EVENT_DOWNSTREAM_RESPONSE, hold the current chunk bytes.
- std::unique_ptr<std::vector<uint8_t>> response;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(FSMEventArgs);
- };
-
- // Invoked by both upstream and downstream URLFetcher callbacks to handle
- // new chunk data, connection closed or errors notifications.
- void DispatchHTTPResponse(const net::URLFetcher* source,
- bool end_of_response);
-
- // Entry point for pushing any new external event into the recognizer FSM.
- void DispatchEvent(const FSMEventArgs& event_args);
-
- // Defines the behavior of the recognizer FSM, selecting the appropriate
- // transition according to the current state and event.
- FSMState ExecuteTransitionAndGetNextState(const FSMEventArgs& event_args);
-
- // The methods below handle transitions of the recognizer FSM.
- FSMState ConnectBothStreams(const FSMEventArgs& event_args);
- FSMState TransmitAudioUpstream(const FSMEventArgs& event_args);
- FSMState ProcessDownstreamResponse(const FSMEventArgs& event_args);
- FSMState RaiseNoMatchErrorIfGotNoResults(const FSMEventArgs& event_args);
- FSMState CloseUpstreamAndWaitForResults(const FSMEventArgs& event_args);
- FSMState CloseDownstream(const FSMEventArgs& event_args);
- FSMState AbortSilently(const FSMEventArgs& event_args);
- FSMState AbortWithError(const FSMEventArgs& event_args);
- FSMState Abort(SpeechRecognitionErrorCode error);
- FSMState DoNothing(const FSMEventArgs& event_args);
- FSMState NotFeasible(const FSMEventArgs& event_args);
-
- std::string GetAcceptedLanguages() const;
- std::string GenerateRequestKey() const;
-
- // Upload a single chunk of audio data. Handles both unframed and framed
- // upload formats, and uses the appropriate one.
- void UploadAudioChunk(const std::string& data, FrameType type, bool is_final);
-
- SpeechRecognitionEngineConfig config_;
- std::unique_ptr<net::URLFetcher> upstream_fetcher_;
- std::unique_ptr<net::URLFetcher> downstream_fetcher_;
- scoped_refptr<net::URLRequestContextGetter> url_context_;
- std::unique_ptr<AudioEncoder> encoder_;
- std::unique_ptr<AudioEncoder> preamble_encoder_;
- ChunkedByteBuffer chunked_byte_buffer_;
- size_t previous_response_length_;
- bool got_last_definitive_result_;
- bool is_dispatching_event_;
- bool use_framed_post_data_;
- FSMState state_;
-
- DISALLOW_COPY_AND_ASSIGN(GoogleStreamingRemoteEngine);
-};
-
-} // namespace content
-
-#endif // CONTENT_BROWSER_SPEECH_GOOGLE_STREAMING_REMOTE_ENGINE_H_

Powered by Google App Engine
This is Rietveld 408576698