Changeset 207346 in webkit


Ignore:
Timestamp:
Oct 14, 2016 11:06:47 AM (7 years ago)
Author:
barraclough@apple.com
Message:

Add API to restrict WebKit processes to background priority
https://bugs.webkit.org/show_bug.cgi?id=163363

Reviewed by Anders Carlson.

Add API on _WKProcessPoolConfiguration to flag a process pool as 'alwaysRunsAtBackgroundPriority'.
WebContent and Networking processes associated with that pool will only run a background priority,
when they otherwise would have run at foreground priority.

  • UIProcess/API/APIProcessPoolConfiguration.h:
    • Add m_alwaysRunsAtBackgroundPriority flag to pool configuration object.
  • UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
  • UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:

(-[_WKProcessPoolConfiguration alwaysRunsAtBackgroundPriority]):
(-[_WKProcessPoolConfiguration setAlwaysRunsAtBackgroundPriority:]):

  • Expose new configuration property through API.
  • UIProcess/Network/NetworkProcessProxy.cpp:

(WebKit::NetworkProcessProxy::alwaysRunsAtBackgroundPriority):

  • UIProcess/Network/NetworkProcessProxy.h:
    • Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.
  • UIProcess/ProcessThrottler.cpp:

(WebKit::ProcessThrottler::assertionState):

  • When determining whether to take a foreground exception check alwaysRunsAtBackgroundPriority.
  • UIProcess/ProcessThrottlerClient.h:
    • Add interface to access alwaysRunsAtBackgroundPriority state of WebProcess of NetworkProcess.
  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::WebProcessPool):

  • UIProcess/WebProcessPool.h:
    • Add m_alwaysRunsAtBackgroundPriority, set by configuration.
  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::alwaysRunsAtBackgroundPriority):

  • UIProcess/WebProcessProxy.h:
    • Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.
Location:
trunk/Source/WebKit2
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r207330 r207346  
     12016-10-14  Gavin Barraclough  <barraclough@apple.com>
     2
     3        Add API to restrict WebKit processes to background priority
     4        https://bugs.webkit.org/show_bug.cgi?id=163363
     5
     6        Reviewed by Anders Carlson.
     7
     8        Add API on _WKProcessPoolConfiguration to flag a process pool as 'alwaysRunsAtBackgroundPriority'.
     9        WebContent and Networking processes associated with that pool will only run a background priority,
     10        when they otherwise would have run at foreground priority.
     11
     12        * UIProcess/API/APIProcessPoolConfiguration.h:
     13            - Add m_alwaysRunsAtBackgroundPriority flag to pool configuration object.
     14        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
     15        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
     16        (-[_WKProcessPoolConfiguration alwaysRunsAtBackgroundPriority]):
     17        (-[_WKProcessPoolConfiguration setAlwaysRunsAtBackgroundPriority:]):
     18            - Expose new configuration property through API.
     19        * UIProcess/Network/NetworkProcessProxy.cpp:
     20        (WebKit::NetworkProcessProxy::alwaysRunsAtBackgroundPriority):
     21        * UIProcess/Network/NetworkProcessProxy.h:
     22            - Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.
     23        * UIProcess/ProcessThrottler.cpp:
     24        (WebKit::ProcessThrottler::assertionState):
     25            - When determining whether to take a foreground exception check alwaysRunsAtBackgroundPriority.
     26        * UIProcess/ProcessThrottlerClient.h:
     27            - Add interface to access alwaysRunsAtBackgroundPriority state of WebProcess of NetworkProcess.
     28        * UIProcess/WebProcessPool.cpp:
     29        (WebKit::WebProcessPool::WebProcessPool):
     30        * UIProcess/WebProcessPool.h:
     31            - Add m_alwaysRunsAtBackgroundPriority, set by configuration.
     32        * UIProcess/WebProcessProxy.cpp:
     33        (WebKit::WebProcessProxy::alwaysRunsAtBackgroundPriority):
     34        * UIProcess/WebProcessProxy.h:
     35            - Support ProcessThrottlerClient interface to check if alwaysRunsAtBackgroundPriority is set.
     36
    1372016-10-14  Youenn Fablet  <youenn@apple.com>
    238
  • trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.cpp

    r206604 r207346  
    114114    copy->m_sourceApplicationBundleIdentifier = this->m_sourceApplicationBundleIdentifier;
    115115    copy->m_sourceApplicationSecondaryIdentifier = this->m_sourceApplicationSecondaryIdentifier;
     116    copy->m_alwaysRunsAtBackgroundPriority = this->m_alwaysRunsAtBackgroundPriority;
    116117#if PLATFORM(IOS)
    117118    copy->m_ctDataConnectionServiceType = this->m_ctDataConnectionServiceType;
  • trunk/Source/WebKit2/UIProcess/API/APIProcessPoolConfiguration.h

    r206604 r207346  
    109109    void setSourceApplicationSecondaryIdentifier(const WTF::String& sourceApplicationSecondaryIdentifier) { m_sourceApplicationSecondaryIdentifier = sourceApplicationSecondaryIdentifier; }
    110110
     111    bool alwaysRunsAtBackgroundPriority() const { return m_alwaysRunsAtBackgroundPriority; }
     112    void setAlwaysRunsAtBackgroundPriority(bool alwaysRunsAtBackgroundPriority) { m_alwaysRunsAtBackgroundPriority = alwaysRunsAtBackgroundPriority; }
     113
    111114#if PLATFORM(IOS)
    112115    const WTF::String& ctDataConnectionServiceType() const { return m_ctDataConnectionServiceType; }
     
    139142    WTF::String m_sourceApplicationBundleIdentifier;
    140143    WTF::String m_sourceApplicationSecondaryIdentifier;
     144    bool m_alwaysRunsAtBackgroundPriority { false };
    141145#if PLATFORM(IOS)
    142146    WTF::String m_ctDataConnectionServiceType;
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h

    r206604 r207346  
    5050#if TARGET_OS_IPHONE
    5151@property (nonatomic, nullable, copy) NSString *CTDataConnectionServiceType WK_API_AVAILABLE(ios(WK_IOS_TBA));
     52@property (nonatomic) BOOL alwaysRunsAtBackgroundPriority WK_API_AVAILABLE(ios(WK_IOS_TBA));
    5253#endif
    5354
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm

    r206604 r207346  
    182182    _processPoolConfiguration->setCTDataConnectionServiceType(ctDataConnectionServiceType);
    183183}
     184
     185- (BOOL)alwaysRunsAtBackgroundPriority
     186{
     187    return _processPoolConfiguration->alwaysRunsAtBackgroundPriority();
     188}
     189
     190- (void)setAlwaysRunsAtBackgroundPriority:(BOOL)alwaysRunsAtBackgroundPriority
     191{
     192    _processPoolConfiguration->setAlwaysRunsAtBackgroundPriority(alwaysRunsAtBackgroundPriority);
     193}
    184194#endif
    185195
  • trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp

    r205275 r207346  
    391391}
    392392
     393bool NetworkProcessProxy::alwaysRunsAtBackgroundPriority()
     394{
     395    return m_processPool.alwaysRunsAtBackgroundPriority();
     396}
     397
    393398void NetworkProcessProxy::processReadyToSuspend()
    394399{
  • trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h

    r205207 r207346  
    9292    void sendCancelPrepareToSuspend() override;
    9393    void sendProcessDidResume() override;
     94    bool alwaysRunsAtBackgroundPriority() override;
    9495    void didSetAssertionState(AssertionState) override;
    9596
  • trunk/Source/WebKit2/UIProcess/ProcessThrottler.cpp

    r205275 r207346  
    4848   
    4949    if (m_foregroundCounter.value())
    50         return AssertionState::Foreground;
     50        return m_process.alwaysRunsAtBackgroundPriority() ? AssertionState::Background : AssertionState::Foreground;
    5151    if (m_backgroundCounter.value())
    5252        return AssertionState::Background;
  • trunk/Source/WebKit2/UIProcess/ProcessThrottlerClient.h

    r184774 r207346  
    3939    virtual void sendCancelPrepareToSuspend() = 0;
    4040    virtual void sendProcessDidResume() = 0;
    41 
     41    virtual bool alwaysRunsAtBackgroundPriority() = 0;
    4242    virtual void didSetAssertionState(AssertionState) = 0;
    4343};
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp

    r207145 r207346  
    178178    , m_didNetworkProcessCrash(false)
    179179    , m_memoryCacheDisabled(false)
     180    , m_alwaysRunsAtBackgroundPriority(m_configuration->alwaysRunsAtBackgroundPriority())
    180181    , m_userObservablePageCounter([this](RefCounterEvent) { updateProcessSuppressionState(); })
    181182    , m_processSuppressionDisabledForPageCounter([this](RefCounterEvent) { updateProcessSuppressionState(); })
  • trunk/Source/WebKit2/UIProcess/WebProcessPool.h

    r204668 r207346  
    367367    void setResourceLoadStatisticsEnabled(bool enabled) { m_resourceLoadStatisticsEnabled = enabled; }
    368368
     369    bool alwaysRunsAtBackgroundPriority() { return m_alwaysRunsAtBackgroundPriority; }
     370
    369371#if ENABLE(GAMEPAD)
    370372    void gamepadConnected(const UIGamepad&);
     
    534536    bool m_resourceLoadStatisticsEnabled { false };
    535537
     538    bool m_alwaysRunsAtBackgroundPriority;
     539
    536540    UserObservablePageCounter m_userObservablePageCounter;
    537541    ProcessSuppressionDisabledCounter m_processSuppressionDisabledForPageCounter;
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp

    r206789 r207346  
    928928}
    929929
     930bool WebProcessProxy::alwaysRunsAtBackgroundPriority()
     931{
     932    return m_processPool->alwaysRunsAtBackgroundPriority();
     933}
     934
    930935void WebProcessProxy::processReadyToSuspend()
    931936{
  • trunk/Source/WebKit2/UIProcess/WebProcessProxy.h

    r206937 r207346  
    209209    void sendCancelPrepareToSuspend() override;
    210210    void sendProcessDidResume() override;
     211    bool alwaysRunsAtBackgroundPriority() override;
    211212    void didSetAssertionState(AssertionState) override;
    212213
Note: See TracChangeset for help on using the changeset viewer.