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