Title: [291182] trunk/Source/WebKit
Revision
291182
Author
cdu...@apple.com
Date
2022-03-11 12:22:03 -0800 (Fri, 11 Mar 2022)

Log Message

Delay responsiveness checks for the Network Process until it has finished initialization
https://bugs.webkit.org/show_bug.cgi?id=237782
<rdar://88226412>

Reviewed by Geoffrey Garen.

Delay responsiveness checks for the Network Process until it has finished initialization.
Network process initialization can be slow but we have evidence that it is not truly
hung since we see network process terminations right as the network process is initiating
the WebProcess connection later on.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::initializeNetworkProcess):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* UIProcess/AuxiliaryProcessProxy.cpp:
(WebKit::AuxiliaryProcessProxy::didFinishLaunching):
(WebKit::AuxiliaryProcessProxy::beginResponsivenessChecks):
(WebKit::AuxiliaryProcessProxy::startResponsivenessTimer):
* UIProcess/AuxiliaryProcessProxy.h:
* UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::didFinishLaunching):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
* UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
(WebKit::WebAuthnProcessProxy::didFinishLaunching):
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didFinishLaunching):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (291181 => 291182)


--- trunk/Source/WebKit/ChangeLog	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/ChangeLog	2022-03-11 20:22:03 UTC (rev 291182)
@@ -1,3 +1,34 @@
+2022-03-11  Chris Dumez  <cdu...@apple.com>
+
+        Delay responsiveness checks for the Network Process until it has finished initialization
+        https://bugs.webkit.org/show_bug.cgi?id=237782
+        <rdar://88226412>
+
+        Reviewed by Geoffrey Garen.
+
+        Delay responsiveness checks for the Network Process until it has finished initialization.
+        Network process initialization can be slow but we have evidence that it is not truly
+        hung since we see network process terminations right as the network process is initiating
+        the WebProcess connection later on.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::initializeNetworkProcess):
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkProcess.messages.in:
+        * UIProcess/AuxiliaryProcessProxy.cpp:
+        (WebKit::AuxiliaryProcessProxy::didFinishLaunching):
+        (WebKit::AuxiliaryProcessProxy::beginResponsivenessChecks):
+        (WebKit::AuxiliaryProcessProxy::startResponsivenessTimer):
+        * UIProcess/AuxiliaryProcessProxy.h:
+        * UIProcess/GPU/GPUProcessProxy.cpp:
+        (WebKit::GPUProcessProxy::didFinishLaunching):
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
+        * UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp:
+        (WebKit::WebAuthnProcessProxy::didFinishLaunching):
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::didFinishLaunching):
+
 2022-03-11  Wenson Hsieh  <wenson_hs...@apple.com>
 
         [iOS] Add support for -[UITextInput removeEmojiAlternatives] on WKContentView

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (291181 => 291182)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -303,8 +303,10 @@
     });
 }
 
-void NetworkProcess::initializeNetworkProcess(NetworkProcessCreationParameters&& parameters)
+void NetworkProcess::initializeNetworkProcess(NetworkProcessCreationParameters&& parameters, CompletionHandler<void()>&& completionHandler)
 {
+    CompletionHandlerCallingScope callCompletionHandler(WTFMove(completionHandler));
+
     applyProcessCreationParameters(parameters.auxiliaryProcessParameters);
 #if HAVE(SEC_KEY_PROXY)
     WTF::setProcessPrivileges({ ProcessPrivilege::CanAccessRawCookies });

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (291181 => 291182)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2022-03-11 20:22:03 UTC (rev 291182)
@@ -409,7 +409,7 @@
 
     // Message Handlers
     bool didReceiveSyncNetworkProcessMessage(IPC::Connection&, IPC::Decoder&, UniqueRef<IPC::Encoder>&);
-    void initializeNetworkProcess(NetworkProcessCreationParameters&&);
+    void initializeNetworkProcess(NetworkProcessCreationParameters&&, CompletionHandler<void()>&&);
     void createNetworkConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(std::optional<IPC::Attachment>&&, WebCore::HTTPCookieAcceptPolicy)>&&);
 
     void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CompletionHandler<void(WebsiteData&&)>&&);

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (291181 => 291182)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2022-03-11 20:22:03 UTC (rev 291182)
@@ -21,7 +21,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 messages -> NetworkProcess LegacyReceiver {
-    InitializeNetworkProcess(struct WebKit::NetworkProcessCreationParameters processCreationParameters)
+    InitializeNetworkProcess(struct WebKit::NetworkProcessCreationParameters processCreationParameters) -> ()
 
     CreateNetworkConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID) -> (std::optional<IPC::Attachment> connectionIdentifier, enum:uint8_t WebCore::HTTPCookieAcceptPolicy cookieAcceptPolicy)
 

Modified: trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -270,11 +270,6 @@
             IPC::addAsyncReplyHandler(*connection(), pendingMessage.asyncReplyInfo->second, WTFMove(pendingMessage.asyncReplyInfo->first));
         m_connection->sendMessage(WTFMove(pendingMessage.encoder), pendingMessage.sendOptions);
     }
-
-    if (m_shouldStartResponsivenessTimerWhenLaunched) {
-        auto useLazyStop = *std::exchange(m_shouldStartResponsivenessTimerWhenLaunched, std::nullopt);
-        startResponsivenessTimer(useLazyStop);
-    }
 }
 
 void AuxiliaryProcessProxy::replyToPendingMessages()
@@ -363,10 +358,18 @@
     responsivenessTimer().stop();
 }
 
+void AuxiliaryProcessProxy::beginResponsivenessChecks()
+{
+    m_didBeginResponsivenessChecks = true;
+    if (m_delayedResponsivenessCheck)
+        startResponsivenessTimer(*std::exchange(m_delayedResponsivenessCheck, std::nullopt));
+}
+
 void AuxiliaryProcessProxy::startResponsivenessTimer(UseLazyStop useLazyStop)
 {
-    if (isLaunching()) {
-        m_shouldStartResponsivenessTimerWhenLaunched = useLazyStop;
+    if (!m_didBeginResponsivenessChecks) {
+        if (!m_delayedResponsivenessCheck)
+            m_delayedResponsivenessCheck = useLazyStop;
         return;
     }
 

Modified: trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h	2022-03-11 20:22:03 UTC (rev 291182)
@@ -165,6 +165,8 @@
 
     virtual bool shouldSendPendingMessage(const PendingMessage&) { return true; }
 
+    void beginResponsivenessChecks();
+
     // ResponsivenessTimer::Client.
     void didBecomeUnresponsive() override;
     void didBecomeResponsive() override { }
@@ -182,8 +184,9 @@
     RefPtr<IPC::Connection> m_connection;
     IPC::MessageReceiverMap m_messageReceiverMap;
     bool m_alwaysRunsAtBackgroundPriority { false };
+    bool m_didBeginResponsivenessChecks { false };
     WebCore::ProcessIdentifier m_processIdentifier { WebCore::ProcessIdentifier::generate() };
-    std::optional<UseLazyStop> m_shouldStartResponsivenessTimerWhenLaunched;
+    std::optional<UseLazyStop> m_delayedResponsivenessCheck;
 };
 
 template<typename T>

Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -493,6 +493,8 @@
     if (auto networkProcess = NetworkProcessProxy::defaultNetworkProcess())
         networkProcess->sendXPCEndpointToProcess(*this);
 #endif
+
+    beginResponsivenessChecks();
 }
 
 void GPUProcessProxy::updateProcessAssertion()

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -230,7 +230,10 @@
 #endif
 
     WebProcessPool::platformInitializeNetworkProcess(parameters);
-    send(Messages::NetworkProcess::InitializeNetworkProcess(parameters), 0);
+    sendWithAsyncReply(Messages::NetworkProcess::InitializeNetworkProcess(parameters), [weakThis = WeakPtr { *this }] {
+        if (weakThis)
+            weakThis->beginResponsivenessChecks();
+    });
 }
 
 static bool anyProcessPoolAlwaysRunsAtBackgroundPriority()

Modified: trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/WebAuthentication/WebAuthnProcessProxy.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -161,6 +161,8 @@
     if (xpc_connection_t connection = this->connection()->xpcConnection())
         m_throttler.didConnectToProcess(xpc_connection_get_pid(connection));
 #endif
+
+    beginResponsivenessChecks();
 }
 
 void WebAuthnProcessProxy::updateProcessAssertion()

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (291181 => 291182)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2022-03-11 19:14:03 UTC (rev 291181)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2022-03-11 20:22:03 UTC (rev 291182)
@@ -1072,6 +1072,8 @@
     enableRemoteInspectorIfNeeded();
 #endif
 #endif
+
+    beginResponsivenessChecks();
 }
 
 WebFrameProxy* WebProcessProxy::webFrame(FrameIdentifier frameID) const
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to