Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(563)

Unified Diff: extensions/browser/process_manager.cc

Issue 2762513002: Remove keep-alive impulse IPCs from NaCl modules. (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/process_manager.h ('k') | extensions/shell/browser/shell_nacl_browser_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/process_manager.cc
diff --git a/extensions/browser/process_manager.cc b/extensions/browser/process_manager.cc
index 9af62f42e841a2c2adc76ca920b15bae667a15a8..da355fcc762e17d9d4006842d690f8da7edfabad 100644
--- a/extensions/browser/process_manager.cc
+++ b/extensions/browser/process_manager.cc
@@ -48,8 +48,6 @@ namespace {
// The time to delay between an extension becoming idle and
// sending a ShouldSuspend message.
-// Note: Must be sufficiently larger (e.g. 2x) than
-// kKeepaliveThrottleIntervalInSeconds in ppapi/proxy/plugin_globals.
unsigned g_event_page_idle_time_msec = 10000;
// The time to delay between sending a ShouldSuspend message and
@@ -120,46 +118,32 @@ void PropagateExtensionWakeResult(const base::Callback<void(bool)>& callback,
struct ProcessManager::BackgroundPageData {
// The count of things keeping the lazy background page alive.
- int lazy_keepalive_count;
-
- // Tracks if an impulse event has occured since the last polling check.
- bool keepalive_impulse;
- bool previous_keepalive_impulse;
+ int lazy_keepalive_count = 0;
// True if the page responded to the ShouldSuspend message and is currently
// dispatching the suspend event. During this time any events that arrive will
// cancel the suspend process and an onSuspendCanceled event will be
// dispatched to the page.
- bool is_closing;
+ bool is_closing = false;
// Stores the value of the incremented
// ProcessManager::last_background_close_sequence_id_ whenever the extension
// is active. A copy of the ID is also passed in the callbacks and IPC
// messages leading up to CloseLazyBackgroundPageNow. The process is aborted
// if the IDs ever differ due to new activity.
- uint64_t close_sequence_id;
+ uint64_t close_sequence_id = 0ull;
// Keeps track of when this page was last suspended. Used for perf metrics.
std::unique_ptr<base::ElapsedTimer> since_suspended;
-
- BackgroundPageData()
- : lazy_keepalive_count(0),
- keepalive_impulse(false),
- previous_keepalive_impulse(false),
- is_closing(false),
- close_sequence_id(0) {}
};
// Data of a RenderFrameHost associated with an extension.
struct ProcessManager::ExtensionRenderFrameData {
// The type of the view.
- extensions::ViewType view_type;
+ extensions::ViewType view_type = VIEW_TYPE_INVALID;
// Whether the view is keeping the lazy background page alive or not.
- bool has_keepalive;
-
- ExtensionRenderFrameData()
- : view_type(VIEW_TYPE_INVALID), has_keepalive(false) {}
+ bool has_keepalive = false;
// Returns whether the view can keep the lazy background page alive or not.
bool CanKeepalive() const {
@@ -262,8 +246,6 @@ ProcessManager::ProcessManager(BrowserContext* context,
extensions::NOTIFICATION_EXTENSION_HOST_VIEW_SHOULD_CLOSE,
content::Source<BrowserContext>(context));
content::DevToolsAgentHost::AddObserver(this);
-
- OnKeepaliveImpulseCheck();
}
ProcessManager::~ProcessManager() = default;
@@ -495,52 +477,6 @@ void ProcessManager::DecrementLazyKeepaliveCount(const Extension* extension) {
DecrementLazyKeepaliveCount(extension->id());
}
-// This implementation layers on top of the keepalive count. An impulse sets
-// a per extension flag. On a regular interval that flag is checked. Changes
-// from the flag not being set to set cause an IncrementLazyKeepaliveCount.
-void ProcessManager::KeepaliveImpulse(const Extension* extension) {
- if (!BackgroundInfo::HasLazyBackgroundPage(extension))
- return;
-
- BackgroundPageData& bd = background_page_data_[extension->id()];
-
- if (!bd.keepalive_impulse) {
- bd.keepalive_impulse = true;
- if (!bd.previous_keepalive_impulse) {
- IncrementLazyKeepaliveCount(extension);
- }
- }
-
- if (!keepalive_impulse_callback_for_testing_.is_null()) {
- ImpulseCallbackForTesting callback_may_clear_callbacks_reentrantly =
- keepalive_impulse_callback_for_testing_;
- callback_may_clear_callbacks_reentrantly.Run(extension->id());
- }
-}
-
-// static
-void ProcessManager::OnKeepaliveFromPlugin(int render_process_id,
- int render_frame_id,
- const std::string& extension_id) {
- content::RenderFrameHost* render_frame_host =
- content::RenderFrameHost::FromID(render_process_id, render_frame_id);
- if (!render_frame_host)
- return;
-
- content::SiteInstance* site_instance = render_frame_host->GetSiteInstance();
- if (!site_instance)
- return;
-
- BrowserContext* browser_context = site_instance->GetBrowserContext();
- const Extension* extension =
- ExtensionRegistry::Get(browser_context)->enabled_extensions().GetByID(
- extension_id);
- if (!extension)
- return;
-
- ProcessManager::Get(browser_context)->KeepaliveImpulse(extension);
-}
-
void ProcessManager::OnShouldSuspendAck(const std::string& extension_id,
uint64_t sequence_id) {
ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
@@ -630,19 +566,9 @@ void ProcessManager::CloseBackgroundHosts() {
DCHECK(background_hosts_.empty());
}
-void ProcessManager::SetKeepaliveImpulseCallbackForTesting(
- const ImpulseCallbackForTesting& callback) {
- keepalive_impulse_callback_for_testing_ = callback;
-}
-
-void ProcessManager::SetKeepaliveImpulseDecrementCallbackForTesting(
- const ImpulseCallbackForTesting& callback) {
- keepalive_impulse_decrement_callback_for_testing_ = callback;
-}
-
// static
void ProcessManager::SetEventPageIdleTimeForTesting(unsigned idle_time_msec) {
- CHECK_GT(idle_time_msec, 0u); // OnKeepaliveImpulseCheck requires non zero.
+ CHECK_GT(idle_time_msec, 0u);
g_event_page_idle_time_msec = idle_time_msec;
}
@@ -800,41 +726,6 @@ void ProcessManager::DecrementLazyKeepaliveCount(
}
}
-// DecrementLazyKeepaliveCount is called when no calls to KeepaliveImpulse
-// have been made for at least g_event_page_idle_time_msec. In the best case an
-// impulse was made just before being cleared, and the decrement will occur
-// g_event_page_idle_time_msec later, causing a 2 * g_event_page_idle_time_msec
-// total time for extension to be shut down based on impulses. Worst case is
-// an impulse just after a clear, adding one check cycle and resulting in 3x
-// total time.
-void ProcessManager::OnKeepaliveImpulseCheck() {
- for (BackgroundPageDataMap::iterator i = background_page_data_.begin();
- i != background_page_data_.end();
- ++i) {
- if (i->second.previous_keepalive_impulse && !i->second.keepalive_impulse) {
- DecrementLazyKeepaliveCount(i->first);
- if (!keepalive_impulse_decrement_callback_for_testing_.is_null()) {
- ImpulseCallbackForTesting callback_may_clear_callbacks_reentrantly =
- keepalive_impulse_decrement_callback_for_testing_;
- callback_may_clear_callbacks_reentrantly.Run(i->first);
- }
- }
-
- i->second.previous_keepalive_impulse = i->second.keepalive_impulse;
- i->second.keepalive_impulse = false;
- }
-
- // OnKeepaliveImpulseCheck() is always called in constructor, but in unit
- // tests there will be no thread task runner handle. In that event don't
- // schedule tasks.
- if (base::ThreadTaskRunnerHandle::IsSet()) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE, base::Bind(&ProcessManager::OnKeepaliveImpulseCheck,
- weak_ptr_factory_.GetWeakPtr()),
- base::TimeDelta::FromMilliseconds(g_event_page_idle_time_msec));
- }
-}
-
void ProcessManager::OnLazyBackgroundPageIdle(const std::string& extension_id,
uint64_t sequence_id) {
ExtensionHost* host = GetBackgroundHostForExtension(extension_id);
« no previous file with comments | « extensions/browser/process_manager.h ('k') | extensions/shell/browser/shell_nacl_browser_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698