Changeset 273288 in webkit


Ignore:
Timestamp:
Feb 22, 2021 4:31:56 PM (3 years ago)
Author:
Chris Dumez
Message:

Prepare for memory ownership transfer in the GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=222122

Reviewed by Simon Fraser.

Source/WebKit:

Prepare for memory ownership transfer in the GPUProcess:

  1. Have the WebProcess create a task identity token and pass it to the GPUProcess when connecting to it. The WebProcess' task identity token is then stored on the GPUConnectionToWebProcess object.
  2. Add the entitlement to the GPUProcess that is needed to transfer memory ownership to another process.

This is a first step towards having the GPUProcess transfer memory ownership of its
IOSurfaces and Metal textures to the WebProcesses it is serving.

  • GPUProcess/GPUConnectionToWebProcess.cpp:

(WebKit::GPUConnectionToWebProcess::create):
(WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):

  • GPUProcess/GPUConnectionToWebProcess.h:

(WebKit::GPUConnectionToWebProcess::webProcessIdentityToken const):

  • GPUProcess/GPUProcess.cpp:

(WebKit::GPUProcess::createGPUConnectionToWebProcess):

  • GPUProcess/GPUProcess.h:
  • GPUProcess/GPUProcess.messages.in:
  • Scripts/process-entitlements.sh:
  • Shared/GPUProcessConnectionParameters.h: Copied from Source/WTF/wtf/MachSendRight.h.

(WebKit::GPUProcessConnectionParameters::encode const):
(WebKit::GPUProcessConnectionParameters::decode):

  • UIProcess/GPU/GPUProcessProxy.cpp:

(WebKit::GPUProcessProxy::getGPUProcessConnection):

  • UIProcess/GPU/GPUProcessProxy.h:
  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::getGPUProcessConnection):

  • UIProcess/WebProcessPool.h:
  • UIProcess/WebProcessProxy.cpp:

(WebKit::WebProcessProxy::getGPUProcessConnection):

  • UIProcess/WebProcessProxy.h:
  • UIProcess/WebProcessProxy.messages.in:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/WebProcess.cpp:

(WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
(WebKit::WebProcess::getGPUProcessConnection):

  • WebProcess/WebProcess.h:
  • WebProcess/cocoa/WebProcessCocoa.mm:

(WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):

Source/WTF:

  • wtf/PlatformHave.h:

Add feature flag for TASK_IDENTITY_TOKEN as this API was only
introduced very recently.

  • wtf/MachSendRight.h:
  • wtf/cocoa/MachSendRight.cpp:

(WTF::MachSendRight::MachSendRight):
(WTF::MachSendRight::operator=):
Add a copy constructor to MachSendRight for convenience.

Location:
trunk/Source
Files:
22 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r273244 r273288  
     12021-02-22  Chris Dumez  <cdumez@apple.com>
     2
     3        Prepare for memory ownership transfer in the GPUProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=222122
     5
     6        Reviewed by Simon Fraser.
     7
     8        * wtf/PlatformHave.h:
     9        Add feature flag for TASK_IDENTITY_TOKEN as this API was only
     10        introduced very recently.
     11
     12        * wtf/MachSendRight.h:
     13        * wtf/cocoa/MachSendRight.cpp:
     14        (WTF::MachSendRight::MachSendRight):
     15        (WTF::MachSendRight::operator=):
     16        Add a copy constructor to MachSendRight for convenience.
     17
    1182021-02-22  Sam Weinig  <weinig@apple.com>
    219
  • trunk/Source/WTF/wtf/MachSendRight.h

    r248546 r273288  
    3939
    4040    MachSendRight() = default;
     41    WTF_EXPORT_PRIVATE MachSendRight(const MachSendRight&);
    4142    WTF_EXPORT_PRIVATE MachSendRight(MachSendRight&&);
    4243    WTF_EXPORT_PRIVATE ~MachSendRight();
    4344
     45    WTF_EXPORT_PRIVATE MachSendRight& operator=(const MachSendRight&);
    4446    WTF_EXPORT_PRIVATE MachSendRight& operator=(MachSendRight&&);
    4547
  • trunk/Source/WTF/wtf/PlatformHave.h

    r273184 r273288  
    302302#endif
    303303
     304#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 110300) \
     305    || (((PLATFORM(IOS) && !PLATFORM(IOS_FAMILY_SIMULATOR)) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500) \
     306    || (PLATFORM(WATCHOS) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __WATCH_OS_VERSION_MAX_ALLOWED >= 70500) \
     307    || (PLATFORM(APPLETV) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __TV_OS_VERSION_MAX_ALLOWED >= 140500)
     308#define HAVE_TASK_IDENTITY_TOKEN 1
     309#endif
     310
    304311#if PLATFORM(MAC)
    305312#define HAVE_NS_ACTIVITY 1
  • trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp

    r249273 r273288  
    101101}
    102102
     103MachSendRight::MachSendRight(const MachSendRight& other)
     104    : m_port(other.m_port)
     105{
     106    retainSendRight(m_port);
     107}
     108
    103109MachSendRight::~MachSendRight()
    104110{
     
    111117        releaseSendRight(m_port);
    112118        m_port = other.leakSendRight();
     119    }
     120
     121    return *this;
     122}
     123
     124MachSendRight& MachSendRight::operator=(const MachSendRight& other)
     125{
     126    if (this != &other) {
     127        m_port = other.sendRight();
     128        retainSendRight(m_port);
    113129    }
    114130
  • trunk/Source/WebKit/ChangeLog

    r273286 r273288  
     12021-02-22  Chris Dumez  <cdumez@apple.com>
     2
     3        Prepare for memory ownership transfer in the GPUProcess
     4        https://bugs.webkit.org/show_bug.cgi?id=222122
     5
     6        Reviewed by Simon Fraser.
     7
     8        Prepare for memory ownership transfer in the GPUProcess:
     9        1. Have the WebProcess create a task identity token and pass it to the GPUProcess
     10           when connecting to it. The WebProcess' task identity token is then stored on
     11           the GPUConnectionToWebProcess object.
     12        2. Add the entitlement to the GPUProcess that is needed to transfer memory ownership
     13           to another process.
     14
     15        This is a first step towards having the GPUProcess transfer memory ownership of its
     16        IOSurfaces and Metal textures to the WebProcesses it is serving.
     17
     18        * GPUProcess/GPUConnectionToWebProcess.cpp:
     19        (WebKit::GPUConnectionToWebProcess::create):
     20        (WebKit::GPUConnectionToWebProcess::GPUConnectionToWebProcess):
     21        * GPUProcess/GPUConnectionToWebProcess.h:
     22        (WebKit::GPUConnectionToWebProcess::webProcessIdentityToken const):
     23        * GPUProcess/GPUProcess.cpp:
     24        (WebKit::GPUProcess::createGPUConnectionToWebProcess):
     25        * GPUProcess/GPUProcess.h:
     26        * GPUProcess/GPUProcess.messages.in:
     27        * Scripts/process-entitlements.sh:
     28        * Shared/GPUProcessConnectionParameters.h: Copied from Source/WTF/wtf/MachSendRight.h.
     29        (WebKit::GPUProcessConnectionParameters::encode const):
     30        (WebKit::GPUProcessConnectionParameters::decode):
     31        * UIProcess/GPU/GPUProcessProxy.cpp:
     32        (WebKit::GPUProcessProxy::getGPUProcessConnection):
     33        * UIProcess/GPU/GPUProcessProxy.h:
     34        * UIProcess/WebProcessPool.cpp:
     35        (WebKit::WebProcessPool::getGPUProcessConnection):
     36        * UIProcess/WebProcessPool.h:
     37        * UIProcess/WebProcessProxy.cpp:
     38        (WebKit::WebProcessProxy::getGPUProcessConnection):
     39        * UIProcess/WebProcessProxy.h:
     40        * UIProcess/WebProcessProxy.messages.in:
     41        * WebKit.xcodeproj/project.pbxproj:
     42        * WebProcess/WebProcess.cpp:
     43        (WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
     44        (WebKit::WebProcess::getGPUProcessConnection):
     45        * WebProcess/WebProcess.h:
     46        * WebProcess/cocoa/WebProcessCocoa.mm:
     47        (WebKit::WebProcess::platformInitializeGPUProcessConnectionParameters):
     48
    1492021-02-22  Per Arne Vollan  <pvollan@apple.com>
    250
  • trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp

    r273204 r273288  
    3333#include "GPUProcess.h"
    3434#include "GPUProcessConnectionMessages.h"
     35#include "GPUProcessConnectionParameters.h"
    3536#include "GPUProcessMessages.h"
    3637#include "GPUProcessProxyMessages.h"
     
    163164#endif
    164165
    165 Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
    166 {
    167     return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID));
    168 }
    169 
    170 GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
     166Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
     167{
     168    return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID, WTFMove(parameters)));
     169}
     170
     171GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
    171172    : m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
    172173    , m_gpuProcess(gpuProcess)
    173174    , m_webProcessIdentifier(webProcessIdentifier)
     175#if HAVE(TASK_IDENTITY_TOKEN)
     176    , m_webProcessIdentityToken(WTFMove(parameters.webProcessIdentityToken))
     177#endif
    174178    , m_remoteMediaPlayerManagerProxy(makeUnique<RemoteMediaPlayerManagerProxy>(*this))
    175179    , m_sessionID(sessionID)
  • trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h

    r273204 r273288  
    4242#include <pal/SessionID.h>
    4343#include <wtf/Logger.h>
     44#include <wtf/MachSendRight.h>
    4445#include <wtf/ThreadSafeRefCounted.h>
    4546
     
    7172class RemoteSampleBufferDisplayLayerManager;
    7273class UserMediaCaptureManagerProxy;
     74struct GPUProcessConnectionParameters;
    7375struct RemoteAudioSessionConfiguration;
    7476
     
    7880    , IPC::Connection::Client {
    7981public:
    80     static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
     82    static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
    8183    virtual ~GPUConnectionToWebProcess();
    8284
     
    103105#endif
    104106
     107#if HAVE(TASK_IDENTITY_TOKEN)
     108    task_id_token_t webProcessIdentityToken() const { return static_cast<task_id_token_t>(m_webProcessIdentityToken.sendRight()); }
     109#endif
     110
    105111#if ENABLE(ENCRYPTED_MEDIA)
    106112    RemoteCDMFactoryProxy& cdmFactoryProxy();
     
    124130
    125131private:
    126     GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
     132    GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
    127133
    128134#if ENABLE(WEB_AUDIO)
     
    185191    Ref<GPUProcess> m_gpuProcess;
    186192    const WebCore::ProcessIdentifier m_webProcessIdentifier;
     193#if HAVE(TASK_IDENTITY_TOKEN)
     194    MachSendRight m_webProcessIdentityToken;
     195#endif
    187196#if ENABLE(WEB_AUDIO)
    188197    std::unique_ptr<RemoteAudioDestinationManager> m_remoteAudioDestinationManager;
  • trunk/Source/WebKit/GPUProcess/GPUProcess.cpp

    r273212 r273288  
    3434#include "DataReference.h"
    3535#include "GPUConnectionToWebProcess.h"
     36#include "GPUProcessConnectionParameters.h"
    3637#include "GPUProcessCreationParameters.h"
    3738#include "GPUProcessSessionParameters.h"
     
    8384}
    8485
    85 void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
     86void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
    8687{
    8788    auto ipcConnection = createIPCConnectionPair();
     
    9192    }
    9293
    93     auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID);
     94    auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID, WTFMove(parameters));
    9495
    9596#if ENABLE(MEDIA_STREAM)
  • trunk/Source/WebKit/GPUProcess/GPUProcess.h

    r273212 r273288  
    4444
    4545class GPUConnectionToWebProcess;
     46struct GPUProcessConnectionParameters;
    4647struct GPUProcessCreationParameters;
    4748struct GPUProcessSessionParameters;
     
    103104    // Message Handlers
    104105    void initializeGPUProcess(GPUProcessCreationParameters&&);
    105     void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
     106    void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, GPUProcessConnectionParameters&&, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
    106107    void addSession(PAL::SessionID, GPUProcessSessionParameters&&);
    107108    void removeSession(PAL::SessionID);
  • trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in

    r273212 r273288  
    2626    InitializeGPUProcess(struct WebKit::GPUProcessCreationParameters processCreationParameters)
    2727
    28     CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID) -> (Optional<IPC::Attachment> connectionIdentifier) Async
     28    CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID, struct WebKit::GPUProcessConnectionParameters parameters) -> (Optional<IPC::Attachment> connectionIdentifier) Async
    2929
    3030    ProcessDidTransitionToForeground()
  • trunk/Source/WebKit/Scripts/process-entitlements.sh

    r273034 r273288  
    5252        fi
    5353
     54        plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
    5455        plistbuddy Add :com.apple.rootless.storage.WebKitGPUSandbox bool YES
    5556        plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
     
    171172    plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
    172173    plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
     174    plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
    173175}
    174176
     
    242244    plistbuddy Add :com.apple.private.coremedia.pidinheritance.allow bool YES
    243245    plistbuddy Add :com.apple.private.memorystatus bool YES
     246    plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
    244247    plistbuddy Add :com.apple.private.network.socket-delegate bool YES
    245248    plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
  • trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h

    r273287 r273288  
    11/*
    2  * Copyright (C) 2014-2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2021 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #if PLATFORM(COCOA)
     28#if ENABLE(GPU_PROCESS)
    2929
    30 #include <mach/mach_port.h>
     30#include <wtf/MachSendRight.h>
    3131
    32 namespace WTF {
     32namespace WebKit {
    3333
    34 class MachSendRight {
    35     WTF_MAKE_FAST_ALLOCATED;
    36 public:
    37     WTF_EXPORT_PRIVATE static MachSendRight adopt(mach_port_t);
    38     WTF_EXPORT_PRIVATE static MachSendRight create(mach_port_t);
     34struct GPUProcessConnectionParameters {
     35#if HAVE(TASK_IDENTITY_TOKEN)
     36    MachSendRight webProcessIdentityToken;
     37#endif
    3938
    40     MachSendRight() = default;
    41     WTF_EXPORT_PRIVATE MachSendRight(MachSendRight&&);
    42     WTF_EXPORT_PRIVATE ~MachSendRight();
     39    void encode(IPC::Encoder& encoder) const
     40    {
     41#if HAVE(TASK_IDENTITY_TOKEN)
     42        encoder << webProcessIdentityToken;
     43#else
     44        UNUSED_PARAM(encoder);
     45#endif
     46    }
    4347
    44     WTF_EXPORT_PRIVATE MachSendRight& operator=(MachSendRight&&);
     48    static Optional<GPUProcessConnectionParameters> decode(IPC::Decoder& decoder)
     49    {
     50#if HAVE(TASK_IDENTITY_TOKEN)
     51        Optional<MachSendRight> webProcessIdentityToken;
     52        decoder >> webProcessIdentityToken;
     53        if (!webProcessIdentityToken)
     54            return WTF::nullopt;
     55#else
     56        UNUSED_PARAM(decoder);
     57#endif
    4558
    46     explicit operator bool() const { return m_port != MACH_PORT_NULL; }
    47 
    48     mach_port_t sendRight() const { return m_port; }
    49 
    50     WTF_EXPORT_PRIVATE MachSendRight copySendRight() const;
    51     WTF_EXPORT_PRIVATE mach_port_t leakSendRight() WARN_UNUSED_RETURN;
    52 
    53 private:
    54     explicit MachSendRight(mach_port_t);
    55 
    56     mach_port_t m_port { MACH_PORT_NULL };
     59        return GPUProcessConnectionParameters {
     60#if HAVE(TASK_IDENTITY_TOKEN)
     61            WTFMove(*webProcessIdentityToken),
     62#endif
     63        };
     64    }
    5765};
    5866
    59 WTF_EXPORT_PRIVATE void deallocateSendRightSafely(mach_port_t);
     67} // namespace WebKit
    6068
    61 }
    62 
    63 using WTF::MachSendRight;
    64 using WTF::deallocateSendRightSafely;
    65 
    66 #endif
     69#endif // ENABLE(GPU_PROCESS)
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r273212 r273288  
    3131#include "DrawingAreaProxy.h"
    3232#include "GPUProcessConnectionInfo.h"
     33#include "GPUProcessConnectionParameters.h"
    3334#include "GPUProcessCreationParameters.h"
    3435#include "GPUProcessMessages.h"
     
    229230}
    230231
    231 void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
     232void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, const GPUProcessConnectionParameters& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
    232233{
    233234    addSession(webProcessProxy.websiteDataStore());
     
    240241
    241242    RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this);
    242     sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
     243    sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID(), parameters }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
    243244        if (!weakThis) {
    244245            RELEASE_LOG_ERROR(Process, "GPUProcessProxy::getGPUProcessConnection: GPUProcessProxy deallocated during connection establishment");
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h

    r273212 r273288  
    5050class WebProcessProxy;
    5151class WebsiteDataStore;
     52struct GPUProcessConnectionParameters;
    5253struct GPUProcessCreationParameters;
    5354
     
    6162    ~GPUProcessProxy();
    6263
    63     void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
     64    void getGPUProcessConnection(WebProcessProxy&, const GPUProcessConnectionParameters&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
    6465
    6566    ProcessThrottler& throttler() final { return m_throttler; }
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r273212 r273288  
    4141#include "DownloadProxyMessages.h"
    4242#include "GPUProcessConnectionInfo.h"
     43#include "GPUProcessConnectionParameters.h"
    4344#include "GamepadData.h"
    4445#include "HighPerformanceGraphicsUsageSampler.h"
     
    512513}
    513514
    514 void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
    515 {
    516     ensureGPUProcess().getGPUProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
     515void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
     516{
     517    ensureGPUProcess().getGPUProcessConnection(webProcessProxy, parameters, [this, weakThis = makeWeakPtr(*this), parameters, webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
    517518        if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
    518519            WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "getGPUProcessConnection: Failed first attempt, retrying");
    519             ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, WTFMove(reply));
     520            ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, parameters, WTFMove(reply));
    520521            return;
    521522        }
  • trunk/Source/WebKit/UIProcess/WebProcessPool.h

    r273082 r273288  
    110110class WebPageProxy;
    111111class WebProcessCache;
     112struct GPUProcessConnectionParameters;
    112113struct GPUProcessCreationParameters;
    113114struct NetworkProcessCreationParameters;
     
    359360    void gpuProcessCrashed(ProcessID);
    360361
    361     void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
     362    void getGPUProcessConnection(WebProcessProxy&, GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
    362363
    363364    GPUProcessProxy& ensureGPUProcess();
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp

    r273196 r273288  
    775775
    776776#if ENABLE(GPU_PROCESS)
    777 void WebProcessProxy::getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
    778 {
    779     m_processPool->getGPUProcessConnection(*this, WTFMove(reply));
     777void WebProcessProxy::getGPUProcessConnection(GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
     778{
     779    m_processPool->getGPUProcessConnection(*this, WTFMove(parameters), WTFMove(reply));
    780780}
    781781
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r272550 r273288  
    9999enum class WebsiteDataType : uint32_t;
    100100struct BackForwardListItemState;
     101struct GPUProcessConnectionParameters;
    101102struct UserMessage;
    102103struct WebNavigationDataStore;
     
    464465
    465466#if ENABLE(GPU_PROCESS)
    466     void getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
     467    void getGPUProcessConnection(GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
    467468#endif
    468469
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in

    r269906 r273288  
    4040
    4141#if ENABLE(GPU_PROCESS)
    42     GetGPUProcessConnection() -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
     42    GetGPUProcessConnection(struct WebKit::GPUProcessConnectionParameters parameters) -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
    4343#endif
    4444
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r273204 r273288  
    427427                1CBBE4A019B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBBE49E19B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp */; };
    428428                1CBBE4A119B66C53006B7D81 /* WebInspectorUIMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CBBE49F19B66C53006B7D81 /* WebInspectorUIMessages.h */; };
    429                 1D47658625CCA416007AF312 /* RemoteImageDecoderAVFProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47658425CCA416007AF312 /* RemoteImageDecoderAVFProxy.h */; };
    430                 1D47659325CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659025CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h */; };
    431                 1D47659425CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659125CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h */; };
    432                 1D47659C25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659925CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessages.h */; };
    433                 1D47659D25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659A25CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h */; };
    434                 1D4765A125CF5740007AF312 /* RemoteImageDecoderAVFManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659F25CF5740007AF312 /* RemoteImageDecoderAVFManager.h */; };
    435429                1D4D737023A9E54700717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D4D736B23A9DF5500717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp */; };
    436430                1D4D737123A9E56200717A25 /* RemoteMediaResourceManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4D736C23A9DF6000717A25 /* RemoteMediaResourceManagerMessages.h */; };
     
    957951                460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
    958952                4613A74425D32CCF00A5033A /* WKBlankOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4613A74225D32CB800A5033A /* WKBlankOverlayView.h */; };
     953                4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */; };
    959954                461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; };
    960955                461CCCA6231485AA00B659B9 /* WebRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */; };
     
    38503845                46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; };
    38513846                46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackgroundProcessResponsivenessTimer.h; sourceTree = "<group>"; };
     3847                46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPUProcessConnectionParameters.h; sourceTree = "<group>"; };
    38523848                46B0524422668D2300265B97 /* WebDeviceOrientationAndMotionAccessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDeviceOrientationAndMotionAccessController.h; sourceTree = "<group>"; };
    38533849                46B0524522668D2400265B97 /* WebDeviceOrientationAndMotionAccessController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDeviceOrientationAndMotionAccessController.cpp; sourceTree = "<group>"; };
     
    65946590                                1A14F8E01D74C834006CBEC6 /* FrameInfoData.h */,
    65956591                                5C121E8324101F7000486F9B /* FrameTreeNodeData.h */,
     6592                                46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */,
    65966593                                F40BBB40257FF46E0067463A /* GPUProcessWakeupMessageArguments.h */,
    65976594                                1AC75A1A1B3368270056745B /* HangDetectionDisabler.h */,
     
    1174911746                                BC06F43A12DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h in Headers */,
    1175011747                                2DA944A41884E4F000ED86DB /* GestureTypes.h in Headers */,
     11748                                4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */,
    1175111749                                F40BBB41257FF46E0067463A /* GPUProcessWakeupMessageArguments.h in Headers */,
    1175211750                                2DA049B8180CCD0A00AAFA9E /* GraphicsLayerCARemote.h in Headers */,
  • trunk/Source/WebKit/WebProcess/WebProcess.cpp

    r273183 r273288  
    3434#include "DrawingArea.h"
    3535#include "EventDispatcher.h"
     36#include "GPUProcessConnectionParameters.h"
    3637#include "InjectedBundle.h"
    3738#include "LibWebRTCNetwork.h"
     
    11431144#if ENABLE(GPU_PROCESS)
    11441145
    1145 static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection& connection)
    1146 {
     1146#if !PLATFORM(COCOA)
     1147void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&)
     1148{
     1149}
     1150#endif
     1151
     1152GPUProcessConnectionInfo WebProcess::getGPUProcessConnection(IPC::Connection& connection)
     1153{
     1154    GPUProcessConnectionParameters parameters;
     1155    platformInitializeGPUProcessConnectionParameters(parameters);
     1156
    11471157    GPUProcessConnectionInfo connectionInfo;
    1148     if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
     1158    if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
    11491159        // If we failed the first time, retry once. The attachment may have become invalid
    11501160        // before it was received by the web process if the network process crashed.
    1151         if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
     1161        if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
    11521162            CRASH();
    11531163    }
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r273082 r273288  
    128128class WebPage;
    129129class WebPageGroupProxy;
     130struct GPUProcessConnectionInfo;
     131struct GPUProcessConnectionParameters;
    130132struct UserMessage;
    131133struct WebProcessCreationParameters;
     
    555557#endif
    556558
     559#if ENABLE(GPU_PROCESS)
     560    static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection&);
     561    static void platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&);
     562#endif
     563
    557564#if ENABLE(VIDEO)
    558565    void suspendAllMediaBuffering();
  • trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

    r273270 r273288  
    2727#import "WebProcess.h"
    2828
     29#import "GPUProcessConnectionParameters.h"
    2930#import "LegacyCustomProtocolManager.h"
    3031#import "LogInitialization.h"
     
    12171218}
    12181219
     1220#if ENABLE(GPU_PROCESS)
     1221void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters& parameters)
     1222{
     1223#if HAVE(TASK_IDENTITY_TOKEN)
     1224    task_id_token_t identityToken;
     1225    kern_return_t kr = task_create_identity_token(mach_task_self(), &identityToken);
     1226    if (kr == KERN_SUCCESS)
     1227        parameters.webProcessIdentityToken = MachSendRight::adopt(identityToken);
     1228    else
     1229        RELEASE_LOG_ERROR(Process, "Call to task_create_identity_token() failed: %{private}s (%x)", mach_error_string(kr), kr);
     1230#else
     1231    UNUSED_PARAM(parameters);
     1232#endif
     1233}
     1234#endif
     1235
    12191236#if PLATFORM(MAC)
    12201237void WebProcess::systemWillPowerOn()
Note: See TracChangeset for help on using the changeset viewer.