Changeset 261288 in webkit


Ignore:
Timestamp:
May 7, 2020 8:01:31 AM (4 years ago)
Author:
Chris Dumez
Message:

[iOS] AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension while processing the IPC
https://bugs.webkit.org/show_bug.cgi?id=209928

Reviewed by Youenn Fablet.

AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension
on iOS while processing the IPC. If the process is suspended either before or during
the IPC, this could result in hangs. This is a speculative fix for the flaky timeouts
we see on many tests on iOS only. We know that missing activities with
sendWithAsyncReply has caused test timeouts in the past (Bug 211421).

  • UIProcess/AuxiliaryProcessProxy.cpp:

(WebKit::AuxiliaryProcessProxy::sendMessage):

  • UIProcess/AuxiliaryProcessProxy.h:

(WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):

  • UIProcess/GPU/GPUProcessProxy.cpp:

(WebKit::GPUProcessProxy::getGPUProcessConnection):

  • UIProcess/GPU/GPUProcessProxy.h:
  • UIProcess/Network/NetworkProcessProxy.cpp:

(WebKit::NetworkProcessProxy::getNetworkProcessConnection):
(WebKit::NetworkProcessProxy::setUseITPDatabase):
(WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
(WebKit::NetworkProcessProxy::resetParametersToDefaultValues):
(WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
(WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting):
(WebKit::NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics):
(WebKit::NetworkProcessProxy::setShouldDowngradeReferrerForTesting):
(WebKit::NetworkProcessProxy::setThirdPartyCookieBlockingMode):
(WebKit::NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting):
(WebKit::NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting):
(WebKit::NetworkProcessProxy::sendPrepareToSuspend):

  • UIProcess/Network/NetworkProcessProxy.h:
  • UIProcess/Plugins/PluginProcessProxy.cpp:

(WebKit::PluginProcessProxy::PluginProcessProxy):

  • UIProcess/Plugins/PluginProcessProxy.h:
  • UIProcess/ProcessThrottler.h:

(WebKit::ProcessThrottler::Activity::Activity):
(WebKit::ProcessThrottler::Activity::isQuietActivity const):
(WebKit::ProcessThrottler::Activity::invalidate):

  • UIProcess/UserMediaPermissionRequestManagerProxy.cpp:

(WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):

  • UIProcess/WebBackForwardCacheEntry.cpp:

(WebKit::WebBackForwardCacheEntry::~WebBackForwardCacheEntry):

  • UIProcess/WebCookieManagerProxy.cpp:

(WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
(WebKit::WebCookieManagerProxy::deleteCookie):
(WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
(WebKit::WebCookieManagerProxy::setCookies):
(WebKit::WebCookieManagerProxy::getAllCookies):
(WebKit::WebCookieManagerProxy::getCookies):
(WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
(WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::getProcessDisplayName):

  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::setThirdPartyCookieBlockingMode):
(WebKit::WebProcessProxy::fetchWebsiteData):
(WebKit::WebProcessProxy::deleteWebsiteData):
(WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
(WebKit::WebProcessProxy::sendPrepareToSuspend):
(WebKit::WebProcessProxy::activePagesDomainsForTesting):
(WebKit::WebProcessProxy::establishServiceWorkerContext):

  • UIProcess/WebProcessProxy.h:
  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::WebPageProxy::insertTextPlaceholder):
(WebKit::WebPageProxy::removeTextPlaceholder):
(WebKit::WebPageProxy::requestAutocorrectionData):
(WebKit::WebPageProxy::requestEvasionRectsAboveSelection):
(WebKit::WebPageProxy::updateSelectionWithDelta):
(WebKit::WebPageProxy::requestDocumentEditingContext):
(WebKit::WebPageProxy::insertDroppedImagePlaceholders):

Location:
trunk/Source/WebKit
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r261284 r261288  
     12020-05-07  Chris Dumez  <cdumez@apple.com>
     2
     3        [iOS] AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension while processing the IPC
     4        https://bugs.webkit.org/show_bug.cgi?id=209928
     5
     6        Reviewed by Youenn Fablet.
     7
     8        AuxiliaryProcessProxy::sendWithAsyncReply() should prevent auxiliary process suspension
     9        on iOS while processing the IPC. If the process is suspended either before or during
     10        the IPC, this could result in hangs. This is a speculative fix for the flaky timeouts
     11        we see on many tests on iOS only. We know that missing activities with
     12        sendWithAsyncReply has caused test timeouts in the past (Bug 211421).
     13
     14        * UIProcess/AuxiliaryProcessProxy.cpp:
     15        (WebKit::AuxiliaryProcessProxy::sendMessage):
     16        * UIProcess/AuxiliaryProcessProxy.h:
     17        (WebKit::AuxiliaryProcessProxy::sendWithAsyncReply):
     18        * UIProcess/GPU/GPUProcessProxy.cpp:
     19        (WebKit::GPUProcessProxy::getGPUProcessConnection):
     20        * UIProcess/GPU/GPUProcessProxy.h:
     21        * UIProcess/Network/NetworkProcessProxy.cpp:
     22        (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
     23        (WebKit::NetworkProcessProxy::setUseITPDatabase):
     24        (WebKit::NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources):
     25        (WebKit::NetworkProcessProxy::resetParametersToDefaultValues):
     26        (WebKit::NetworkProcessProxy::scheduleClearInMemoryAndPersistent):
     27        (WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting):
     28        (WebKit::NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics):
     29        (WebKit::NetworkProcessProxy::setShouldDowngradeReferrerForTesting):
     30        (WebKit::NetworkProcessProxy::setThirdPartyCookieBlockingMode):
     31        (WebKit::NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting):
     32        (WebKit::NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting):
     33        (WebKit::NetworkProcessProxy::sendPrepareToSuspend):
     34        * UIProcess/Network/NetworkProcessProxy.h:
     35        * UIProcess/Plugins/PluginProcessProxy.cpp:
     36        (WebKit::PluginProcessProxy::PluginProcessProxy):
     37        * UIProcess/Plugins/PluginProcessProxy.h:
     38        * UIProcess/ProcessThrottler.h:
     39        (WebKit::ProcessThrottler::Activity::Activity):
     40        (WebKit::ProcessThrottler::Activity::isQuietActivity const):
     41        (WebKit::ProcessThrottler::Activity::invalidate):
     42        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
     43        (WebKit::UserMediaPermissionRequestManagerProxy::finishGrantingRequest):
     44        * UIProcess/WebBackForwardCacheEntry.cpp:
     45        (WebKit::WebBackForwardCacheEntry::~WebBackForwardCacheEntry):
     46        * UIProcess/WebCookieManagerProxy.cpp:
     47        (WebKit::WebCookieManagerProxy::getHostnamesWithCookies):
     48        (WebKit::WebCookieManagerProxy::deleteCookie):
     49        (WebKit::WebCookieManagerProxy::deleteAllCookiesModifiedSince):
     50        (WebKit::WebCookieManagerProxy::setCookies):
     51        (WebKit::WebCookieManagerProxy::getAllCookies):
     52        (WebKit::WebCookieManagerProxy::getCookies):
     53        (WebKit::WebCookieManagerProxy::setHTTPCookieAcceptPolicy):
     54        (WebKit::WebCookieManagerProxy::getHTTPCookieAcceptPolicy):
     55        * UIProcess/WebPageProxy.cpp:
     56        (WebKit::WebPageProxy::getProcessDisplayName):
     57        * UIProcess/WebProcessProxy.cpp:
     58        (WebKit::WebProcessProxy::setThirdPartyCookieBlockingMode):
     59        (WebKit::WebProcessProxy::fetchWebsiteData):
     60        (WebKit::WebProcessProxy::deleteWebsiteData):
     61        (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
     62        (WebKit::WebProcessProxy::sendPrepareToSuspend):
     63        (WebKit::WebProcessProxy::activePagesDomainsForTesting):
     64        (WebKit::WebProcessProxy::establishServiceWorkerContext):
     65        * UIProcess/WebProcessProxy.h:
     66        * UIProcess/ios/WebPageProxyIOS.mm:
     67        (WebKit::WebPageProxy::insertTextPlaceholder):
     68        (WebKit::WebPageProxy::removeTextPlaceholder):
     69        (WebKit::WebPageProxy::requestAutocorrectionData):
     70        (WebKit::WebPageProxy::requestEvasionRectsAboveSelection):
     71        (WebKit::WebPageProxy::updateSelectionWithDelta):
     72        (WebKit::WebPageProxy::requestDocumentEditingContext):
     73        (WebKit::WebPageProxy::insertDroppedImagePlaceholders):
     74
    1752020-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>
    276
  • trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.cpp

    r261254 r261288  
    151151}
    152152
    153 bool AuxiliaryProcessProxy::sendMessage(std::unique_ptr<IPC::Encoder> encoder, OptionSet<IPC::SendOption> sendOptions, Optional<std::pair<CompletionHandler<void(IPC::Decoder*)>, uint64_t>>&& asyncReplyInfo)
    154 {
     153bool AuxiliaryProcessProxy::sendMessage(std::unique_ptr<IPC::Encoder> encoder, OptionSet<IPC::SendOption> sendOptions, Optional<std::pair<CompletionHandler<void(IPC::Decoder*)>, uint64_t>>&& asyncReplyInfo, ShouldStartProcessThrottlerActivity shouldStartProcessThrottlerActivity)
     154{
     155    if (asyncReplyInfo && canSendMessage() && shouldStartProcessThrottlerActivity == ShouldStartProcessThrottlerActivity::Yes) {
     156        auto completionHandler = std::exchange(asyncReplyInfo->first, nullptr);
     157        asyncReplyInfo->first = [activity = throttler().backgroundActivity(ASCIILiteral::null()), completionHandler = WTFMove(completionHandler)](IPC::Decoder* decoder) mutable {
     158            completionHandler(decoder);
     159        };
     160    }
     161
    155162    switch (state()) {
    156163    case State::Launching:
  • trunk/Source/WebKit/UIProcess/AuxiliaryProcessProxy.h

    r261254 r261288  
    3737namespace WebKit {
    3838
     39class ProcessThrottler;
     40
    3941class AuxiliaryProcessProxy : ProcessLauncher::Client, public IPC::Connection::Client {
    4042    WTF_MAKE_NONCOPYABLE(AuxiliaryProcessProxy);
     
    4951    void terminate();
    5052
     53    virtual ProcessThrottler& throttler() = 0;
     54
    5155    template<typename T> bool send(T&& message, uint64_t destinationID, OptionSet<IPC::SendOption> sendOptions = { });
    5256    template<typename T> bool sendSync(T&& message, typename T::Reply&&, uint64_t destinationID, Seconds timeout = 1_s, OptionSet<IPC::SendSyncOption> sendSyncOptions = { });
    53     template<typename T, typename C> void sendWithAsyncReply(T&&, C&&, uint64_t destinationID = 0, OptionSet<IPC::SendOption> = { });
     57
     58    enum class ShouldStartProcessThrottlerActivity : bool { No, Yes };
     59    template<typename T, typename C> void sendWithAsyncReply(T&&, C&&, uint64_t destinationID = 0, OptionSet<IPC::SendOption> = { }, ShouldStartProcessThrottlerActivity = ShouldStartProcessThrottlerActivity::Yes);
    5460   
    5561    template<typename T, typename U>
     
    105111
    106112    bool canSendMessage() const { return state() != State::Terminated;}
    107     bool sendMessage(std::unique_ptr<IPC::Encoder>, OptionSet<IPC::SendOption>, Optional<std::pair<CompletionHandler<void(IPC::Decoder*)>, uint64_t>>&& asyncReplyInfo = WTF::nullopt);
     113    bool sendMessage(std::unique_ptr<IPC::Encoder>, OptionSet<IPC::SendOption>, Optional<std::pair<CompletionHandler<void(IPC::Decoder*)>, uint64_t>>&& asyncReplyInfo = WTF::nullopt, ShouldStartProcessThrottlerActivity = ShouldStartProcessThrottlerActivity::Yes);
    108114
    109115    void shutDownProcess();
     
    171177
    172178template<typename T, typename C>
    173 void AuxiliaryProcessProxy::sendWithAsyncReply(T&& message, C&& completionHandler, uint64_t destinationID, OptionSet<IPC::SendOption> sendOptions)
     179void AuxiliaryProcessProxy::sendWithAsyncReply(T&& message, C&& completionHandler, uint64_t destinationID, OptionSet<IPC::SendOption> sendOptions, ShouldStartProcessThrottlerActivity shouldStartProcessThrottlerActivity)
    174180{
    175181    COMPILE_ASSERT(!T::isSync, AsyncMessageExpected);
     
    184190        else
    185191            T::cancelReply(WTFMove(completionHandler));
    186     }, listenerID }});
     192    }, listenerID }}, shouldStartProcessThrottlerActivity);
    187193}
    188194   
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r261278 r261288  
    184184
    185185    RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this);
    186     sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply), activity = throttler().backgroundActivity("GPUProcessProxy::getGPUProcessConnection"_s)](auto&& connectionIdentifier) mutable {
     186    sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& connectionIdentifier) mutable {
    187187        if (!weakThis) {
    188188            RELEASE_LOG_ERROR(Process, "GPUProcessProxy::getGPUProcessConnection: GPUProcessProxy deallocated during connection establishment");
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h

    r261254 r261288  
    5858    void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
    5959
    60     ProcessThrottler& throttler() { return m_throttler; }
     60    ProcessThrottler& throttler() final { return m_throttler; }
    6161    void updateProcessAssertion();
    6262
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp

    r261278 r261288  
    129129{
    130130    RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because a web process is requesting a connection", this);
    131     sendWithAsyncReply(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply), activity = throttler().backgroundActivity("NetworkProcessProxy::getNetworkProcessConnection"_s)](auto&& connectionIdentifier, auto cookieAcceptPolicy) mutable {
     131    sendWithAsyncReply(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& connectionIdentifier, auto cookieAcceptPolicy) mutable {
    132132        if (!weakThis) {
    133133            RELEASE_LOG_ERROR(Process, "NetworkProcessProxy::getNetworkProcessConnection: NetworkProcessProxy deallocated during connection establishment");
     
    851851void NetworkProcessProxy::setUseITPDatabase(PAL::SessionID sessionID, bool value, CompletionHandler<void()>&& completionHandler)
    852852{
    853     sendWithAsyncReply(Messages::NetworkProcess::SetUseITPDatabase(sessionID, value), [activity = throttler().backgroundActivity("NetworkProcessProxy::setUseITPDatabase"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     853    sendWithAsyncReply(Messages::NetworkProcess::SetUseITPDatabase(sessionID, value), [completionHandler = WTFMove(completionHandler)]() mutable {
    854854        completionHandler();
    855855    });
     
    984984    }
    985985   
    986     sendWithAsyncReply(Messages::NetworkProcess::ResetCacheMaxAgeCapForPrevalentResources(sessionID), [activity = throttler().backgroundActivity("NetworkProcessProxy::resetCacheMaxAgeCapForPrevalentResources"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     986    sendWithAsyncReply(Messages::NetworkProcess::ResetCacheMaxAgeCapForPrevalentResources(sessionID), [completionHandler = WTFMove(completionHandler)]() mutable {
    987987        completionHandler();
    988988    });
     
    996996    }
    997997   
    998     sendWithAsyncReply(Messages::NetworkProcess::ResetParametersToDefaultValues(sessionID), [activity = throttler().backgroundActivity("NetworkProcessProxy::resetParametersToDefaultValues"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     998    sendWithAsyncReply(Messages::NetworkProcess::ResetParametersToDefaultValues(sessionID), [completionHandler = WTFMove(completionHandler)]() mutable {
    999999        completionHandler();
    10001000    });
     
    10181018    }
    10191019
    1020     sendWithAsyncReply(Messages::NetworkProcess::ScheduleClearInMemoryAndPersistent(sessionID, { }, shouldGrandfather), [activity = throttler().backgroundActivity("NetworkProcessProxy::scheduleClearInMemoryAndPersistent"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1020    sendWithAsyncReply(Messages::NetworkProcess::ScheduleClearInMemoryAndPersistent(sessionID, { }, shouldGrandfather), [completionHandler = WTFMove(completionHandler)]() mutable {
    10211021        completionHandler();
    10221022    });
     
    10981098    }
    10991099   
    1100     sendWithAsyncReply(Messages::NetworkProcess::ResetCrossSiteLoadsWithLinkDecorationForTesting(sessionID), [activity = throttler().backgroundActivity("NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1100    sendWithAsyncReply(Messages::NetworkProcess::ResetCrossSiteLoadsWithLinkDecorationForTesting(sessionID), [completionHandler = WTFMove(completionHandler)]() mutable {
    11011101        completionHandler();
    11021102    });
     
    11401140void NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics(PAL::SessionID sessionID, const HashSet<RegistrableDomain>& appBoundDomains, CompletionHandler<void()>&& completionHandler)
    11411141{
    1142     sendWithAsyncReply(Messages::NetworkProcess::SetAppBoundDomainsForResourceLoadStatistics(sessionID, appBoundDomains), [activity = throttler().backgroundActivity("NetworkProcessProxy::setAppBoundDomainsForResourceLoadStatistics"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1142    sendWithAsyncReply(Messages::NetworkProcess::SetAppBoundDomainsForResourceLoadStatistics(sessionID, appBoundDomains), [completionHandler = WTFMove(completionHandler)]() mutable {
    11431143        completionHandler();
    11441144    });
     
    11521152    }
    11531153   
    1154     sendWithAsyncReply(Messages::NetworkProcess::SetShouldDowngradeReferrerForTesting(enabled), [activity = throttler().backgroundActivity("NetworkProcessProxy::setShouldDowngradeReferrerForTesting"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1154    sendWithAsyncReply(Messages::NetworkProcess::SetShouldDowngradeReferrerForTesting(enabled), [completionHandler = WTFMove(completionHandler)]() mutable {
    11551155        completionHandler();
    11561156    });
     
    11591159void NetworkProcessProxy::setThirdPartyCookieBlockingMode(PAL::SessionID sessionID, ThirdPartyCookieBlockingMode blockingMode, CompletionHandler<void()>&& completionHandler)
    11601160{
    1161     sendWithAsyncReply(Messages::NetworkProcess::SetThirdPartyCookieBlockingMode(sessionID, blockingMode), [activity = throttler().backgroundActivity("NetworkProcessProxy::setThirdPartyCookieBlockingMode"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1161    sendWithAsyncReply(Messages::NetworkProcess::SetThirdPartyCookieBlockingMode(sessionID, blockingMode), [completionHandler = WTFMove(completionHandler)]() mutable {
    11621162        completionHandler();
    11631163    });
     
    11661166void NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting(PAL::SessionID sessionID, WebCore::SameSiteStrictEnforcementEnabled enabled, CompletionHandler<void()>&& completionHandler)
    11671167{
    1168     sendWithAsyncReply(Messages::NetworkProcess::SetShouldEnbleSameSiteStrictEnforcementForTesting(sessionID, enabled), [activity = throttler().backgroundActivity("NetworkProcessProxy::setShouldEnbleSameSiteStrictEnforcementForTesting"_s), completionHandler = WTFMove(completionHandler)]() mutable {
    1169         completionHandler();
    1170     });
     1168    sendWithAsyncReply(Messages::NetworkProcess::SetShouldEnbleSameSiteStrictEnforcementForTesting(sessionID, enabled), WTFMove(completionHandler));
    11711169}
    11721170
     
    11781176    }
    11791177
    1180     sendWithAsyncReply(Messages::NetworkProcess::SetFirstPartyWebsiteDataRemovalModeForTesting(sessionID, mode), [activity = throttler().backgroundActivity("NetworkProcessProxy::setFirstPartyWebsiteDataRemovalModeForTesting"_s), completionHandler = WTFMove(completionHandler)]() mutable {
    1181         completionHandler();
    1182     });
     1178    sendWithAsyncReply(Messages::NetworkProcess::SetFirstPartyWebsiteDataRemovalModeForTesting(sessionID, mode), WTFMove(completionHandler));
    11831179}
    11841180
     
    12101206void NetworkProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
    12111207{
    1212     sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
     1208    sendWithAsyncReply(Messages::NetworkProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
    12131209}
    12141210
  • trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h

    r261254 r261288  
    194194    void terminateUnresponsiveServiceWorkerProcesses(WebCore::ProcessIdentifier);
    195195
    196     ProcessThrottler& throttler() { return m_throttler; }
     196    ProcessThrottler& throttler() final { return m_throttler; }
    197197    void updateProcessAssertion();
    198198
  • trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.cpp

    r261254 r261288  
    6363
    6464PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginProcessAttributes& pluginProcessAttributes, uint64_t pluginProcessToken)
    65     : m_pluginProcessManager(PluginProcessManager)
     65    : m_throttler(*this, false)
     66    , m_pluginProcessManager(PluginProcessManager)
    6667    , m_pluginProcessAttributes(pluginProcessAttributes)
    6768    , m_pluginProcessToken(pluginProcessToken)
  • trunk/Source/WebKit/UIProcess/Plugins/PluginProcessProxy.h

    r261254 r261288  
    3434#include "PluginProcessAttributes.h"
    3535#include "ProcessLauncher.h"
     36#include "ProcessThrottler.h"
     37#include "ProcessThrottlerClient.h"
    3638#include "WebProcessProxyMessagesReplies.h"
    3739#include <wtf/Deque.h>
     
    6264#endif
    6365
    64 class PluginProcessProxy final : public AuxiliaryProcessProxy, public ThreadSafeRefCounted<PluginProcessProxy> {
     66class PluginProcessProxy final : public AuxiliaryProcessProxy, public ThreadSafeRefCounted<PluginProcessProxy>, private ProcessThrottlerClient {
    6567public:
    6668    static Ref<PluginProcessProxy> create(PluginProcessManager*, const PluginProcessAttributes&, uint64_t pluginProcessToken);
     
    8890#endif
    8991
     92    ProcessThrottler& throttler() final { return m_throttler; }
     93
    9094private:
    9195    PluginProcessProxy(PluginProcessManager*, const PluginProcessAttributes&, uint64_t pluginProcessToken);
     
    99103
    100104    void pluginProcessCrashedOrFailedToLaunch();
     105
     106    // ProcessThrottlerClient
     107    void sendPrepareToSuspend(IsSuspensionImminent, CompletionHandler<void()>&& completionHandler) final { completionHandler(); }
     108    void sendProcessDidResume() final { }
     109    ASCIILiteral clientName() const final { return "PluginProcess"_s; }
    101110
    102111    // IPC::Connection::Client
     
    137146
    138147    void platformInitializePluginProcess(PluginProcessCreationParameters& parameters);
     148
     149    ProcessThrottler m_throttler;
    139150
    140151    // The plug-in host process manager.
  • trunk/Source/WebKit/UIProcess/ProcessThrottler.h

    r261034 r261288  
    6666        {
    6767            throttler.addActivity(*this);
    68             PROCESSTHROTTLER_ACTIVITY_RELEASE_LOG("Activity: Starting %" PUBLIC_LOG_STRING " activity / '%" PUBLIC_LOG_STRING "'",
    69                 type == ActivityType::Foreground ? "foreground" : "background", m_name.characters());
     68            if (!isQuietActivity()) {
     69                PROCESSTHROTTLER_ACTIVITY_RELEASE_LOG("Activity: Starting %" PUBLIC_LOG_STRING " activity / '%" PUBLIC_LOG_STRING "'",
     70                    type == ActivityType::Foreground ? "foreground" : "background", m_name.characters());
     71            }
    7072        }
    7173
     
    8183        friend class ProcessThrottler;
    8284
     85        bool isQuietActivity() const { return !m_name.characters(); }
     86
    8387        void invalidate()
    8488        {
    8589            ASSERT(isValid());
    86             PROCESSTHROTTLER_ACTIVITY_RELEASE_LOG("invalidate: Ending %" PUBLIC_LOG_STRING " activity / '%" PUBLIC_LOG_STRING "'",
    87                 type == ActivityType::Foreground ? "foreground" : "background", m_name.characters());
     90            if (!isQuietActivity()) {
     91                PROCESSTHROTTLER_ACTIVITY_RELEASE_LOG("invalidate: Ending %" PUBLIC_LOG_STRING " activity / '%" PUBLIC_LOG_STRING "'",
     92                    type == ActivityType::Foreground ? "foreground" : "background", m_name.characters());
     93            }
    8894            m_throttler->removeActivity(*this);
    8995            m_throttler = nullptr;
  • trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp

    r258322 r261288  
    261261#endif
    262262
    263         m_page.process().connection()->sendWithAsyncReply(Messages::WebPage::UserMediaAccessWasGranted { request.userMediaID(), request.audioDevice(), request.videoDevice(), request.deviceIdentifierHashSalt(), handle }, [this, weakThis = WTFMove(weakThis)] {
     263        m_page.sendWithAsyncReply(Messages::WebPage::UserMediaAccessWasGranted { request.userMediaID(), request.audioDevice(), request.videoDevice(), request.deviceIdentifierHashSalt(), handle }, [this, weakThis = WTFMove(weakThis)] {
    264264            if (!weakThis)
    265265                return;
    266266            if (!--m_hasPendingCapture)
    267267                UserMediaProcessManager::singleton().revokeSandboxExtensionsIfNeeded(page().process());
    268         }, m_page.webPageID());
     268        });
    269269
    270270        processNextUserMediaRequestIfNeeded();
  • trunk/Source/WebKit/UIProcess/WebBackForwardCacheEntry.cpp

    r251778 r261288  
    5151    if (m_backForwardItemID && !m_suspendedPage) {
    5252        auto& process = this->process();
    53         process.sendWithAsyncReply(Messages::WebProcess::ClearCachedPage(m_backForwardItemID), [activity = process.throttler().backgroundActivity("Clearing back/forward cache entry"_s)] { });
     53        process.sendWithAsyncReply(Messages::WebProcess::ClearCachedPage(m_backForwardItemID), [] { });
    5454    }
    5555}
  • trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp

    r251778 r261288  
    103103{
    104104    auto& networkProcess = processPool()->ensureNetworkProcess();
    105     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::getHostnamesWithCookies"_s)](Vector<String>&& hostnames) mutable {
    106         callbackFunction(WTFMove(hostnames));
    107     });
     105    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID), WTFMove(callbackFunction));
    108106}
    109107
     
    121119{
    122120    auto& networkProcess = processPool()->ensureNetworkProcess();
    123     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::deleteCookie"_s)]() mutable {
     121    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteCookie(sessionID, cookie), [callbackFunction = WTFMove(callbackFunction)]() mutable {
    124122        callbackFunction();
    125123    });
     
    129127{
    130128    auto& networkProcess = processPool()->ensureNetworkProcess();
    131     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::deleteAllCookiesModifiedSince"_s)]() mutable {
    132         callbackFunction();
    133     });
     129    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time), WTFMove(callbackFunction));
    134130}
    135131
     
    137133{
    138134    auto& networkProcess = processPool()->ensureNetworkProcess();
    139     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::setCookies"_s)]() mutable {
    140         callbackFunction();
    141     });
     135    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookie(sessionID, cookies), WTFMove(callbackFunction));
    142136}
    143137
     
    145139{
    146140    auto& networkProcess = processPool()->ensureNetworkProcess();
    147     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::setCookies"_s)]() mutable {
    148         callbackFunction();
    149     });
     141    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetCookies(sessionID, cookies, url, mainDocumentURL), WTFMove(callbackFunction));
    150142}
    151143
     
    153145{
    154146    auto& networkProcess = processPool()->ensureNetworkProcess();
    155     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::getAllCookies"_s)](Vector<Cookie>&& cookies) mutable {
    156         callbackFunction(WTFMove(cookies));
    157     });
     147    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetAllCookies(sessionID), WTFMove(callbackFunction));
    158148}
    159149
     
    161151{
    162152    auto& networkProcess = processPool()->ensureNetworkProcess();
    163     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::getCookies"_s)](Vector<Cookie>&& cookies) mutable {
    164         callbackFunction(WTFMove(cookies));
    165     });
     153    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetCookies(sessionID, url), WTFMove(callbackFunction));
    166154}
    167155
     
    233221
    234222    auto& networkProcess = processPool()->ensureNetworkProcess();
    235     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::setHTTPCookieAcceptPolicy"_s)]() mutable {
    236         callbackFunction();
    237     });
     223    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy), WTFMove(callbackFunction));
    238224}
    239225
     
    241227{
    242228    auto& networkProcess = processPool()->ensureNetworkProcess();
    243     networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(), [callbackFunction = WTFMove(callbackFunction), activity = networkProcess.throttler().backgroundActivity("WebCookieManagerProxy::getHTTPCookieAcceptPolicy"_s)](HTTPCookieAcceptPolicy policy) mutable {
    244         callbackFunction(policy);
    245     });
     229    networkProcess.sendWithAsyncReply(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(), WTFMove(callbackFunction));
    246230}
    247231
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r261252 r261288  
    1014110141void WebPageProxy::getProcessDisplayName(CompletionHandler<void(String&&)>&& completionHandler)
    1014210142{
    10143     m_process->connection()->sendWithAsyncReply(Messages::WebPage::GetProcessDisplayName(), WTFMove(completionHandler), m_webPageID);
     10143    sendWithAsyncReply(Messages::WebPage::GetProcessDisplayName(), WTFMove(completionHandler));
    1014410144}
    1014510145
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r261254 r261288  
    461461void WebProcessProxy::setThirdPartyCookieBlockingMode(ThirdPartyCookieBlockingMode thirdPartyCookieBlockingMode, CompletionHandler<void()>&& completionHandler)
    462462{
    463     sendWithAsyncReply(Messages::WebProcess::SetThirdPartyCookieBlockingMode(thirdPartyCookieBlockingMode), [activity = throttler().backgroundActivity("WebProcessProxy::setThirdPartyCookieBlockingMode"_s), completionHandler = WTFMove(completionHandler)]() mutable {
    464         completionHandler();
    465     });
     463    sendWithAsyncReply(Messages::WebProcess::SetThirdPartyCookieBlockingMode(thirdPartyCookieBlockingMode), WTFMove(completionHandler));
    466464}
    467465#endif
     
    11071105    ASSERT_UNUSED(sessionID, sessionID == this->sessionID());
    11081106
    1109     auto activity = throttler().backgroundActivity("WebProcessProxy::fetchWebsiteData"_s);
    11101107    RELEASE_LOG_IF(isReleaseLoggingAllowed(), ProcessSuspension, "%p - WebProcessProxy is taking a background assertion because the Web process is fetching Website data", this);
    11111108
    1112     connection()->sendWithAsyncReply(Messages::WebProcess::FetchWebsiteData(dataTypes), [this, protectedThis = makeRef(*this), activity = WTFMove(activity), completionHandler = WTFMove(completionHandler)] (auto reply) mutable {
     1109    sendWithAsyncReply(Messages::WebProcess::FetchWebsiteData(dataTypes), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] (auto reply) mutable {
    11131110#if RELEASE_LOG_DISABLED
    11141111        UNUSED_PARAM(this);
     
    11241121    ASSERT_UNUSED(sessionID, sessionID == this->sessionID());
    11251122
    1126     auto activity = throttler().backgroundActivity("WebProcessProxy::deleteWebsiteData"_s);
    11271123    RELEASE_LOG_IF(isReleaseLoggingAllowed(), ProcessSuspension, "%p - WebProcessProxy is taking a background assertion because the Web process is deleting Website data", this);
    11281124
    1129     connection()->sendWithAsyncReply(Messages::WebProcess::DeleteWebsiteData(dataTypes, modifiedSince), [this, protectedThis = makeRef(*this), activity = WTFMove(activity), completionHandler = WTFMove(completionHandler)] () mutable {
     1125    sendWithAsyncReply(Messages::WebProcess::DeleteWebsiteData(dataTypes, modifiedSince), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] () mutable {
    11301126#if RELEASE_LOG_DISABLED
    11311127        UNUSED_PARAM(this);
     
    11411137    ASSERT_UNUSED(sessionID, sessionID == this->sessionID());
    11421138
    1143     auto activity = throttler().backgroundActivity("WebProcessProxy::deleteWebsiteDataForOrigins"_s);
    11441139    RELEASE_LOG_IF(isReleaseLoggingAllowed(), ProcessSuspension, "%p - WebProcessProxy is taking a background assertion because the Web process is deleting Website data for several origins", this);
    11451140
    1146     connection()->sendWithAsyncReply(Messages::WebProcess::DeleteWebsiteDataForOrigins(dataTypes, origins), [this, protectedThis = makeRef(*this), activity = WTFMove(activity), completionHandler = WTFMove(completionHandler)] () mutable {
     1141    sendWithAsyncReply(Messages::WebProcess::DeleteWebsiteDataForOrigins(dataTypes, origins), [this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)] () mutable {
    11471142#if RELEASE_LOG_DISABLED
    11481143        UNUSED_PARAM(this);
     
    13261321void WebProcessProxy::sendPrepareToSuspend(IsSuspensionImminent isSuspensionImminent, CompletionHandler<void()>&& completionHandler)
    13271322{
    1328     sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler));
     1323    sendWithAsyncReply(Messages::WebProcess::PrepareToSuspend(isSuspensionImminent == IsSuspensionImminent::Yes), WTFMove(completionHandler), 0, { }, ShouldStartProcessThrottlerActivity::No);
    13291324}
    13301325
     
    15471542void WebProcessProxy::activePagesDomainsForTesting(CompletionHandler<void(Vector<String>&&)>&& completionHandler)
    15481543{
    1549     connection()->sendWithAsyncReply(Messages::WebProcess::GetActivePagesOriginsForTesting(), WTFMove(completionHandler));
     1544    sendWithAsyncReply(Messages::WebProcess::GetActivePagesOriginsForTesting(), WTFMove(completionHandler));
    15501545}
    15511546
     
    16481643void WebProcessProxy::establishServiceWorkerContext(const WebPreferencesStore& store, CompletionHandler<void()>&& completionHandler)
    16491644{
    1650     sendWithAsyncReply(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerInformation->serviceWorkerPageProxyID, m_serviceWorkerInformation->serviceWorkerPageID, store, *m_registrableDomain, m_serviceWorkerInformation->initializationData }, [activity = m_throttler.backgroundActivity("Establish Service Worker"_s), completionHandler = WTFMove(completionHandler)]() mutable {
     1645    sendWithAsyncReply(Messages::WebProcess::EstablishWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_serviceWorkerInformation->serviceWorkerPageProxyID, m_serviceWorkerInformation->serviceWorkerPageID, store, *m_registrableDomain, m_serviceWorkerInformation->initializationData }, [completionHandler = WTFMove(completionHandler)]() mutable {
    16511646        RELEASE_LOG(Loading, "WebProcessProxy::establishServiceWorkerContext finished");
    16521647        completionHandler();
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r261254 r261288  
    243243    void windowServerConnectionStateChanged();
    244244
    245     ProcessThrottler& throttler() { return m_throttler; }
     245    ProcessThrottler& throttler() final { return m_throttler; }
    246246
    247247    void isResponsive(CompletionHandler<void(bool isWebProcessResponsive)>&&);
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r261209 r261288  
    467467        return;
    468468    }
    469     m_process->connection()->sendWithAsyncReply(Messages::WebPage::InsertTextPlaceholder { size }, WTFMove(completionHandler), m_webPageID);
     469    sendWithAsyncReply(Messages::WebPage::InsertTextPlaceholder { size }, WTFMove(completionHandler));
    470470}
    471471
     
    476476        return;
    477477    }
    478     m_process->connection()->sendWithAsyncReply(Messages::WebPage::RemoveTextPlaceholder { placeholder }, WTFMove(completionHandler), m_webPageID);
     478    sendWithAsyncReply(Messages::WebPage::RemoveTextPlaceholder { placeholder }, WTFMove(completionHandler));
    479479}
    480480
     
    485485        return;
    486486    }
    487     m_process->connection()->sendWithAsyncReply(Messages::WebPage::RequestAutocorrectionData(textForAutocorrection), WTFMove(callback), m_webPageID);
     487    sendWithAsyncReply(Messages::WebPage::RequestAutocorrectionData(textForAutocorrection), WTFMove(callback));
    488488}
    489489
     
    12231223    }
    12241224
    1225     m_process->connection()->sendWithAsyncReply(Messages::WebPage::RequestEvasionRectsAboveSelection(), WTFMove(callback), m_webPageID);
     1225    sendWithAsyncReply(Messages::WebPage::RequestEvasionRectsAboveSelection(), WTFMove(callback));
    12261226}
    12271227
     
    12331233    }
    12341234
    1235     m_process->connection()->sendWithAsyncReply(Messages::WebPage::UpdateSelectionWithDelta(locationDelta, lengthDelta), WTFMove(completionHandler), m_webPageID);
     1235    sendWithAsyncReply(Messages::WebPage::UpdateSelectionWithDelta(locationDelta, lengthDelta), WTFMove(completionHandler));
    12361236}
    12371237
     
    12431243    }
    12441244
    1245     m_process->connection()->sendWithAsyncReply(Messages::WebPage::RequestDocumentEditingContext(request), WTFMove(completionHandler), m_webPageID);
     1245    sendWithAsyncReply(Messages::WebPage::RequestDocumentEditingContext(request), WTFMove(completionHandler));
    12461246}
    12471247
     
    12731273{
    12741274    if (hasRunningProcess())
    1275         m_process->connection()->sendWithAsyncReply(Messages::WebPage::InsertDroppedImagePlaceholders(imageSizes), WTFMove(completionHandler), m_webPageID);
     1275        sendWithAsyncReply(Messages::WebPage::InsertDroppedImagePlaceholders(imageSizes), WTFMove(completionHandler));
    12761276    else
    12771277        completionHandler({ }, WTF::nullopt);
Note: See TracChangeset for help on using the changeset viewer.