⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 251599 in webkit


Ignore:
Timestamp:
Oct 25, 2019, 12:25:29 PM (7 years ago)
Author:
Chris Dumez
Message:

[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:
Location:
trunk/Source/WebKit
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r251598 r251599  
     12019-10-25  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS][WK2] Use sendWithAsyncReply() to simplify the prepareToSuspend logic
     4        https://bugs.webkit.org/show_bug.cgi?id=203422
     5
     6        Reviewed by Alex Christensen.
     7
     8        Use sendWithAsyncReply() to simplify the prepareToSuspend logic and make it easier to
     9        understand.
     10
     11        * NetworkProcess/NetworkProcess.cpp:
     12        (WebKit::NetworkProcess::processWillSuspendImminentlyForTestingSync):
     13        (WebKit::NetworkProcess::prepareToSuspend):
     14        * NetworkProcess/NetworkProcess.h:
     15        * NetworkProcess/NetworkProcess.messages.in:
     16        * UIProcess/API/Cocoa/WKWebView.mm:
     17        (-[WKWebView _processWillSuspendImminentlyForTesting]):
     18        * UIProcess/Network/NetworkProcessProxy.cpp:
     19        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
     20        (WebKit::NetworkProcessProxy::processReadyToSuspend): Deleted.
     21        * UIProcess/Network/NetworkProcessProxy.h:
     22        * UIProcess/Network/NetworkProcessProxy.messages.in:
     23        * UIProcess/ProcessThrottler.cpp:
     24        (WebKit::ProcessThrottler::processReadyToSuspend):
     25        (WebKit::ProcessThrottler::sendPrepareToSuspendIPC):
     26        * UIProcess/ProcessThrottler.h:
     27        * UIProcess/ProcessThrottlerClient.h:
     28        * UIProcess/WebProcessProxy.cpp:
     29        (WebKit::WebProcessProxy::sendPrepareToSuspend):
     30        (WebKit::WebProcessProxy::processReadyToSuspend): Deleted.
     31        * UIProcess/WebProcessProxy.h:
     32        * UIProcess/WebProcessProxy.messages.in:
     33        * WebProcess/WebProcess.cpp:
     34        (WebKit::WebProcess::prepareToSuspend):
     35        * WebProcess/WebProcess.h:
     36        * WebProcess/WebProcess.messages.in:
     37
    1382019-10-25  youenn fablet  <youenn@apple.com>
    239
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp

    r251577 r251599  
    20782078void NetworkProcess::processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&& completionHandler)
    20792079{
    2080     prepareToSuspend(0, true);
    2081     completionHandler();
    2082 }
    2083 
    2084 void NetworkProcess::prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
    2085 {
    2086     RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(%" PRIu64 "), isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent);
     2080    prepareToSuspend(true, WTFMove(completionHandler));
     2081}
     2082
     2083void NetworkProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
     2084{
     2085    RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend(), isSuspensionImminent: %d", this, isSuspensionImminent);
    20872086
    20882087#if PLATFORM(IOS_FAMILY) && ENABLE(INDEXED_DATABASE)
     
    20972096    lowMemoryHandler(Critical::Yes);
    20982097
    2099     RefPtr<CallbackAggregator> callbackAggregator;
    2100     if (requestToSuspendID) {
    2101         callbackAggregator = CallbackAggregator::create([this, requestToSuspendID] {
    2102             RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::notifyProcessReadyToSuspend(%" PRIu64 ") Sending ProcessReadyToSuspend IPC message", this, requestToSuspendID);
    2103             if (parentProcessConnection())
    2104                 parentProcessConnection()->send(Messages::NetworkProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
    2105         });
    2106     }
     2098    RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create([this, completionHandler = WTFMove(completionHandler)]() mutable {
     2099        RELEASE_LOG(ProcessSuspension, "%p - NetworkProcess::prepareToSuspend() Process is ready to suspend", this);
     2100        completionHandler();
     2101    });
    21072102
    21082103    platformPrepareToSuspend([callbackAggregator] { });
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.h

    r251577 r251599  
    176176
    177177    void processWillSuspendImminentlyForTestingSync(CompletionHandler<void()>&&);
    178     void prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent);
     178    void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
    179179    void processDidResume();
    180180    void resume();
  • trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in

    r251577 r251599  
    7676
    7777    ProcessWillSuspendImminentlyForTestingSync() -> () Synchronous
    78     PrepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
     78    PrepareToSuspend(bool isSuspensionImminent) -> () Async
    7979    ProcessDidResume()
    8080
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r251585 r251599  
    76127612{
    76137613    if (_page)
    7614         _page->process().sendPrepareToSuspend(0, WebKit::IsSuspensionImminent::Yes);
     7614        _page->process().sendPrepareToSuspend(WebKit::IsSuspensionImminent::Yes, [] { });
    76157615}
    76167616
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp

    r251577 r251599  
    10751075}
    10761076   
    1077 void NetworkProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent)
    1078 {
    1079     if (canSendMessage())
    1080         send(Messages::NetworkProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0);
     1077void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
     1078{
     1079    sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
    10811080}
    10821081
     
    10851084    if (canSendMessage())
    10861085        send(Messages::NetworkProcess::ProcessDidResume(), 0);
    1087 }
    1088 
    1089 void NetworkProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)
    1090 {
    1091     m_throttler.processReadyToSuspend(requestToSuspendID);
    10921086}
    10931087
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h

    r251577 r251599  
    160160    void setShouldBlockThirdPartyCookiesForTesting(PAL::SessionID, bool, CompletionHandler<void()>&&);
    161161#endif
    162 
    163     void processReadyToSuspend(uint64_t requestToSuspendID);
    164162   
    165163    void sendProcessDidTransitionToForeground();
     
    209207
    210208    // ProcessThrottlerClient
    211     void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) final;
     209    void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
    212210    void didSetAssertionState(AssertionState) final;
    213211
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in

    r251577 r251599  
    3232    TestProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebKit::WebPageProxyIdentifier pageID) -> (bool handled) Synchronous
    3333
    34     ProcessReadyToSuspend(uint64_t pendingRequestToSuspendID)
    3534    SetIsHoldingLockedFiles(bool isHoldingLockedFiles)
    3635
  • trunk/Source/WebKit/UIProcess/ProcessThrottler.cpp

    r251577 r251599  
    124124}
    125125   
    126 void ProcessThrottler::processReadyToSuspend(uint64_t requestToSuspendID)
     126void ProcessThrottler::processReadyToSuspend()
    127127{
    128     RELEASE_ASSERT(requestToSuspendID);
    129     if (!m_pendingRequestToSuspendID || *m_pendingRequestToSuspendID != requestToSuspendID)
    130         return;
     128    RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend() Updating process assertion to allow suspension", m_processIdentifier, this);
    131129
    132     RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::processReadyToSuspend(%" PRIu64 ") Updating process assertion to allow suspension", m_processIdentifier, this, requestToSuspendID);
     130    RELEASE_ASSERT(m_pendingRequestToSuspendID);
    133131    clearPendingRequestToSuspend();
    134132
     
    153151        m_pendingRequestToSuspendID = generatePrepareToSuspendRequestID();
    154152        RELEASE_LOG(ProcessSuspension, "[PID: %d] %p - ProcessThrottler::sendPrepareToSuspendIPC() Sending PrepareToSuspend(%" PRIu64 ", isSuspensionImminent: %d) IPC", m_processIdentifier, this, *m_pendingRequestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes);
    155         m_process.sendPrepareToSuspend(*m_pendingRequestToSuspendID, isSuspensionImminent);
     153        m_process.sendPrepareToSuspend(isSuspensionImminent, [this, weakThis = makeWeakPtr(*this), requestToSuspendID = *m_pendingRequestToSuspendID]() mutable {
     154            if (weakThis && m_pendingRequestToSuspendID && *m_pendingRequestToSuspendID == requestToSuspendID)
     155                processReadyToSuspend();
     156        });
    156157    }
    157158
  • trunk/Source/WebKit/UIProcess/ProcessThrottler.h

    r251577 r251599  
    4646class ProcessThrottlerClient;
    4747
    48 class ProcessThrottler : private ProcessAssertion::Client {
     48class ProcessThrottler : public CanMakeWeakPtr<ProcessThrottler>, private ProcessAssertion::Client {
    4949public:
    5050    enum ForegroundActivityCounterType { };
     
    6161   
    6262    void didConnectToProcess(ProcessID);
    63     void processReadyToSuspend(uint64_t pendingRequestToSuspendID);
    6463    bool shouldBeRunnable() const { return m_foregroundCounter.value() || m_backgroundCounter.value(); }
    6564
     
    7170    void prepareToSuspendTimeoutTimerFired();
    7271    void sendPrepareToSuspendIPC(IsSuspensionImminent);
     72    void processReadyToSuspend();
    7373
    7474    // ProcessAssertionClient
  • trunk/Source/WebKit/UIProcess/ProcessThrottlerClient.h

    r251577 r251599  
    3737    virtual ~ProcessThrottlerClient() { }
    3838
    39     virtual void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) = 0;
     39    virtual void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) = 0;
    4040    virtual void sendProcessDidResume() = 0;
    4141    virtual void didSetAssertionState(AssertionState) = 0;
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r251589 r251599  
    12181218}
    12191219
    1220 void WebProcessProxy::sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent isSuspensionImminent)
    1221 {
    1222     if (canSendMessage())
    1223         send(Messages::WebProcess::PrepareToSuspend(requestToSuspendID, isSuspensionImminent == IsSuspensionImminent::Yes), 0);
     1220void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
     1221{
     1222    sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
    12241223}
    12251224
     
    12281227    if (canSendMessage())
    12291228        send(Messages::WebProcess::ProcessDidResume(), 0);
    1230 }
    1231 
    1232 void WebProcessProxy::processReadyToSuspend(uint64_t requestToSuspendID)
    1233 {
    1234     m_throttler.processReadyToSuspend(requestToSuspendID);
    12351229}
    12361230
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r251577 r251599  
    224224    void windowServerConnectionStateChanged();
    225225
    226     void processReadyToSuspend(uint64_t requestToSuspendID);
    227 
    228226    void setIsHoldingLockedFiles(bool);
    229227
     
    299297
    300298    // ProcessThrottlerClient
    301     void sendPrepareToSuspend(uint64_t requestToSuspendID, IsSuspensionImminent) override;
    302     void sendProcessDidResume() override;
    303     void didSetAssertionState(AssertionState) override;
     299    void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&&) final;
     300    void sendProcessDidResume() final;
     301    void didSetAssertionState(AssertionState) final;
    304302
    305303#if PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in

    r251577 r251599  
    3838#endif
    3939    GetNetworkProcessConnection() -> (struct WebKit::NetworkProcessConnectionInfo connectionInfo) Synchronous
    40     ProcessReadyToSuspend(uint64_t requestToSuspendID)
    4140
    4241    SetIsHoldingLockedFiles(bool isHoldingLockedFiles)
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r251598 r251599  
    13781378#endif
    13791379
    1380 void WebProcess::prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
    1381 {
    1382     RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend(%" PRIu64 ") isSuspensionImminent: %d", this, requestToSuspendID, isSuspensionImminent);
     1380void WebProcess::prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
     1381{
     1382    RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() isSuspensionImminent: %d", this, isSuspensionImminent);
    13831383    SetForScope<bool> suspensionScope(m_isSuspending, true);
    13841384    m_processIsSuspended = true;
     
    13861386#if PLATFORM(COCOA)
    13871387    if (m_processType == ProcessType::PrewarmedWebContent) {
    1388         if (requestToSuspendID) {
    1389             RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID);
    1390             parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
    1391         }
    1392         return;
     1388        RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this);
     1389        return completionHandler();
    13931390    }
    13941391#endif
     
    14181415#endif
    14191416
    1420     markAllLayersVolatile([this, requestToSuspendID](bool success) {
     1417    markAllLayersVolatile([this, completionHandler = WTFMove(completionHandler)](bool success) mutable {
    14211418        if (success)
    14221419            RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Successfuly marked all layers as volatile", this);
     
    14241421            RELEASE_LOG(ProcessSuspension, "%p - WebProcess::markAllLayersVolatile() Failed to mark all layers as volatile", this);
    14251422
    1426         if (requestToSuspendID) {
    1427             RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Sending ProcessReadyToSuspend(%" PRIu64 ") IPC message", this, requestToSuspendID);
    1428             parentProcessConnection()->send(Messages::WebProcessProxy::ProcessReadyToSuspend(requestToSuspendID), 0);
    1429         }
     1423        RELEASE_LOG(ProcessSuspension, "%p - WebProcess::prepareToSuspend() Process is ready to suspend", this);
     1424        completionHandler();
    14301425    });
    14311426}
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r251598 r251599  
    236236    void setHiddenPageDOMTimerThrottlingIncreaseLimit(int milliseconds);
    237237
    238     void prepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent);
     238    void prepareToSuspend(bool isSuspensionImminent, CompletionHandler<void()>&&);
    239239    void processDidResume();
    240240
  • trunk/Source/WebKit/WebProcess/WebProcess.messages.in

    r251577 r251599  
    9494    DestroyAutomationSessionProxy()
    9595
    96     PrepareToSuspend(uint64_t requestToSuspendID, bool isSuspensionImminent)
     96    PrepareToSuspend(bool isSuspensionImminent) -> () Async
    9797    ProcessDidResume()
    9898
Note: See TracChangeset for help on using the changeset viewer.