Diff
Modified: branches/safari-536.28-branch/Source/WebKit2/ChangeLog (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/ChangeLog 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/ChangeLog 2012-11-27 22:42:14 UTC (rev 135924)
@@ -1,3 +1,44 @@
+2012-11-27 Lucas Forschler <[email protected]>
+
+ Merge r128205 and parts of r127334.
+
+ 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-11-27 Anders Carlsson <[email protected]>
<rdar://problem/11755093>
Modified: branches/safari-536.28-branch/Source/WebKit2/PluginProcess/PluginProcess.cpp (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/PluginProcess/PluginProcess.cpp 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/PluginProcess/PluginProcess.cpp 2012-11-27 22:42:14 UTC (rev 135924)
@@ -65,8 +65,6 @@
namespace WebKit {
-static const double shutdownTimeout = 15.0;
-
PluginProcess& PluginProcess::shared()
{
DEFINE_STATIC_LOCAL(PluginProcess, pluginProcess, ());
@@ -74,7 +72,7 @@
}
PluginProcess::PluginProcess()
- : ChildProcess(shutdownTimeout)
+ : ChildProcess(0)
, m_supportsAsynchronousPluginInitialization(false)
#if PLATFORM(MAC)
, m_compositingRenderServerPort(MACH_PORT_NULL)
@@ -159,6 +157,8 @@
m_pluginPath = parameters.pluginPath;
m_supportsAsynchronousPluginInitialization = parameters.supportsAsynchronousPluginInitialization;
+ setTerminationTimeout(parameters.terminationTimeout);
+
platformInitialize(parameters);
}
Modified: branches/safari-536.28-branch/Source/WebKit2/Shared/ChildProcess.h (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/Shared/ChildProcess.h 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/Shared/ChildProcess.h 2012-11-27 22:42:14 UTC (rev 135924)
@@ -63,6 +63,8 @@
explicit ChildProcess(double terminationTimeout);
~ChildProcess();
+ void setTerminationTimeout(double seconds) { m_terminationTimeout = seconds; }
+
private:
void terminationTimerFired();
Modified: branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.cpp 2012-11-27 22:42:14 UTC (rev 135924)
@@ -41,6 +41,7 @@
{
encoder->encode(pluginPath);
encoder->encode(supportsAsynchronousPluginInitialization);
+ encoder->encode(terminationTimeout);
#if PLATFORM(MAC)
encoder->encode(parentProcessName);
@@ -54,7 +55,8 @@
return false;
if (!decoder->decode(result.supportsAsynchronousPluginInitialization))
return false;
-
+ if (!decoder->decode(result.terminationTimeout))
+ return false;
#if PLATFORM(MAC)
if (!decoder->decode(result.parentProcessName))
return false;
Modified: branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/Shared/Plugins/PluginProcessCreationParameters.h 2012-11-27 22:42:14 UTC (rev 135924)
@@ -50,6 +50,8 @@
String pluginPath;
bool supportsAsynchronousPluginInitialization;
+ double terminationTimeout;
+
#if PLATFORM(MAC)
String parentProcessName;
CoreIPC::MachPort acceleratedCompositingPort;
Modified: branches/safari-536.28-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp (135923 => 135924)
--- branches/safari-536.28-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp 2012-11-27 22:34:45 UTC (rev 135923)
+++ branches/safari-536.28-branch/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp 2012-11-27 22:42:14 UTC (rev 135924)
@@ -47,6 +47,8 @@
namespace WebKit {
+static const double shutdownTimeout = 5 * 60;
+
PassRefPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginModuleInfo& pluginInfo)
{
return adoptRef(new PluginProcessProxy(PluginProcessManager, pluginInfo));
@@ -202,6 +204,8 @@
parameters.pluginPath = m_pluginInfo.path;
+ parameters.terminationTimeout = shutdownTimeout;
+
platformInitializePluginProcess(parameters);
// Initialize the plug-in host process.