Commit c0c0d24f authored by Olga Sharonova's avatar Olga Sharonova Committed by Commit Bot

Feature flag to launch the audio service on the browser startup.

Audio process experiment is observing performance regressions caused by
on-the-flight audio process launch. Introducing a feature flag to
pre-launch it on the browser startup.
This will be rolled out as another AudioService experiment group, to
evaluate memory and performance impact.

TEST=manual

Bug: 851611,853781
Change-Id: I30c1798dae07c5ce8a71243ab482ceb89d008e43
Reviewed-on: https://chromium-review.googlesource.com/1104681
Commit-Queue: Olga Sharonova <olka@chromium.org>
Reviewed-by: default avatarGabriel Charette <gab@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568389}
parent b8d38118
...@@ -125,6 +125,7 @@ ...@@ -125,6 +125,7 @@
#include "net/ssl/ssl_config_service.h" #include "net/ssl/ssl_config_service.h"
#include "ppapi/buildflags/buildflags.h" #include "ppapi/buildflags/buildflags.h"
#include "services/audio/public/cpp/audio_system_factory.h" #include "services/audio/public/cpp/audio_system_factory.h"
#include "services/audio/public/mojom/constants.mojom.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h" #include "services/resource_coordinator/public/cpp/memory_instrumentation/client_process_impl.h"
#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h"
#include "services/resource_coordinator/public/mojom/service_constants.mojom.h" #include "services/resource_coordinator/public/mojom/service_constants.mojom.h"
...@@ -1298,7 +1299,7 @@ int BrowserMainLoop::BrowserThreadsStarted() { ...@@ -1298,7 +1299,7 @@ int BrowserMainLoop::BrowserThreadsStarted() {
{ {
TRACE_EVENT0("startup", "BrowserThreadsStarted::Subsystem:AudioMan"); TRACE_EVENT0("startup", "BrowserThreadsStarted::Subsystem:AudioMan");
CreateAudioManager(); InitializeAudio();
} }
{ {
...@@ -1629,7 +1630,7 @@ void BrowserMainLoop::EndStartupTracing() { ...@@ -1629,7 +1630,7 @@ void BrowserMainLoop::EndStartupTracing() {
base::Bind(OnStoppedStartupTracing, startup_trace_file_))); base::Bind(OnStoppedStartupTracing, startup_trace_file_)));
} }
void BrowserMainLoop::CreateAudioManager() { void BrowserMainLoop::InitializeAudio() {
DCHECK(!audio_manager_); DCHECK(!audio_manager_);
audio_manager_ = GetContentClient()->browser()->CreateAudioManager( audio_manager_ = GetContentClient()->browser()->CreateAudioManager(
...@@ -1660,6 +1661,12 @@ void BrowserMainLoop::CreateAudioManager() { ...@@ -1660,6 +1661,12 @@ void BrowserMainLoop::CreateAudioManager() {
audio_service_runner_->StartWithTaskRunner(audio_manager_->GetTaskRunner()); audio_service_runner_->StartWithTaskRunner(audio_manager_->GetTaskRunner());
} }
if (base::FeatureList::IsEnabled(features::kAudioServiceLaunchOnStartup)) {
content::ServiceManagerConnection::GetForProcess()
->GetConnector()
->StartService(audio::mojom::kServiceName);
}
audio_system_ = audio::CreateAudioSystem( audio_system_ = audio::CreateAudioSystem(
content::ServiceManagerConnection::GetForProcess() content::ServiceManagerConnection::GetForProcess()
->GetConnector() ->GetConnector()
......
...@@ -254,7 +254,7 @@ class CONTENT_EXPORT BrowserMainLoop { ...@@ -254,7 +254,7 @@ class CONTENT_EXPORT BrowserMainLoop {
void InitStartupTracingForDuration(); void InitStartupTracingForDuration();
void EndStartupTracing(); void EndStartupTracing();
void CreateAudioManager(); void InitializeAudio();
bool UsingInProcessGpu() const; bool UsingInProcessGpu() const;
......
...@@ -36,6 +36,10 @@ const base::Feature kAsyncWheelEvents{"AsyncWheelEvents", ...@@ -36,6 +36,10 @@ const base::Feature kAsyncWheelEvents{"AsyncWheelEvents",
const base::Feature kAudioServiceAudioStreams{ const base::Feature kAudioServiceAudioStreams{
"AudioServiceAudioStreams", base::FEATURE_DISABLED_BY_DEFAULT}; "AudioServiceAudioStreams", base::FEATURE_DISABLED_BY_DEFAULT};
// Launches the audio service on the browser startup.
const base::Feature kAudioServiceLaunchOnStartup{
"AudioServiceLaunchOnStartup", base::FEATURE_DISABLED_BY_DEFAULT};
// Runs the audio service in a separate process. // Runs the audio service in a separate process.
const base::Feature kAudioServiceOutOfProcess{ const base::Feature kAudioServiceOutOfProcess{
"AudioServiceOutOfProcess", base::FEATURE_DISABLED_BY_DEFAULT}; "AudioServiceOutOfProcess", base::FEATURE_DISABLED_BY_DEFAULT};
......
...@@ -22,6 +22,7 @@ CONTENT_EXPORT extern const base::Feature ...@@ -22,6 +22,7 @@ CONTENT_EXPORT extern const base::Feature
CONTENT_EXPORT extern const base::Feature kAsmJsToWebAssembly; CONTENT_EXPORT extern const base::Feature kAsmJsToWebAssembly;
CONTENT_EXPORT extern const base::Feature kAsyncWheelEvents; CONTENT_EXPORT extern const base::Feature kAsyncWheelEvents;
CONTENT_EXPORT extern const base::Feature kAudioServiceAudioStreams; CONTENT_EXPORT extern const base::Feature kAudioServiceAudioStreams;
CONTENT_EXPORT extern const base::Feature kAudioServiceLaunchOnStartup;
CONTENT_EXPORT extern const base::Feature kAudioServiceOutOfProcess; CONTENT_EXPORT extern const base::Feature kAudioServiceOutOfProcess;
CONTENT_EXPORT extern const base::Feature kBlinkHeapIncrementalMarking; CONTENT_EXPORT extern const base::Feature kBlinkHeapIncrementalMarking;
CONTENT_EXPORT extern const base::Feature kBlockCredentialedSubresources; CONTENT_EXPORT extern const base::Feature kBlockCredentialedSubresources;
......
...@@ -63,6 +63,9 @@ void Service::OnStart() { ...@@ -63,6 +63,9 @@ void Service::OnStart() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
TRACE_EVENT0("audio", "audio::Service::OnStart") TRACE_EVENT0("audio", "audio::Service::OnStart")
// This will pre-create AudioManager if AudioManagerAccessor owns it.
CHECK(audio_manager_accessor_->GetAudioManager());
metrics_ = metrics_ =
std::make_unique<ServiceMetrics>(base::DefaultTickClock::GetInstance()); std::make_unique<ServiceMetrics>(base::DefaultTickClock::GetInstance());
ref_factory_ = std::make_unique<service_manager::ServiceContextRefFactory>( ref_factory_ = std::make_unique<service_manager::ServiceContextRefFactory>(
......
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