Diff
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (294801 => 294802)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -282,7 +282,7 @@
#endif
}
-void GPUProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void GPUProcess::prepareToSuspend(bool isSuspensionImminent, MonotonicTime, CompletionHandler<void()>&& completionHandler)
{
RELEASE_LOG(ProcessSuspension, "%p - GPUProcess::prepareToSuspend(), isSuspensionImminent: %d", this, isSuspensionImminent);
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (294801 => 294802)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -73,7 +73,7 @@
void removeGPUConnectionToWebProcess(GPUConnectionToWebProcess&);
- void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
+ void prepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime, CompletionHandler<void()>&&);
void processDidResume();
void resume();
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (294801 => 294802)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2022-05-25 16:53:05 UTC (rev 294802)
@@ -27,7 +27,7 @@
CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID, IPC::Attachment connectionIdentifier, struct WebKit::GPUProcessConnectionParameters parameters) -> ()
- PrepareToSuspend(bool isSuspensionImminent) -> ()
+ PrepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime) -> ()
ProcessDidResume()
AddSession(PAL::SessionID sessionID, struct WebKit::GPUProcessSessionParameters parameters)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (294801 => 294802)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -2133,7 +2133,7 @@
void NetworkProcess::processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&& completionHandler)
{
- prepareToSuspend(true, WTFMove(completionHandler));
+ prepareToSuspend(true, MonotonicTime::now(), WTFMove(completionHandler));
}
void NetworkProcess::terminateRemoteWorkerContextConnectionWhenPossible(RemoteWorkerType workerType, PAL::SessionID sessionID, const WebCore::RegistrableDomain& registrableDomain, WebCore::ProcessIdentifier processIdentifier)
@@ -2156,9 +2156,11 @@
}
}
-void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime, CompletionHandler<void()>&& completionHandler)
{
- RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent=%d Process is %{public}sin background", this, isSuspensionImminent, m_enterBackgroundTimestamp ? "" : "not ");
+ auto nowTime = MonotonicTime::now();
+ double remainingRunTime = estimatedSuspendTime > nowTime ? (estimatedSuspendTime - nowTime).value() : 0.0;
+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent=%d, remainingRunTime=%fs", this, isSuspensionImminent, remainingRunTime);
m_isSuspended = true;
lowMemoryHandler(Critical::Yes);
@@ -2189,26 +2191,17 @@
void NetworkProcess::applicationDidEnterBackground()
{
- if (!m_enterBackgroundTimestamp)
- m_enterBackgroundTimestamp = MonotonicTime::now();
-
m_downloadManager.applicationDidEnterBackground();
}
void NetworkProcess::applicationWillEnterForeground()
{
- if (m_enterBackgroundTimestamp)
- m_enterBackgroundTimestamp = std::nullopt;
-
m_downloadManager.applicationWillEnterForeground();
}
void NetworkProcess::processDidResume(bool forForegroundActivity)
{
- if (!m_enterBackgroundTimestamp)
- RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::processDidResume() forForegroundActivity=%d", this, forForegroundActivity);
- else
- RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::processDidResume() forForegroundActivity=%d Process has been in background for %f seconds", this, forForegroundActivity, (MonotonicTime::now() - m_enterBackgroundTimestamp.value()).value());
+ RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::processDidResume() forForegroundActivity=%d", this, forForegroundActivity);
m_isSuspended = false;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (294801 => 294802)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -176,7 +176,7 @@
void addStorageSession(PAL::SessionID, bool shouldUseTestingNetworkSession, const Vector<uint8_t>& uiProcessCookieStorageIdentifier, const SandboxExtension::Handle&);
void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&);
- void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
+ void prepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime, CompletionHandler<void()>&&);
void processDidResume(bool forForegroundActivity);
CacheModel cacheModel() const { return m_cacheModel; }
@@ -531,7 +531,6 @@
bool m_privateClickMeasurementEnabled { true };
bool m_ftpEnabled { false };
bool m_isSuspended { false };
- std::optional<MonotonicTime> m_enterBackgroundTimestamp;
};
#if !PLATFORM(COCOA)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (294801 => 294802)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2022-05-25 16:53:05 UTC (rev 294802)
@@ -72,7 +72,7 @@
SetCacheModelSynchronouslyForTesting(enum:uint8_t WebKit::CacheModel cacheModel) -> () Synchronous
ProcessWillSuspendImminentlyForTestingSync() -> () Synchronous
- PrepareToSuspend(bool isSuspensionImminent) -> ()
+ PrepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime) -> ()
ProcessDidResume(bool forForegroundActivity)
PreconnectTo(PAL::SessionID sessionID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier webPageID, URL url, String userAgent, enum:uint8_t WebCore::StoredCredentialsPolicy storedCredentialsPolicy, enum:bool std::optional<WebKit::NavigatingToAppBoundDomain> isNavigatingToAppBoundDomain, enum:bool WebKit::LastNavigationWasAppInitiated lastNavigationWasAppInitiated);
Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm 2022-05-25 16:53:05 UTC (rev 294802)
@@ -199,7 +199,7 @@
completionHandler();
return;
}
- _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::No, [completionHandler = makeBlockPtr(completionHandler)] {
+ _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::No, 0.0, [completionHandler = makeBlockPtr(completionHandler)] {
completionHandler();
});
}
@@ -207,7 +207,7 @@
- (void)_processWillSuspendImminentlyForTesting
{
if (_page)
- _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::Yes, [] { });
+ _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::Yes, 0.0, [] { });
}
- (void)_processDidResumeForTesting
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -545,9 +545,9 @@
send(Messages::GPUProcess::RemoveSession { sessionID }, 0);
}
-void GPUProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void GPUProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&& completionHandler)
{
- sendWithAsyncReply(Messages::GPUProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
+ sendWithAsyncReply(Messages::GPUProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes, MonotonicTime::now() + Seconds(remainingRunTime)), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
}
void GPUProcessProxy::sendProcessDidResume(ResumeReason)
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -126,7 +126,7 @@
// ProcessThrottlerClient
ASCIILiteral clientName() const final { return "GPUProcess"_s; }
- void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
+ void sendPrepareToSuspend(IsSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&&) final;
void sendProcessDidResume(ResumeReason) final;
// ProcessLauncher::Client
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -1374,11 +1374,13 @@
s_suspensionAllowedForTesting = allowed;
}
-void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&& completionHandler)
{
if (!s_suspensionAllowedForTesting)
return completionHandler();
- sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
+
+ auto estimatedSuspendTime = MonotonicTime::now() + Seconds(remainingRunTime);
+ sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes, estimatedSuspendTime), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
}
void NetworkProcessProxy::sendProcessDidResume(ResumeReason reason)
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -270,7 +270,7 @@
void getWindowSceneIdentifierForPaymentPresentation(WebPageProxyIdentifier, CompletionHandler<void(const String&)>&&);
#endif
// ProcessThrottlerClient
- void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
+ void sendPrepareToSuspend(IsSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&&) final;
void updateBundleIdentifier(const String&, CompletionHandler<void()>&&);
void clearBundleIdentifier(CompletionHandler<void()>&&);
Modified: trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -42,6 +42,11 @@
ProcessAssertion::~ProcessAssertion() = default;
+double ProcessAssertion::remainingRunTimeInSeconds(ProcessID)
+{
+ return 0;
+}
+
bool ProcessAssertion::isValid() const
{
return true;
Modified: trunk/Source/WebKit/UIProcess/ProcessAssertion.h (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/ProcessAssertion.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/ProcessAssertion.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -70,6 +70,7 @@
}
return assertion;
}
+ static double remainingRunTimeInSeconds(ProcessID);
virtual ~ProcessAssertion();
void setPrepareForInvalidationHandler(Function<void()>&& handler) { m_prepareForInvalidationHandler = WTFMove(handler); }
Modified: trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -226,15 +226,15 @@
void ProcessThrottler::sendPrepareToSuspendIPC(IsSuspensionImminent isSuspensionImminent)
{
- PROCESSTHROTTLER_RELEASE_LOG("sendPrepareToSuspendIPC: isSuspensionImminent=%d", isSuspensionImminent == IsSuspensionImminent::Yes);
if (m_pendingRequestToSuspendID) {
// Do not send a new PrepareToSuspend IPC for imminent suspension if we've already sent a non-imminent PrepareToSuspend IPC.
RELEASE_ASSERT(isSuspensionImminent == IsSuspensionImminent::Yes);
- PROCESSTHROTTLER_RELEASE_LOG("sendPrepareToSuspendIPC: Not sending PrepareToSuspend() IPC because there is already one in flight (%" PRIu64 ")", *m_pendingRequestToSuspendID);
+ PROCESSTHROTTLER_RELEASE_LOG("sendPrepareToSuspendIPC: Not sending PrepareToSuspend(isSuspensionImminent=%d) IPC because there is already one in flight (%" PRIu64 ")", isSuspensionImminent == IsSuspensionImminent::Yes, *m_pendingRequestToSuspendID);
} else {
m_pendingRequestToSuspendID = generatePrepareToSuspendRequestID();
- PROCESSTHROTTLER_RELEASE_LOG("sendPrepareToSuspendIPC: Sending PrepareToSuspend(%" PRIu64 ", isSuspensionImminent=%d) IPC", *m_pendingRequestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes);
- m_process.sendPrepareToSuspend(isSuspensionImminent, [this, weakThis = WeakPtr { *this }, requestToSuspendID = *m_pendingRequestToSuspendID]() mutable {
+ double remainingRunTime = ProcessAssertion::remainingRunTimeInSeconds(m_processIdentifier);
+ PROCESSTHROTTLER_RELEASE_LOG("sendPrepareToSuspendIPC: Sending PrepareToSuspend(%" PRIu64 ", isSuspensionImminent=%d) IPC, remainingRunTime=%fs", *m_pendingRequestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes, remainingRunTime);
+ m_process.sendPrepareToSuspend(isSuspensionImminent, remainingRunTime, [this, weakThis = WeakPtr { *this }, requestToSuspendID = *m_pendingRequestToSuspendID]() mutable {
if (weakThis && m_pendingRequestToSuspendID && *m_pendingRequestToSuspendID == requestToSuspendID)
processReadyToSuspend();
});
Modified: trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -36,7 +36,7 @@
public:
virtual ~ProcessThrottlerClient() { }
- virtual void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) = 0;
+ virtual void sendPrepareToSuspend(IsSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&&) = 0;
enum ResumeReason : bool { ForegroundActivity, BackgroundActivity };
virtual void sendProcessDidResume(ResumeReason) = 0;
virtual void didSetAssertionType(ProcessAssertionType) { };
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -1443,10 +1443,10 @@
return UserData::transform(object, Transformer());
}
-void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&& completionHandler)
{
WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "sendPrepareToSuspend: isSuspensionImminent=%d", isSuspensionImminent == IsSuspensionImminent::Yes);
- sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
+ sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes, MonotonicTime::now() + Seconds(remainingRunTime)), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
}
void WebProcessProxy::sendProcessDidResume(ResumeReason)
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -327,7 +327,7 @@
void didStartProvisionalLoadForMainFrame(const URL&);
// ProcessThrottlerClient
- void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
+ void sendPrepareToSuspend(IsSuspensionImminent, double remainingRunTime, CompletionHandler<void()>&&) final;
void sendProcessDidResume(ResumeReason) final;
void didSetAssertionType(ProcessAssertionType) final;
ASCIILiteral clientName() const final { return "WebProcess"_s; }
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -1590,7 +1590,7 @@
void WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)
{
- networkProcess().sendPrepareToSuspend(IsSuspensionImminent::No, WTFMove(completionHandler));
+ networkProcess().sendPrepareToSuspend(IsSuspensionImminent::No, 0.0, WTFMove(completionHandler));
}
void WebsiteDataStore::sendNetworkProcessWillSuspendImminentlyForTesting()
Modified: trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm (294801 => 294802)
--- trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm 2022-05-25 16:53:05 UTC (rev 294802)
@@ -367,6 +367,23 @@
};
}
+double ProcessAssertion::remainingRunTimeInSeconds(ProcessID pid)
+{
+ RBSProcessIdentifier *processIdentifier = [RBSProcessIdentifier identifierWithPid:pid];
+ if (!processIdentifier) {
+ RELEASE_LOG_ERROR(ProcessSuspension, "ProcessAssertion::remainingRunTimeInSeconds failed to get identifier for process with PID=%d", pid);
+ return 0;
+ }
+
+ RBSProcessHandle *processHandle = [RBSProcessHandle handleForIdentifier:processIdentifier error:nil];
+ if (!processHandle) {
+ RELEASE_LOG_ERROR(ProcessSuspension, "ProcessAssertion::remainingRunTimeInSeconds failed to get handle for process with PID=%d", pid);
+ return 0;
+ }
+
+ return processHandle.activeLimitations.runTime;
+}
+
void ProcessAssertion::acquireAsync(CompletionHandler<void()>&& completionHandler)
{
ASSERT(isMainRunLoop());
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (294801 => 294802)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2022-05-25 16:53:05 UTC (rev 294802)
@@ -1473,9 +1473,11 @@
}
}
-void WebProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
+void WebProcess::prepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime, CompletionHandler<void()>&& completionHandler)
{
- WEBPROCESS_RELEASE_LOG(ProcessSuspension, "prepareToSuspend: isSuspensionImminent=%d", isSuspensionImminent);
+ auto nowTime = MonotonicTime::now();
+ double remainingRunTime = nowTime > estimatedSuspendTime ? (nowTime - estimatedSuspendTime).value() : 0.0;
+ WEBPROCESS_RELEASE_LOG(ProcessSuspension, "prepareToSuspend: isSuspensionImminent=%d, remainingRunTime=%fs", isSuspensionImminent, remainingRunTime);
SetForScope suspensionScope(m_isSuspending, true);
m_processIsSuspended = true;
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (294801 => 294802)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2022-05-25 16:53:05 UTC (rev 294802)
@@ -291,7 +291,7 @@
void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds);
- void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
+ void prepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime, CompletionHandler<void()>&&);
void processDidResume();
void sendPrewarmInformation(const URL&);
Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (294801 => 294802)
--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2022-05-25 16:47:58 UTC (rev 294801)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2022-05-25 16:53:05 UTC (rev 294802)
@@ -87,7 +87,7 @@
EnsureAutomationSessionProxy(String sessionIdentifier)
DestroyAutomationSessionProxy()
- PrepareToSuspend(bool isSuspensionImminent) -> ()
+ PrepareToSuspend(bool isSuspensionImminent, MonotonicTime estimatedSuspendTime) -> ()
ProcessDidResume()
BackgroundResponsivenessPing()