Title: [128205] trunk/Source/WebKit2
- Revision
- 128205
- Author
- [email protected]
- Date
- 2012-09-11 10:42:28 -0700 (Tue, 11 Sep 2012)
Log Message
We should wait longer before killing the PluginProcess.
<rdar://problem/12067728> and https://bugs.webkit.org/show_bug.cgi?id=96407
Reviewed by Anders Carlsson.
Currently we kill the PluginProcess 15 seconds after the last plug-in is destroyed.
This is short enough that most users will have the process killed many times during browsing sessions,
which is painful because relaunching the process is I/O and kernel intensive.
In an ideal world we could keep it around forever until the system tells us resources are running low.
In reality we do want to kill it occasionally to get a clean slate from any plug-in leaks.
A reasonable balance for now is to set a minimum lifetime of 30 minutes on the plug-in process and to
extend the termination timer from 15 seconds to 10 minutes.
* PluginProcess/PluginProcess.cpp:
(WebKit::PluginProcess::PluginProcess):
(WebKit::PluginProcess::initializePluginProcess):
(WebKit::PluginProcess::setMinimumLifetime):
(WebKit):
(WebKit::PluginProcess::minimumLifetimeTimerFired):
* PluginProcess/PluginProcess.h:
(PluginProcess):
* Shared/Plugins/PluginProcessCreationParameters.cpp:
(WebKit::PluginProcessCreationParameters::encode):
(WebKit::PluginProcessCreationParameters::decode):
* Shared/Plugins/PluginProcessCreationParameters.h:
(PluginProcessCreationParameters):
* UIProcess/Plugins/PluginProcessProxy.cpp:
(WebKit):
(WebKit::PluginProcessProxy::didFinishLaunching):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (128204 => 128205)
--- trunk/Source/WebKit2/ChangeLog 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/ChangeLog 2012-09-11 17:42:28 UTC (rev 128205)
@@ -1,3 +1,40 @@
+2012-09-11 Brady Eidson <[email protected]>
+
+ We should wait longer before killing the PluginProcess.
+ <rdar://problem/12067728> and https://bugs.webkit.org/show_bug.cgi?id=96407
+
+ Reviewed by Anders Carlsson.
+
+ Currently we kill the PluginProcess 15 seconds after the last plug-in is destroyed.
+ This is short enough that most users will have the process killed many times during browsing sessions,
+ which is painful because relaunching the process is I/O and kernel intensive.
+
+ In an ideal world we could keep it around forever until the system tells us resources are running low.
+
+ In reality we do want to kill it occasionally to get a clean slate from any plug-in leaks.
+
+ A reasonable balance for now is to set a minimum lifetime of 30 minutes on the plug-in process and to
+ extend the termination timer from 15 seconds to 10 minutes.
+
+ * PluginProcess/PluginProcess.cpp:
+ (WebKit::PluginProcess::PluginProcess):
+ (WebKit::PluginProcess::initializePluginProcess):
+ (WebKit::PluginProcess::setMinimumLifetime):
+ (WebKit):
+ (WebKit::PluginProcess::minimumLifetimeTimerFired):
+ * PluginProcess/PluginProcess.h:
+ (PluginProcess):
+
+ * Shared/Plugins/PluginProcessCreationParameters.cpp:
+ (WebKit::PluginProcessCreationParameters::encode):
+ (WebKit::PluginProcessCreationParameters::decode):
+ * Shared/Plugins/PluginProcessCreationParameters.h:
+ (PluginProcessCreationParameters):
+
+ * UIProcess/Plugins/PluginProcessProxy.cpp:
+ (WebKit):
+ (WebKit::PluginProcessProxy::didFinishLaunching):
+
2012-09-11 Jinwoo Song <[email protected]>
Deploy StringBuilder::appendNumber() and StringBuilder::appendLiteral() in more places
Modified: trunk/Source/WebKit2/PluginProcess/PluginProcess.cpp (128204 => 128205)
--- trunk/Source/WebKit2/PluginProcess/PluginProcess.cpp 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/PluginProcess/PluginProcess.cpp 2012-09-11 17:42:28 UTC (rev 128205)
@@ -73,6 +73,7 @@
PluginProcess::PluginProcess()
: m_supportsAsynchronousPluginInitialization(false)
+ , m_minimumLifetimeTimer(RunLoop::main(), this, &PluginProcess::minimumLifetimeTimerFired)
#if PLATFORM(MAC)
, m_compositingRenderServerPort(MACH_PORT_NULL)
#endif
@@ -159,6 +160,7 @@
m_pluginPath = parameters.pluginPath;
m_supportsAsynchronousPluginInitialization = parameters.supportsAsynchronousPluginInitialization;
+ setMinimumLifetime(parameters.minimumLifetime);
setTerminationTimeout(parameters.terminationTimeout);
platformInitialize(parameters);
@@ -254,6 +256,21 @@
m_connection->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0);
}
+void PluginProcess::setMinimumLifetime(double lifetime)
+{
+ if (lifetime <= 0.0)
+ return;
+
+ disableTermination();
+
+ m_minimumLifetimeTimer.startOneShot(lifetime);
+}
+
+void PluginProcess::minimumLifetimeTimerFired()
+{
+ enableTermination();
+}
+
} // namespace WebKit
#endif // ENABLE(PLUGIN_PROCESS)
Modified: trunk/Source/WebKit2/PluginProcess/PluginProcess.h (128204 => 128205)
--- trunk/Source/WebKit2/PluginProcess/PluginProcess.h 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/PluginProcess/PluginProcess.h 2012-09-11 17:42:28 UTC (rev 128205)
@@ -86,6 +86,9 @@
void clearSiteData(const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID);
void platformInitialize(const PluginProcessCreationParameters&);
+
+ void setMinimumLifetime(double);
+ void minimumLifetimeTimerFired();
// The connection to the UI process.
RefPtr<CoreIPC::Connection> m_connection;
@@ -100,12 +103,14 @@
RefPtr<NetscapePluginModule> m_pluginModule;
bool m_supportsAsynchronousPluginInitialization;
+
+ WebCore::RunLoop::Timer<PluginProcess> m_minimumLifetimeTimer;
#if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC)
// The Mach port used for accelerated compositing.
mach_port_t m_compositingRenderServerPort;
#endif
-
+
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp (128204 => 128205)
--- trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp 2012-09-11 17:42:28 UTC (rev 128205)
@@ -41,6 +41,7 @@
{
encoder->encode(pluginPath);
encoder->encode(supportsAsynchronousPluginInitialization);
+ encoder->encode(minimumLifetime);
encoder->encode(terminationTimeout);
#if PLATFORM(MAC)
@@ -55,6 +56,8 @@
return false;
if (!decoder->decode(result.supportsAsynchronousPluginInitialization))
return false;
+ if (!decoder->decode(result.minimumLifetime))
+ return false;
if (!decoder->decode(result.terminationTimeout))
return false;
#if PLATFORM(MAC)
Modified: trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h (128204 => 128205)
--- trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h 2012-09-11 17:42:28 UTC (rev 128205)
@@ -50,6 +50,7 @@
String pluginPath;
bool supportsAsynchronousPluginInitialization;
+ double minimumLifetime;
double terminationTimeout;
#if PLATFORM(MAC)
Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp (128204 => 128205)
--- trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp 2012-09-11 17:40:36 UTC (rev 128204)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp 2012-09-11 17:42:28 UTC (rev 128205)
@@ -47,7 +47,8 @@
namespace WebKit {
-static const double shutdownTimeout = 15;
+static const double minimumLifetime = 30 * 60;
+static const double shutdownTimeout = 10 * 60;
PassRefPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginModuleInfo& pluginInfo)
{
@@ -213,6 +214,7 @@
parameters.pluginPath = m_pluginInfo.path;
+ parameters.minimumLifetime = minimumLifetime;
parameters.terminationTimeout = shutdownTimeout;
platformInitializePluginProcess(parameters);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes