Title: [255662] trunk/Source/WebKit
Revision
255662
Author
cdu...@apple.com
Date
2020-02-03 21:46:57 -0800 (Mon, 03 Feb 2020)

Log Message

Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization
https://bugs.webkit.org/show_bug.cgi?id=207144

Reviewed by Brady Eidson.

Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization. Instead, make the
WebProcess::InitializeWebProcess IPC async with a reply and take a process assertion on behalf of the WebContent
process until we get a response back.

This avoids sending an extra WebProcess::MainThreadPing IPC to the WebProcess for no reason (since we're already
sending the WebProcess::InitializeWebProcess IPC) and this is also more reliable since the ResponsivenessTimer can
actually time out and cause the process to get suspended during initialization still.

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::initializeNewWebProcess):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::initializeWebProcess):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (255661 => 255662)


--- trunk/Source/WebKit/ChangeLog	2020-02-04 05:37:30 UTC (rev 255661)
+++ trunk/Source/WebKit/ChangeLog	2020-02-04 05:46:57 UTC (rev 255662)
@@ -1,3 +1,25 @@
+2020-02-03  Chris Dumez  <cdu...@apple.com>
+
+        Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization
+        https://bugs.webkit.org/show_bug.cgi?id=207144
+
+        Reviewed by Brady Eidson.
+
+        Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization. Instead, make the
+        WebProcess::InitializeWebProcess IPC async with a reply and take a process assertion on behalf of the WebContent
+        process until we get a response back.
+
+        This avoids sending an extra WebProcess::MainThreadPing IPC to the WebProcess for no reason (since we're already
+        sending the WebProcess::InitializeWebProcess IPC) and this is also more reliable since the ResponsivenessTimer can
+        actually time out and cause the process to get suspended during initialization still.
+
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::initializeNewWebProcess):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::initializeWebProcess):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+
 2020-02-03  Jiewen Tan  <jiewen_...@apple.com>
 
         Pass a hint from the extension to decidePolicyForSOAuthorizationLoadWithCurrentPolicy

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (255661 => 255662)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-02-04 05:37:30 UTC (rev 255661)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-02-04 05:46:57 UTC (rev 255662)
@@ -963,12 +963,6 @@
 void WebProcessPool::initializeNewWebProcess(WebProcessProxy& process, WebsiteDataStore* websiteDataStore, WebProcessProxy::IsPrewarmed isPrewarmed)
 {
     auto initializationActivity = process.throttler().backgroundActivity("WebProcess initialization"_s);
-    auto scopeExit = makeScopeExit([&process, initializationActivity = WTFMove(initializationActivity)]() mutable {
-        // Round-trip to the Web Content process before releasing the
-        // initialization activity, so that we're sure that all
-        // messages sent from this function have been handled.
-        process.isResponsive([initializationActivity = WTFMove(initializationActivity)] (bool) { });
-    });
 
     ensureNetworkProcess();
 
@@ -1053,7 +1047,7 @@
     if (websiteDataStore)
         parameters.websiteDataStoreParameters = webProcessDataStoreParameters(process, *websiteDataStore);
 
-    process.send(Messages::WebProcess::InitializeWebProcess(parameters), 0);
+    process.sendWithAsyncReply(Messages::WebProcess::InitializeWebProcess(parameters), [initializationActivity = WTFMove(initializationActivity)] { });
 
 #if PLATFORM(COCOA)
     process.send(Messages::WebProcess::SetQOS(webProcessLatencyQOS(), webProcessThroughputQOS()), 0);

Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (255661 => 255662)


--- trunk/Source/WebKit/WebProcess/WebProcess.cpp	2020-02-04 05:37:30 UTC (rev 255661)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp	2020-02-04 05:46:57 UTC (rev 255662)
@@ -293,7 +293,7 @@
 #endif
 }
 
-void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters)
+void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters, CompletionHandler<void()>&& completionHandler)
 {    
     TraceScope traceScope(InitializeWebProcessStart, InitializeWebProcessEnd);
 
@@ -458,6 +458,7 @@
 #endif
 
     RELEASE_LOG_IF_ALLOWED(Process, "initializeWebProcess: Presenting process = %d", WebCore::presentingApplicationPID());
+    completionHandler();
 }
 
 void WebProcess::setWebsiteDataStoreParameters(WebProcessDataStoreParameters&& parameters)

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (255661 => 255662)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2020-02-04 05:37:30 UTC (rev 255661)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2020-02-04 05:46:57 UTC (rev 255662)
@@ -327,7 +327,7 @@
     WebProcess();
     ~WebProcess();
 
-    void initializeWebProcess(WebProcessCreationParameters&&);
+    void initializeWebProcess(WebProcessCreationParameters&&, CompletionHandler<void()>&&);
     void platformInitializeWebProcess(WebProcessCreationParameters&);
     void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&);
     void platformSetWebsiteDataStoreParameters(WebProcessDataStoreParameters&&);

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (255661 => 255662)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-02-04 05:37:30 UTC (rev 255661)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2020-02-04 05:46:57 UTC (rev 255662)
@@ -21,7 +21,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 messages -> WebProcess LegacyReceiver NotRefCounted {
-    InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters)
+    InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters) -> () Async
     SetWebsiteDataStoreParameters(struct WebKit::WebProcessDataStoreParameters parameters)
 
     # Create a new page.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to