Support Espeak tts on linux Chrome OS Chrome builds
This change enables Chrome OS Chrome builds running on non-cros linux to work with Espeak-ng. On linux builds, dcheck always triggers an error in mojo. Consequently, in TtsService, where the service makes mojo calls on a Remote within the audio thread, a DCHECK was hit: 2021-01-11T22:46:32.666960Z FATAL chrome[2743839:2743847]: [sequence_checker.h(120)] Check failed: checker.CalledOnValidSequence(). #0 0x7f7ee68c681f base::debug::CollectStackTrace() #1 0x7f7ee665fd8a base::debug::StackTrace::StackTrace() #2 0x7f7ee665fd45 base::debug::StackTrace::StackTrace() #3 0x7f7ee66a9057 logging::LogMessage::~LogMessage() #4 0x7f7ee66a9769 logging::LogMessage::~LogMessage() #5 0x7f7ee6620c1b logging::CheckError::~CheckError() #6 0x7f7ee564e09c base::ScopedValidateSequenceChecker::ScopedValidateSequenceChecker() #7 0x7f7ee566c068 mojo::InterfaceEndpointClient::SendMessage() #8 0x7f7ee566c99f mojo::InterfaceEndpointClient::Accept() #9 0x565159b53c29 chromeos::tts::mojom::TtsEventObserverProxy::OnStart() #10 0x56515c4e3a5a chromeos::tts::TtsService::Render() #11 0x7f7ed8648f02 media::AudioOutputDeviceThreadCallback::Process() #12 0x7f7ed861fe9d media::AudioDeviceThread::ThreadMain() #13 0x7f7ee68fb1ab base::(anonymous namespace)::ThreadFunc() #14 0x7f7ea303fea7 start_thread #15 0x7f7ea2baad8f clone Fix this by queueing up already rendered audio buffers and processing them on the main thread's task runner. Test: manually on a linux chromeos build. Verify that web speech produces speech through Espeak. Change-Id: I4b1e5b0a6e72e4e571b5a26fde731acc57936894 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2621983Reviewed-by:Katie Dektar <katie@chromium.org> Commit-Queue: David Tseng <dtseng@chromium.org> Cr-Commit-Position: refs/heads/master@{#842622}
Showing
Please register or sign in to comment