Title: [294802] trunk/Source/WebKit
Revision
294802
Author
[email protected]
Date
2022-05-25 09:53:05 -0700 (Wed, 25 May 2022)

Log Message

Add remainingRunningTime info to logging of PrepareToSuspend message
https://bugs.webkit.org/show_bug.cgi?id=240879

Reviewed by Chris Dumez.

Replace background timing info with remaining run time info, so we have a better idea of when the message is sent and
when it is processed. We will know if the message is handled after process resumes (since process can be suspended
before it handles the message).

* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::prepareToSuspend):
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
(WebKit::NetworkProcess::prepareToSuspend):
(WebKit::NetworkProcess::applicationDidEnterBackground):
(WebKit::NetworkProcess::applicationWillEnterForeground):
(WebKit::NetworkProcess::processDidResume):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewTesting.mm:
(-[WKWebView _processWillSuspendForTesting:]):
(-[WKWebView _processWillSuspendImminentlyForTesting]):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::sendPrepareToSuspend):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::sendPrepareToSuspend):
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.h:
* Source/WebKit/UIProcess/ProcessAssertion.cpp:
(WebKit::ProcessAssertion::remainingRunTimeInSeconds):
* Source/WebKit/UIProcess/ProcessAssertion.h:
* Source/WebKit/UIProcess/ProcessThrottler.cpp:
(WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
* Source/WebKit/UIProcess/ProcessThrottlerClient.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::sendPrepareToSuspend):
* Source/WebKit/UIProcess/WebProcessProxy.h:
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting):
* Source/WebKit/UIProcess/ios/ProcessAssertionIOS.mm:
(WebKit::ProcessAssertion::remainingRunTimeInSeconds):
* Source/WebKit/WebProcess/WebProcess.cpp:
(WebKit::WebProcess::prepareToSuspend):
* Source/WebKit/WebProcess/WebProcess.h:
* Source/WebKit/WebProcess/WebProcess.messages.in:

Canonical link: https://commits.webkit.org/250958@main

Modified Paths

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()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to