Commit b70e1522 authored by Sadrul Habib Chowdhury's avatar Sadrul Habib Chowdhury Committed by Commit Bot

content: Replace some LazyInstance with NoDestructor.

Use NoDestructor instead of LazyInstance in render_process_host_impl.cc

Bug: 925323
Change-Id: I1ec01d66894892ee8a8edad21c1e0cc66a8f4aeb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1839001
Commit-Queue: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703013}
parent 0f2b1068
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "base/debug/dump_without_crashing.h" #include "base/debug/dump_without_crashing.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/files/file.h" #include "base/files/file.h"
#include "base/lazy_instance.h"
#include "base/location.h" #include "base/location.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/memory_pressure_monitor.h" #include "base/memory/memory_pressure_monitor.h"
...@@ -326,8 +325,10 @@ void RemoveShaderInfo(int32_t id) { ...@@ -326,8 +325,10 @@ void RemoveShaderInfo(int32_t id) {
bool has_done_stun_trials = false; bool has_done_stun_trials = false;
// the global list of all renderer processes // the global list of all renderer processes
base::LazyInstance<base::IDMap<RenderProcessHost*>>::Leaky g_all_hosts = base::IDMap<RenderProcessHost*>& GetAllHosts() {
LAZY_INSTANCE_INITIALIZER; static base::NoDestructor<base::IDMap<RenderProcessHost*>> s_all_hosts;
return *s_all_hosts;
}
// Returns the global list of RenderProcessHostCreationObserver objects. // Returns the global list of RenderProcessHostCreationObserver objects.
std::vector<RenderProcessHostCreationObserver*>& GetAllCreationObservers() { std::vector<RenderProcessHostCreationObserver*>& GetAllCreationObservers() {
...@@ -483,7 +484,7 @@ class SessionStorageHolder : public base::SupportsUserData::Data { ...@@ -483,7 +484,7 @@ class SessionStorageHolder : public base::SupportsUserData::Data {
// This class manages spare RenderProcessHosts. // This class manages spare RenderProcessHosts.
// //
// There is a singleton instance of this class which manages a single spare // There is a singleton instance of this class which manages a single spare
// renderer (g_spare_render_process_host_manager, below). This class // renderer (SpareRenderProcessHostManager::GetInstance(), below). This class
// encapsulates the implementation of // encapsulates the implementation of
// RenderProcessHost::WarmupSpareRenderProcessHost() // RenderProcessHost::WarmupSpareRenderProcessHost()
// //
...@@ -503,6 +504,11 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver { ...@@ -503,6 +504,11 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver {
public: public:
SpareRenderProcessHostManager() {} SpareRenderProcessHostManager() {}
static SpareRenderProcessHostManager& GetInstance() {
static base::NoDestructor<SpareRenderProcessHostManager> s_instance;
return *s_instance;
}
void WarmupSpareRenderProcessHost(BrowserContext* browser_context) { void WarmupSpareRenderProcessHost(BrowserContext* browser_context) {
if (spare_render_process_host_ && if (spare_render_process_host_ &&
spare_render_process_host_->GetBrowserContext() == browser_context) { spare_render_process_host_->GetBrowserContext() == browser_context) {
...@@ -517,7 +523,7 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver { ...@@ -517,7 +523,7 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver {
// got too many processes. See also ShouldTryToUseExistingProcessHost in // got too many processes. See also ShouldTryToUseExistingProcessHost in
// this file. // this file.
if (RenderProcessHost::run_renderer_in_process() || if (RenderProcessHost::run_renderer_in_process() ||
g_all_hosts.Get().size() >= GetAllHosts().size() >=
RenderProcessHostImpl::GetMaxRendererProcessCount()) RenderProcessHostImpl::GetMaxRendererProcessCount())
return; return;
...@@ -599,7 +605,7 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver { ...@@ -599,7 +605,7 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver {
// If the spare shouldn't be kept around, then discard it as soon as we // If the spare shouldn't be kept around, then discard it as soon as we
// find that the current spare was mismatched. // find that the current spare was mismatched.
CleanupSpareRenderProcessHost(); CleanupSpareRenderProcessHost();
} else if (g_all_hosts.Get().size() >= } else if (GetAllHosts().size() >=
RenderProcessHostImpl::GetMaxRendererProcessCount()) { RenderProcessHostImpl::GetMaxRendererProcessCount()) {
// Drop the spare if we are at a process limit and the spare wasn't taken. // Drop the spare if we are at a process limit and the spare wasn't taken.
// This helps avoid process reuse. // This helps avoid process reuse.
...@@ -670,15 +676,12 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver { ...@@ -670,15 +676,12 @@ class SpareRenderProcessHostManager : public RenderProcessHostObserver {
} }
// This is a bare pointer, because RenderProcessHost manages the lifetime of // This is a bare pointer, because RenderProcessHost manages the lifetime of
// all its instances; see g_all_hosts, above. // all its instances; see GetAllHosts().
RenderProcessHost* spare_render_process_host_ = nullptr; RenderProcessHost* spare_render_process_host_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(SpareRenderProcessHostManager); DISALLOW_COPY_AND_ASSIGN(SpareRenderProcessHostManager);
}; };
base::LazyInstance<SpareRenderProcessHostManager>::Leaky
g_spare_render_process_host_manager = LAZY_INSTANCE_INITIALIZER;
const void* const kDefaultSubframeProcessHostHolderKey = const void* const kDefaultSubframeProcessHostHolderKey =
&kDefaultSubframeProcessHostHolderKey; &kDefaultSubframeProcessHostHolderKey;
...@@ -1418,8 +1421,10 @@ size_t RenderProcessHost::GetMaxRendererProcessCount() { ...@@ -1418,8 +1421,10 @@ size_t RenderProcessHost::GetMaxRendererProcessCount() {
// static // static
void RenderProcessHost::SetMaxRendererProcessCount(size_t count) { void RenderProcessHost::SetMaxRendererProcessCount(size_t count) {
g_max_renderer_count_override = count; g_max_renderer_count_override = count;
if (g_all_hosts.Get().size() > count) if (GetAllHosts().size() > count) {
g_spare_render_process_host_manager.Get().CleanupSpareRenderProcessHost(); SpareRenderProcessHostManager::GetInstance()
.CleanupSpareRenderProcessHost();
}
} }
// static // static
...@@ -1530,7 +1535,7 @@ RenderProcessHostImpl::RenderProcessHostImpl( ...@@ -1530,7 +1535,7 @@ RenderProcessHostImpl::RenderProcessHostImpl(
CHECK(!BrowserMainRunner::ExitedMainMessageLoop()); CHECK(!BrowserMainRunner::ExitedMainMessageLoop());
RegisterHost(GetID(), this); RegisterHost(GetID(), this);
g_all_hosts.Get().set_check_on_null_data(true); GetAllHosts().set_check_on_null_data(true);
// Initialize |child_process_activity_time_| to a reasonable value. // Initialize |child_process_activity_time_| to a reasonable value.
mark_child_process_activity_time(); mark_child_process_activity_time();
...@@ -1570,7 +1575,7 @@ RenderProcessHostImpl::RenderProcessHostImpl( ...@@ -1570,7 +1575,7 @@ RenderProcessHostImpl::RenderProcessHostImpl(
void RenderProcessHostImpl::ShutDownInProcessRenderer() { void RenderProcessHostImpl::ShutDownInProcessRenderer() {
DCHECK(g_run_renderer_in_process); DCHECK(g_run_renderer_in_process);
switch (g_all_hosts.Pointer()->size()) { switch (GetAllHosts().size()) {
case 0: case 0:
return; return;
case 1: { case 1: {
...@@ -2849,19 +2854,20 @@ void RenderProcessHostImpl::RemoveExpectedNavigationToSite( ...@@ -2849,19 +2854,20 @@ void RenderProcessHostImpl::RemoveExpectedNavigationToSite(
// static // static
void RenderProcessHostImpl::NotifySpareManagerAboutRecentlyUsedBrowserContext( void RenderProcessHostImpl::NotifySpareManagerAboutRecentlyUsedBrowserContext(
BrowserContext* browser_context) { BrowserContext* browser_context) {
g_spare_render_process_host_manager.Get().PrepareForFutureRequests( SpareRenderProcessHostManager::GetInstance().PrepareForFutureRequests(
browser_context); browser_context);
} }
// static // static
RenderProcessHost* RenderProcessHost*
RenderProcessHostImpl::GetSpareRenderProcessHostForTesting() { RenderProcessHostImpl::GetSpareRenderProcessHostForTesting() {
return g_spare_render_process_host_manager.Get().spare_render_process_host(); return SpareRenderProcessHostManager::GetInstance()
.spare_render_process_host();
} }
// static // static
void RenderProcessHostImpl::DiscardSpareRenderProcessHostForTesting() { void RenderProcessHostImpl::DiscardSpareRenderProcessHostForTesting() {
g_spare_render_process_host_manager.Get().CleanupSpareRenderProcessHost(); SpareRenderProcessHostManager::GetInstance().CleanupSpareRenderProcessHost();
} }
// static // static
...@@ -3688,16 +3694,16 @@ bool RenderProcessHostImpl::FastShutdownStarted() { ...@@ -3688,16 +3694,16 @@ bool RenderProcessHostImpl::FastShutdownStarted() {
// static // static
void RenderProcessHostImpl::RegisterHost(int host_id, RenderProcessHost* host) { void RenderProcessHostImpl::RegisterHost(int host_id, RenderProcessHost* host) {
g_all_hosts.Get().AddWithID(host, host_id); GetAllHosts().AddWithID(host, host_id);
} }
// static // static
void RenderProcessHostImpl::UnregisterHost(int host_id) { void RenderProcessHostImpl::UnregisterHost(int host_id) {
RenderProcessHost* host = g_all_hosts.Get().Lookup(host_id); RenderProcessHost* host = GetAllHosts().Lookup(host_id);
if (!host) if (!host)
return; return;
g_all_hosts.Get().Remove(host_id); GetAllHosts().Remove(host_id);
// Look up the map of site to process for the given browser_context, // Look up the map of site to process for the given browser_context,
// in case we need to remove this process from it. It will be registered // in case we need to remove this process from it. It will be registered
...@@ -3857,7 +3863,7 @@ bool RenderProcessHostImpl::IsSuitableHost( ...@@ -3857,7 +3863,7 @@ bool RenderProcessHostImpl::IsSuitableHost(
// static // static
void RenderProcessHost::WarmupSpareRenderProcessHost( void RenderProcessHost::WarmupSpareRenderProcessHost(
content::BrowserContext* browser_context) { content::BrowserContext* browser_context) {
g_spare_render_process_host_manager.Get().WarmupSpareRenderProcessHost( SpareRenderProcessHostManager::GetInstance().WarmupSpareRenderProcessHost(
browser_context); browser_context);
} }
...@@ -3889,13 +3895,13 @@ void RenderProcessHost::SetRunRendererInProcess(bool value) { ...@@ -3889,13 +3895,13 @@ void RenderProcessHost::SetRunRendererInProcess(bool value) {
// static // static
RenderProcessHost::iterator RenderProcessHost::AllHostsIterator() { RenderProcessHost::iterator RenderProcessHost::AllHostsIterator() {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
return iterator(g_all_hosts.Pointer()); return iterator(&GetAllHosts());
} }
// static // static
RenderProcessHost* RenderProcessHost::FromID(int render_process_id) { RenderProcessHost* RenderProcessHost::FromID(int render_process_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
return g_all_hosts.Get().Lookup(render_process_id); return GetAllHosts().Lookup(render_process_id);
} }
// static // static
...@@ -3922,7 +3928,7 @@ bool RenderProcessHost::ShouldTryToUseExistingProcessHost( ...@@ -3922,7 +3928,7 @@ bool RenderProcessHost::ShouldTryToUseExistingProcessHost(
// a renderer process for a browser context that has no existing // a renderer process for a browser context that has no existing
// renderers. This is OK in moderation, since the // renderers. This is OK in moderation, since the
// GetMaxRendererProcessCount() is conservative. // GetMaxRendererProcessCount() is conservative.
if (g_all_hosts.Get().size() >= GetMaxRendererProcessCount()) if (GetAllHosts().size() >= GetMaxRendererProcessCount())
return true; return true;
return GetContentClient()->browser()->ShouldTryToUseExistingProcessHost( return GetContentClient()->browser()->ShouldTryToUseExistingProcessHost(
...@@ -3934,7 +3940,7 @@ RenderProcessHost* RenderProcessHostImpl::GetExistingProcessHost( ...@@ -3934,7 +3940,7 @@ RenderProcessHost* RenderProcessHostImpl::GetExistingProcessHost(
SiteInstanceImpl* site_instance) { SiteInstanceImpl* site_instance) {
// First figure out which existing renderers we can use. // First figure out which existing renderers we can use.
std::vector<RenderProcessHost*> suitable_renderers; std::vector<RenderProcessHost*> suitable_renderers;
suitable_renderers.reserve(g_all_hosts.Get().size()); suitable_renderers.reserve(GetAllHosts().size());
iterator iter(AllHostsIterator()); iterator iter(AllHostsIterator());
while (!iter.IsAtEnd()) { while (!iter.IsAtEnd()) {
...@@ -3945,7 +3951,7 @@ RenderProcessHost* RenderProcessHostImpl::GetExistingProcessHost( ...@@ -3945,7 +3951,7 @@ RenderProcessHost* RenderProcessHostImpl::GetExistingProcessHost(
site_instance->lock_url())) { site_instance->lock_url())) {
// The spare is always considered before process reuse. // The spare is always considered before process reuse.
DCHECK_NE(iter.GetCurrentValue(), DCHECK_NE(iter.GetCurrentValue(),
g_spare_render_process_host_manager.Get() SpareRenderProcessHostManager::GetInstance()
.spare_render_process_host()); .spare_render_process_host());
suitable_renderers.push_back(iter.GetCurrentValue()); suitable_renderers.push_back(iter.GetCurrentValue());
...@@ -4096,8 +4102,7 @@ RenderProcessHost* RenderProcessHostImpl::GetProcessHostForSiteInstance( ...@@ -4096,8 +4102,7 @@ RenderProcessHost* RenderProcessHostImpl::GetProcessHostForSiteInstance(
} }
// See if the spare RenderProcessHost can be used. // See if the spare RenderProcessHost can be used.
SpareRenderProcessHostManager& spare_process_manager = auto& spare_process_manager = SpareRenderProcessHostManager::GetInstance();
g_spare_render_process_host_manager.Get();
bool spare_was_taken = false; bool spare_was_taken = false;
if (!render_process_host) { if (!render_process_host) {
render_process_host = spare_process_manager.MaybeTakeSpareRenderProcessHost( render_process_host = spare_process_manager.MaybeTakeSpareRenderProcessHost(
......
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