Diff
Modified: trunk/Source/WebKit/ChangeLog (251598 => 251599)
--- trunk/Source/WebKit/ChangeLog 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/ChangeLog 2019-10-25 19:25:29 UTC (rev 251599)
@@ -1,3 +1,40 @@
+2019-10-25 Chris Dumez <cdu...@apple.com>
+
+ [iOS][WK2] Use sendWithAsyncReply() to simplify the prepareToSuspend logic
+ https://bugs.webkit.org/show_bug.cgi?id=203422
+
+ Reviewed by Alex Christensen.
+
+ Use sendWithAsyncReply() to simplify the prepareToSuspend logic and make it easier to
+ understand.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
+ (WebKit::NetworkProcess::prepareToSuspend):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView _processWillSuspendImminentlyForTesting]):
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
+ (WebKit::NetworkProcessProxy::processReadyToSuspend): Deleted.
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/Network/NetworkProcessProxy.messages.in:
+ * UIProcess/ProcessThrottler.cpp:
+ (WebKit::ProcessThrottler::processReadyToSuspend):
+ (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
+ * UIProcess/ProcessThrottler.h:
+ * UIProcess/ProcessThrottlerClient.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::sendPrepareToSuspend):
+ (WebKit::WebProcessProxy::processReadyToSuspend): Deleted.
+ * UIProcess/WebProcessProxy.h:
+ * UIProcess/WebProcessProxy.messages.in:
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::prepareToSuspend):
+ * WebProcess/WebProcess.h:
+ * WebProcess/WebProcess.messages.in:
+
2019-10-25 youenn fablet <you...@apple.com>
WebProcess should unregister its interest for a SWServerRegistration when all its corresponding ServiceWorkerRegistrations are destroyed
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (251598 => 251599)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2019-10-25 19:25:29 UTC (rev 251599)
@@ -2077,13 +2077,12 @@
void NetworkProcess::processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&& completionHandler)
{
- prepareToSuspend(0, true);
- completionHandler();
+ prepareToSuspend(true, WTFMove(completionHandler));
}
-void NetworkProcess::prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
+void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
{
- RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(%" PRIu64 "), isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent);
+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent: %d", this, isSuspensionImminent);
#if PLATFORM(IOS_FAMILY) && ENABLE(INDEXED_DATABASE)
for (auto& server : m_idbServers.values())
@@ -2096,14 +2095,10 @@
lowMemoryHandler(Critical::Yes);
- RefPtr<CallbackAggregator> callbackAggregator;
- if (requestToSuspendID) {
- callbackAggregator = CallbackAggregator::create([this, requestToSuspendID] {
- RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::notifyProcessReadyToSuspend(%" PRIu64 ") Sending ProcessReadyToSuspend IPC message", this, requestToSuspendID);
- if (parentProcessConnection())
- parentProcessConnection()->send(Messages::NetworkProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
- });
- }
+ RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create([this, completionHandler = WTFMove(completionHandler)]() mutable {
+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend() Process is ready to suspend", this);
+ completionHandler();
+ });
platformPrepareToSuspend([callbackAggregator] { });
platformSyncAllCookies([callbackAggregator] { });
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (251598 => 251599)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -175,7 +175,7 @@
#endif
void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&);
- void prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent);
+ void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
void processDidResume();
void resume();
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (251598 => 251599)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2019-10-25 19:25:29 UTC (rev 251599)
@@ -75,7 +75,7 @@
ProcessDidTransitionToForeground()
ProcessWillSuspendImminentlyForTestingSync() -> () Synchronous
- PrepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
+ PrepareToSuspend(bool isSuspensionImminent) -> () Async
ProcessDidResume()
#if ENABLE(RESOURCE_LOAD_STATISTICS)
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm 2019-10-25 19:25:29 UTC (rev 251599)
@@ -7611,7 +7611,7 @@
- (void)_processWillSuspendImminentlyForTesting
{
if (_page)
- _page->process().sendPrepareToSuspend(0, WebKit::IsSuspensionImminent::Yes);
+ _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::Yes, [] { });
}
- (void)_processDidResumeForTesting
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-10-25 19:25:29 UTC (rev 251599)
@@ -1074,10 +1074,9 @@
sendSync(Messages::NetworkProcess::ProcessWillSuspendImminentlyForTestingSync(), Messages::NetworkProcess::ProcessWillSuspendImminentlyForTestingSync::Reply(), 0);
}
-void NetworkProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent)
+void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
{
- if (canSendMessage())
- send(Messages::NetworkProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0);
+ sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
}
void NetworkProcessProxy::sendProcessDidResume()
@@ -1086,11 +1085,6 @@
send(Messages::NetworkProcess::ProcessDidResume(), 0);
}
-void NetworkProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)
-{
- m_throttler.processReadyToSuspend(requestToSuspendID);
-}
-
void NetworkProcessProxy::didSetAssertionState(AssertionState)
{
}
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -159,8 +159,6 @@
void setShouldDowngradeReferrerForTesting(bool, CompletionHandler<void()>&&);
void setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID, bool, CompletionHandler<void()>&&);
#endif
-
- void processReadyToSuspend(uint64_t requestToSuspendID);
void sendProcessDidTransitionToForeground();
void sendProcessDidTransitionToBackground();
@@ -208,7 +206,7 @@
void clearCallbackStates();
// ProcessThrottlerClient
- void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) final;
+ void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
void didSetAssertionState(AssertionState) final;
// IPC::Connection::Client
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2019-10-25 19:25:29 UTC (rev 251599)
@@ -31,7 +31,6 @@
TestProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebKit::WebPageProxyIdentifier pageID) -> (bool handled) Synchronous
- ProcessReadyToSuspend(uint64_t pendingRequestToSuspendID)
SetIsHoldingLockedFiles(bool isHoldingLockedFiles)
# Diagnostic messages logging
Modified: trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp 2019-10-25 19:25:29 UTC (rev 251599)
@@ -123,13 +123,11 @@
updateAssertionStateNow();
}
-void ProcessThrottler::processReadyToSuspend(uint64_t requestToSuspendID)
+void ProcessThrottler::processReadyToSuspend()
{
- RELEASE_ASSERT(requestToSuspendID);
- if (!m_pendingRequestToSuspendID || *m_pendingRequestToSuspendID != requestToSuspendID)
- return;
+ RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend() Updating process assertion to allow suspension", m_processIdentifier, this);
- RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend(%" PRIu64 ") Updating process assertion to allow suspension", m_processIdentifier, this, requestToSuspendID);
+ RELEASE_ASSERT(m_pendingRequestToSuspendID);
clearPendingRequestToSuspend();
if (m_assertion->state() != AssertionState::Suspended)
@@ -152,7 +150,10 @@
} else {
m_pendingRequestToSuspendID = generatePrepareToSuspendRequestID();
RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::sendPrepareToSuspendIPC() Sending PrepareToSuspend(%" PRIu64 ", isSuspensionImminent: %d) IPC", m_processIdentifier, this, *m_pendingRequestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes);
- m_process.sendPrepareToSuspend(*m_pendingRequestToSuspendID, isSuspensionImminent);
+ m_process.sendPrepareToSuspend(isSuspensionImminent, [this, weakThis = makeWeakPtr(*this), requestToSuspendID = *m_pendingRequestToSuspendID]() mutable {
+ if (weakThis && m_pendingRequestToSuspendID && *m_pendingRequestToSuspendID == requestToSuspendID)
+ processReadyToSuspend();
+ });
}
setAssertionState(isSuspensionImminent == IsSuspensionImminent::Yes ? AssertionState::Suspended : AssertionState::Background);
Modified: trunk/Source/WebKit/UIProcess/ProcessThrottler.h (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/ProcessThrottler.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/ProcessThrottler.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -45,7 +45,7 @@
class ProcessThrottlerClient;
-class ProcessThrottler : private ProcessAssertion::Client {
+class ProcessThrottler : public CanMakeWeakPtr<ProcessThrottler>, private ProcessAssertion::Client {
public:
enum ForegroundActivityCounterType { };
typedef RefCounter<ForegroundActivityCounterType> ForegroundActivityCounter;
@@ -60,7 +60,6 @@
BackgroundActivityToken backgroundActivityToken() const;
void didConnectToProcess(ProcessID);
- void processReadyToSuspend(uint64_t pendingRequestToSuspendID);
bool shouldBeRunnable() const { return m_foregroundCounter.value() || m_backgroundCounter.value(); }
private:
@@ -70,6 +69,7 @@
void setAssertionState(AssertionState);
void prepareToSuspendTimeoutTimerFired();
void sendPrepareToSuspendIPC(IsSuspensionImminent);
+ void processReadyToSuspend();
// ProcessAssertionClient
void uiAssertionWillExpireImminently() override;
Modified: trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -36,7 +36,7 @@
public:
virtual ~ProcessThrottlerClient() { }
- virtual void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) = 0;
+ virtual void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) = 0;
virtual void sendProcessDidResume() = 0;
virtual void didSetAssertionState(AssertionState) = 0;
};
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2019-10-25 19:25:29 UTC (rev 251599)
@@ -1217,10 +1217,9 @@
return UserData::transform(object, Transformer());
}
-void WebProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent)
+void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
{
- if (canSendMessage())
- send(Messages::WebProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0);
+ sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
}
void WebProcessProxy::sendProcessDidResume()
@@ -1229,11 +1228,6 @@
send(Messages::WebProcess::ProcessDidResume(), 0);
}
-void WebProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)
-{
- m_throttler.processReadyToSuspend(requestToSuspendID);
-}
-
void WebProcessProxy::didSetAssertionState(AssertionState state)
{
#if PLATFORM(IOS_FAMILY)
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -223,8 +223,6 @@
void windowServerConnectionStateChanged();
- void processReadyToSuspend(uint64_t requestToSuspendID);
-
void setIsHoldingLockedFiles(bool);
ProcessThrottler& throttler() { return m_throttler; }
@@ -298,9 +296,9 @@
void didStartProvisionalLoadForMainFrame(const URL&);
// ProcessThrottlerClient
- void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) override;
- void sendProcessDidResume() override;
- void didSetAssertionState(AssertionState) override;
+ void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
+ void sendProcessDidResume() final;
+ void didSetAssertionState(AssertionState) final;
#if PLATFORM(COCOA)
enum SandboxExtensionType : uint32_t {
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (251598 => 251599)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2019-10-25 19:25:29 UTC (rev 251599)
@@ -37,7 +37,6 @@
GetPluginProcessConnection(uint64_t pluginProcessToken) -> (IPC::Attachment connectionHandle, bool supportsAsynchronousInitialization) Synchronous
#endif
GetNetworkProcessConnection() -> (struct WebKit::NetworkProcessConnectionInfo connectionInfo) Synchronous
- ProcessReadyToSuspend(uint64_t requestToSuspendID)
SetIsHoldingLockedFiles(bool isHoldingLockedFiles)
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (251598 => 251599)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-10-25 19:25:29 UTC (rev 251599)
@@ -1377,19 +1377,16 @@
}
#endif
-void WebProcess::prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
+void WebProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
{
- RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend(%" PRIu64 ") isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent);
+ RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() isSuspensionImminent: %d", this, isSuspensionImminent);
SetForScope<bool> suspensionScope(m_isSuspending, true);
m_processIsSuspended = true;
#if PLATFORM(COCOA)
if (m_processType == ProcessType::PrewarmedWebContent) {
- if (requestToSuspendID) {
- RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID);
- parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
- }
- return;
+ RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this);
+ return completionHandler();
}
#endif
@@ -1417,16 +1414,14 @@
updateFreezerStatus();
#endif
- markAllLayersVolatile([this, requestToSuspendID](bool success) {
+ markAllLayersVolatile([this, completionHandler = WTFMove(completionHandler)](bool success) mutable {
if (success)
RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Successfuly marked all layers as volatile", this);
else
RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Failed to mark all layers as volatile", this);
- if (requestToSuspendID) {
- RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID);
- parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
- }
+ RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this);
+ completionHandler();
});
}
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (251598 => 251599)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2019-10-25 19:25:29 UTC (rev 251599)
@@ -235,7 +235,7 @@
void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds);
- void prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent);
+ void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
void processDidResume();
void sendPrewarmInformation(const URL&);
Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (251598 => 251599)
--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2019-10-25 19:04:27 UTC (rev 251598)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2019-10-25 19:25:29 UTC (rev 251599)
@@ -93,7 +93,7 @@
EnsureAutomationSessionProxy(String sessionIdentifier)
DestroyAutomationSessionProxy()
- PrepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
+ PrepareToSuspend(bool isSuspensionImminent) -> () Async
ProcessDidResume()
MainThreadPing()