Changeset 255662 in webkit


Ignore:
Timestamp:
Feb 3, 2020 9:46:57 PM (4 years ago)
Author:
Chris Dumez
Message:

Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization
https://bugs.webkit.org/show_bug.cgi?id=207144

Reviewed by Brady Eidson.

Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization. Instead, make the
WebProcess::InitializeWebProcess IPC async with a reply and take a process assertion on behalf of the WebContent
process until we get a response back.

This avoids sending an extra WebProcess::MainThreadPing IPC to the WebProcess for no reason (since we're already
sending the WebProcess::InitializeWebProcess IPC) and this is also more reliable since the ResponsivenessTimer can
actually time out and cause the process to get suspended during initialization still.

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::initializeNewWebProcess):

  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::initializeWebProcess):

  • WebProcess/WebProcess.h:
  • WebProcess/WebProcess.messages.in:
Location:
trunk/Source/WebKit
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r255660 r255662  
     12020-02-03  Chris Dumez  <cdumez@apple.com>
     2
     3        Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization
     4        https://bugs.webkit.org/show_bug.cgi?id=207144
     5
     6        Reviewed by Brady Eidson.
     7
     8        Stop relying on ResponsivenessTimer to keep the WebProcess from suspending during initialization. Instead, make the
     9        WebProcess::InitializeWebProcess IPC async with a reply and take a process assertion on behalf of the WebContent
     10        process until we get a response back.
     11
     12        This avoids sending an extra WebProcess::MainThreadPing IPC to the WebProcess for no reason (since we're already
     13        sending the WebProcess::InitializeWebProcess IPC) and this is also more reliable since the ResponsivenessTimer can
     14        actually time out and cause the process to get suspended during initialization still.
     15
     16        * UIProcess/WebProcessPool.cpp:
     17        (WebKit::WebProcessPool::initializeNewWebProcess):
     18        * WebProcess/WebProcess.cpp:
     19        (WebKit::WebProcess::initializeWebProcess):
     20        * WebProcess/WebProcess.h:
     21        * WebProcess/WebProcess.messages.in:
     22
    1232020-02-03  Jiewen Tan  <jiewen_tan@apple.com>
    224
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r254706 r255662  
    964964{
    965965    auto initializationActivity = process.throttler().backgroundActivity("WebProcess initialization"_s);
    966     auto scopeExit = makeScopeExit([&process, initializationActivity = WTFMove(initializationActivity)]() mutable {
    967         // Round-trip to the Web Content process before releasing the
    968         // initialization activity, so that we're sure that all
    969         // messages sent from this function have been handled.
    970         process.isResponsive([initializationActivity = WTFMove(initializationActivity)] (bool) { });
    971     });
    972966
    973967    ensureNetworkProcess();
     
    10541048        parameters.websiteDataStoreParameters = webProcessDataStoreParameters(process, *websiteDataStore);
    10551049
    1056     process.send(Messages::WebProcess::InitializeWebProcess(parameters), 0);
     1050    process.sendWithAsyncReply(Messages::WebProcess::InitializeWebProcess(parameters), [initializationActivity = WTFMove(initializationActivity)] { });
    10571051
    10581052#if PLATFORM(COCOA)
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r255577 r255662  
    294294}
    295295
    296 void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters)
     296void WebProcess::initializeWebProcess(WebProcessCreationParameters&& parameters, CompletionHandler<void()>&& completionHandler)
    297297{   
    298298    TraceScope traceScope(InitializeWebProcessStart, InitializeWebProcessEnd);
     
    459459
    460460    RELEASE_LOG_IF_ALLOWED(Process, "initializeWebProcess: Presenting process = %d", WebCore::presentingApplicationPID());
     461    completionHandler();
    461462}
    462463
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r255189 r255662  
    328328    ~WebProcess();
    329329
    330     void initializeWebProcess(WebProcessCreationParameters&&);
     330    void initializeWebProcess(WebProcessCreationParameters&&, CompletionHandler<void()>&&);
    331331    void platformInitializeWebProcess(WebProcessCreationParameters&);
    332332    void setWebsiteDataStoreParameters(WebProcessDataStoreParameters&&);
  • trunk/Source/WebKit/WebProcess/WebProcess.messages.in

    r255038 r255662  
    2222
    2323messages -> WebProcess LegacyReceiver NotRefCounted {
    24     InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters)
     24    InitializeWebProcess(struct WebKit::WebProcessCreationParameters processCreationParameters) -> () Async
    2525    SetWebsiteDataStoreParameters(struct WebKit::WebProcessDataStoreParameters parameters)
    2626
Note: See TracChangeset for help on using the changeset viewer.