// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_RENDERER_HOST_SPARE_RENDER_PROCESS_HOST_MANAGER_H_ #define CONTENT_BROWSER_RENDERER_HOST_SPARE_RENDER_PROCESS_HOST_MANAGER_H_ #include <optional> #include "base/callback_list.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/timer/elapsed_timer.h" #include "base/timer/timer.h" #include "content/common/content_export.h" #include "content/public/browser/render_process_host_observer.h" namespace content { class BrowserContext; class SiteInstanceImpl; class RenderProcessHost; // This class manages spare RenderProcessHosts. // // There is a singleton instance of this class which manages a single spare // renderer (SpareRenderProcessHostManager::GetInstance(), below). This class // encapsulates the implementation of // RenderProcessHost::WarmupSpareRenderProcessHost() // // RenderProcessHostImpl should call // SpareRenderProcessHostManager::MaybeTakeSpareRenderProcessHost when creating // a new RPH. In this implementation, the spare renderer is bound to a // BrowserContext and its default StoragePartition. If // MaybeTakeSpareRenderProcessHost is called with a BrowserContext that does not // match, the spare renderer is discarded. Only the default StoragePartition // will be able to use a spare renderer. The spare renderer will also not be // used as a guest renderer (flags_ contains kForGuestsOnly). // // It is safe to call WarmupSpareRenderProcessHost multiple times, although if // called in a context where the spare renderer is not likely to be used // performance may suffer due to the unnecessary RPH creation. class CONTENT_EXPORT SpareRenderProcessHostManager : public RenderProcessHostObserver { … }; } // namespace content #endif // CONTENT_BROWSER_RENDERER_HOST_SPARE_RENDER_PROCESS_HOST_MANAGER_H_