Commit e84ba51c authored by Mounir Lamouri's avatar Mounir Lamouri Committed by Commit Bot

WebAudio: do not use a fake audio device during layout tests.

This CL removes ContentRendererClient::OverrideCreateAudioDevice because
it breaks Web Audio tests that rely on rendering. Indeed, the fake audio
path used for layout tests wouldn't notify the audio destination node
that playback happened which means that calls to `resume()` would never
be resolved as they are dependant on the audio context to start
rendering.

This code was added a 5 years ago and the CL does not explain why nor
link to a bug:
https://chromium.googlesource.com/chromium/src/+/f065ec59efdaa8e00940381a99b93ef7960ba0f5%5E%21/

Bug: None
Change-Id: Ifc6854f97bdaf580b24cfc28460153b243188ac2
Reviewed-on: https://chromium-review.googlesource.com/1067100
Commit-Queue: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarRaymond Toy <rtoy@chromium.org>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#560909}
parent 340ab484
...@@ -64,12 +64,6 @@ ContentRendererClient::OverrideCreateMIDIAccessor( ...@@ -64,12 +64,6 @@ ContentRendererClient::OverrideCreateMIDIAccessor(
return nullptr; return nullptr;
} }
std::unique_ptr<blink::WebAudioDevice>
ContentRendererClient::OverrideCreateAudioDevice(
const blink::WebAudioLatencyHint& latency_hint) {
return nullptr;
}
blink::WebThemeEngine* ContentRendererClient::OverrideThemeEngine() { blink::WebThemeEngine* ContentRendererClient::OverrideThemeEngine() {
return nullptr; return nullptr;
} }
......
...@@ -39,8 +39,6 @@ class SingleThreadTaskRunner; ...@@ -39,8 +39,6 @@ class SingleThreadTaskRunner;
} }
namespace blink { namespace blink {
class WebAudioDevice;
class WebAudioLatencyHint;
class WebFrame; class WebFrame;
class WebLocalFrame; class WebLocalFrame;
class WebMIDIAccessor; class WebMIDIAccessor;
...@@ -166,11 +164,6 @@ class CONTENT_EXPORT ContentRendererClient { ...@@ -166,11 +164,6 @@ class CONTENT_EXPORT ContentRendererClient {
virtual std::unique_ptr<blink::WebMIDIAccessor> OverrideCreateMIDIAccessor( virtual std::unique_ptr<blink::WebMIDIAccessor> OverrideCreateMIDIAccessor(
blink::WebMIDIAccessorClient* client); blink::WebMIDIAccessorClient* client);
// Allows the embedder to override creating a WebAudioDevice. If it
// returns NULL the content layer will create the audio device.
virtual std::unique_ptr<blink::WebAudioDevice> OverrideCreateAudioDevice(
const blink::WebAudioLatencyHint& latency_hint);
// Allows the embedder to override the WebThemeEngine used. If it returns NULL // Allows the embedder to override the WebThemeEngine used. If it returns NULL
// the content layer will provide an engine. // the content layer will provide an engine.
virtual blink::WebThemeEngine* OverrideThemeEngine(); virtual blink::WebThemeEngine* OverrideThemeEngine();
......
...@@ -727,12 +727,6 @@ std::unique_ptr<WebAudioDevice> RendererBlinkPlatformImpl::CreateAudioDevice( ...@@ -727,12 +727,6 @@ std::unique_ptr<WebAudioDevice> RendererBlinkPlatformImpl::CreateAudioDevice(
const blink::WebAudioLatencyHint& latency_hint, const blink::WebAudioLatencyHint& latency_hint,
WebAudioDevice::RenderCallback* callback, WebAudioDevice::RenderCallback* callback,
const blink::WebString& input_device_id) { const blink::WebString& input_device_id) {
// Use a mock for testing.
std::unique_ptr<blink::WebAudioDevice> mock_device =
GetContentClient()->renderer()->OverrideCreateAudioDevice(latency_hint);
if (mock_device)
return mock_device;
// The |channels| does not exactly identify the channel layout of the // The |channels| does not exactly identify the channel layout of the
// device. The switch statement below assigns a best guess to the channel // device. The switch statement below assigns a best guess to the channel
// layout based on number of channels. // layout based on number of channels.
......
...@@ -170,39 +170,6 @@ LayoutTestContentRendererClient::OverrideCreateMIDIAccessor( ...@@ -170,39 +170,6 @@ LayoutTestContentRendererClient::OverrideCreateMIDIAccessor(
return interfaces->CreateMIDIAccessor(client); return interfaces->CreateMIDIAccessor(client);
} }
std::unique_ptr<WebAudioDevice>
LayoutTestContentRendererClient::OverrideCreateAudioDevice(
const blink::WebAudioLatencyHint& latency_hint) {
const double hw_buffer_size = 128;
const double hw_sample_rate = 44100;
double buffer_size = 0;
switch (latency_hint.Category()) {
case blink::WebAudioLatencyHint::kCategoryInteractive:
buffer_size =
media::AudioLatency::GetInteractiveBufferSize(hw_buffer_size);
break;
case blink::WebAudioLatencyHint::kCategoryBalanced:
buffer_size =
media::AudioLatency::GetRtcBufferSize(hw_sample_rate, hw_buffer_size);
break;
case blink::WebAudioLatencyHint::kCategoryPlayback:
buffer_size = media::AudioLatency::GetHighLatencyBufferSize(
hw_sample_rate, hw_buffer_size);
break;
case blink::WebAudioLatencyHint::kCategoryExact:
buffer_size = media::AudioLatency::GetExactBufferSize(
base::TimeDelta::FromSecondsD(latency_hint.Seconds()), hw_sample_rate,
hw_buffer_size);
break;
default:
NOTREACHED();
break;
}
test_runner::WebTestInterfaces* interfaces =
LayoutTestRenderThreadObserver::GetInstance()->test_interfaces();
return interfaces->CreateAudioDevice(hw_sample_rate, buffer_size);
}
WebThemeEngine* LayoutTestContentRendererClient::OverrideThemeEngine() { WebThemeEngine* LayoutTestContentRendererClient::OverrideThemeEngine() {
return LayoutTestRenderThreadObserver::GetInstance() return LayoutTestRenderThreadObserver::GetInstance()
->test_interfaces() ->test_interfaces()
......
...@@ -24,8 +24,6 @@ class LayoutTestContentRendererClient : public ShellContentRendererClient { ...@@ -24,8 +24,6 @@ class LayoutTestContentRendererClient : public ShellContentRendererClient {
void RenderViewCreated(RenderView* render_view) override; void RenderViewCreated(RenderView* render_view) override;
std::unique_ptr<blink::WebMIDIAccessor> OverrideCreateMIDIAccessor( std::unique_ptr<blink::WebMIDIAccessor> OverrideCreateMIDIAccessor(
blink::WebMIDIAccessorClient* client) override; blink::WebMIDIAccessorClient* client) override;
std::unique_ptr<blink::WebAudioDevice> OverrideCreateAudioDevice(
const blink::WebAudioLatencyHint& latency_hint) override;
blink::WebThemeEngine* OverrideThemeEngine() override; blink::WebThemeEngine* OverrideThemeEngine() override;
std::unique_ptr<MediaStreamRendererFactory> CreateMediaStreamRendererFactory() std::unique_ptr<MediaStreamRendererFactory> CreateMediaStreamRendererFactory()
override; override;
......
...@@ -38,8 +38,6 @@ component("test_runner") { ...@@ -38,8 +38,6 @@ component("test_runner") {
"mock_screen_orientation_client.h", "mock_screen_orientation_client.h",
"mock_spell_check.cc", "mock_spell_check.cc",
"mock_spell_check.h", "mock_spell_check.h",
"mock_web_audio_device.cc",
"mock_web_audio_device.h",
"mock_web_document_subresource_filter.cc", "mock_web_document_subresource_filter.cc",
"mock_web_document_subresource_filter.h", "mock_web_document_subresource_filter.h",
"mock_web_midi_accessor.cc", "mock_web_midi_accessor.cc",
......
// Copyright 2014 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.
#include "content/shell/test_runner/mock_web_audio_device.h"
namespace test_runner {
MockWebAudioDevice::MockWebAudioDevice(double sample_rate,
int frames_per_buffer)
: sample_rate_(sample_rate), frames_per_buffer_(frames_per_buffer) {}
MockWebAudioDevice::~MockWebAudioDevice() {}
void MockWebAudioDevice::Start() {}
void MockWebAudioDevice::Stop() {}
double MockWebAudioDevice::SampleRate() {
return sample_rate_;
}
int MockWebAudioDevice::FramesPerBuffer() {
return frames_per_buffer_;
}
} // namespace test_runner
// Copyright 2014 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_SHELL_TEST_RUNNER_MOCK_WEB_AUDIO_DEVICE_H_
#define CONTENT_SHELL_TEST_RUNNER_MOCK_WEB_AUDIO_DEVICE_H_
#include "base/macros.h"
#include "third_party/blink/public/platform/web_audio_device.h"
namespace test_runner {
class MockWebAudioDevice : public blink::WebAudioDevice {
public:
explicit MockWebAudioDevice(double sample_rate, int frames_per_buffer);
~MockWebAudioDevice() override;
// blink::WebAudioDevice:
void Start() override;
void Stop() override;
double SampleRate() override;
int FramesPerBuffer() override;
private:
double sample_rate_;
int frames_per_buffer_;
DISALLOW_COPY_AND_ASSIGN(MockWebAudioDevice);
};
} // namespace test_runner
#endif // CONTENT_SHELL_TEST_RUNNER_MOCK_WEB_AUDIO_DEVICE_H_
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include <utility> #include <utility>
#include "content/shell/test_runner/mock_web_audio_device.h"
#include "content/shell/test_runner/mock_web_midi_accessor.h" #include "content/shell/test_runner/mock_web_midi_accessor.h"
#include "content/shell/test_runner/test_interfaces.h" #include "content/shell/test_runner/test_interfaces.h"
#include "content/shell/test_runner/test_runner.h" #include "content/shell/test_runner/test_runner.h"
...@@ -69,12 +68,6 @@ std::unique_ptr<WebMIDIAccessor> WebTestInterfaces::CreateMIDIAccessor( ...@@ -69,12 +68,6 @@ std::unique_ptr<WebMIDIAccessor> WebTestInterfaces::CreateMIDIAccessor(
return std::make_unique<MockWebMIDIAccessor>(client, interfaces_.get()); return std::make_unique<MockWebMIDIAccessor>(client, interfaces_.get());
} }
std::unique_ptr<WebAudioDevice> WebTestInterfaces::CreateAudioDevice(
double sample_rate,
int frames_per_buffer) {
return std::make_unique<MockWebAudioDevice>(sample_rate, frames_per_buffer);
}
std::unique_ptr<WebFrameTestClient> WebTestInterfaces::CreateWebFrameTestClient( std::unique_ptr<WebFrameTestClient> WebTestInterfaces::CreateWebFrameTestClient(
WebViewTestProxyBase* web_view_test_proxy_base, WebViewTestProxyBase* web_view_test_proxy_base,
WebFrameTestProxyBase* web_frame_test_proxy_base) { WebFrameTestProxyBase* web_frame_test_proxy_base) {
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "content/shell/test_runner/test_runner_export.h" #include "content/shell/test_runner/test_runner_export.h"
namespace blink { namespace blink {
class WebAudioDevice;
class WebFrameClient; class WebFrameClient;
class WebMIDIAccessor; class WebMIDIAccessor;
class WebMIDIAccessorClient; class WebMIDIAccessorClient;
...@@ -67,10 +66,6 @@ class TEST_RUNNER_EXPORT WebTestInterfaces { ...@@ -67,10 +66,6 @@ class TEST_RUNNER_EXPORT WebTestInterfaces {
std::unique_ptr<blink::WebMIDIAccessor> CreateMIDIAccessor( std::unique_ptr<blink::WebMIDIAccessor> CreateMIDIAccessor(
blink::WebMIDIAccessorClient* client); blink::WebMIDIAccessorClient* client);
std::unique_ptr<blink::WebAudioDevice> CreateAudioDevice(
double sample_rate,
int frames_per_buffer);
TestInterfaces* GetTestInterfaces(); TestInterfaces* GetTestInterfaces();
// Creates a WebFrameClient implementation providing test behavior (i.e. // Creates a WebFrameClient implementation providing test behavior (i.e.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment