Diff
Modified: trunk/Source/WTF/ChangeLog (273287 => 273288)
--- trunk/Source/WTF/ChangeLog 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/ChangeLog 2021-02-23 00:31:56 UTC (rev 273288)
@@ -1,3 +1,20 @@
+2021-02-22 Chris Dumez <[email protected]>
+
+ Prepare for memory ownership transfer in the GPUProcess
+ https://bugs.webkit.org/show_bug.cgi?id=222122
+
+ Reviewed by Simon Fraser.
+
+ * 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.
+
2021-02-22 Sam Weinig <[email protected]>
Add experimental support for CSS Color 5 color-mix()
Modified: trunk/Source/WTF/wtf/MachSendRight.h (273287 => 273288)
--- trunk/Source/WTF/wtf/MachSendRight.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/MachSendRight.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -38,9 +38,11 @@
WTF_EXPORT_PRIVATE static MachSendRight create(mach_port_t);
MachSendRight() = default;
+ WTF_EXPORT_PRIVATE MachSendRight(const MachSendRight&);
WTF_EXPORT_PRIVATE MachSendRight(MachSendRight&&);
WTF_EXPORT_PRIVATE ~MachSendRight();
+ WTF_EXPORT_PRIVATE MachSendRight& operator=(const MachSendRight&);
WTF_EXPORT_PRIVATE MachSendRight& operator=(MachSendRight&&);
explicit operator bool() const { return m_port != MACH_PORT_NULL; }
Modified: trunk/Source/WTF/wtf/PlatformHave.h (273287 => 273288)
--- trunk/Source/WTF/wtf/PlatformHave.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/PlatformHave.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -301,6 +301,13 @@
#define HAVE_IOSURFACE_SET_OWNERSHIP 1
#endif
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MAX_ALLOWED >= 110300) \
+ || (((PLATFORM(IOS) && !PLATFORM(IOS_FAMILY_SIMULATOR)) || PLATFORM(MACCATALYST)) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 140500) \
+ || (PLATFORM(WATCHOS) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __WATCH_OS_VERSION_MAX_ALLOWED >= 70500) \
+ || (PLATFORM(APPLETV) && !PLATFORM(IOS_FAMILY_SIMULATOR) && __TV_OS_VERSION_MAX_ALLOWED >= 140500)
+#define HAVE_TASK_IDENTITY_TOKEN 1
+#endif
+
#if PLATFORM(MAC)
#define HAVE_NS_ACTIVITY 1
#endif
Modified: trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp (273287 => 273288)
--- trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WTF/wtf/cocoa/MachSendRight.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -100,6 +100,12 @@
{
}
+MachSendRight::MachSendRight(const MachSendRight& other)
+ : m_port(other.m_port)
+{
+ retainSendRight(m_port);
+}
+
MachSendRight::~MachSendRight()
{
releaseSendRight(m_port);
@@ -115,6 +121,16 @@
return *this;
}
+MachSendRight& MachSendRight::operator=(const MachSendRight& other)
+{
+ if (this != &other) {
+ m_port = other.sendRight();
+ retainSendRight(m_port);
+ }
+
+ return *this;
+}
+
MachSendRight MachSendRight::copySendRight() const
{
return create(m_port);
Modified: trunk/Source/WebKit/ChangeLog (273287 => 273288)
--- trunk/Source/WebKit/ChangeLog 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/ChangeLog 2021-02-23 00:31:56 UTC (rev 273288)
@@ -1,3 +1,51 @@
+2021-02-22 Chris Dumez <[email protected]>
+
+ Prepare for memory ownership transfer in the GPUProcess
+ https://bugs.webkit.org/show_bug.cgi?id=222122
+
+ Reviewed by Simon Fraser.
+
+ 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):
+
2021-02-22 Per Arne Vollan <[email protected]>
[Cocoa] Send sandbox extensions for Network Extension services in load parameters
Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (273287 => 273288)
--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -32,6 +32,7 @@
#include "GPUConnectionToWebProcessMessages.h"
#include "GPUProcess.h"
#include "GPUProcessConnectionMessages.h"
+#include "GPUProcessConnectionParameters.h"
#include "GPUProcessMessages.h"
#include "GPUProcessProxyMessages.h"
#include "LibWebRTCCodecsProxy.h"
@@ -162,15 +163,18 @@
};
#endif
-Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
+Ref<GPUConnectionToWebProcess> GPUConnectionToWebProcess::create(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
{
- return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID));
+ return adoptRef(*new GPUConnectionToWebProcess(gpuProcess, webProcessIdentifier, connectionIdentifier, sessionID, WTFMove(parameters)));
}
-GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID)
+GPUConnectionToWebProcess::GPUConnectionToWebProcess(GPUProcess& gpuProcess, WebCore::ProcessIdentifier webProcessIdentifier, IPC::Connection::Identifier connectionIdentifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters)
: m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
, m_gpuProcess(gpuProcess)
, m_webProcessIdentifier(webProcessIdentifier)
+#if HAVE(TASK_IDENTITY_TOKEN)
+ , m_webProcessIdentityToken(WTFMove(parameters.webProcessIdentityToken))
+#endif
, m_remoteMediaPlayerManagerProxy(makeUnique<RemoteMediaPlayerManagerProxy>(*this))
, m_sessionID(sessionID)
#if PLATFORM(COCOA) && USE(LIBWEBRTC)
Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (273287 => 273288)
--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -41,6 +41,7 @@
#include <WebCore/ProcessIdentifier.h>
#include <pal/SessionID.h>
#include <wtf/Logger.h>
+#include <wtf/MachSendRight.h>
#include <wtf/ThreadSafeRefCounted.h>
#if ENABLE(WEBGL)
@@ -70,6 +71,7 @@
class RemoteGraphicsContextGL;
class RemoteSampleBufferDisplayLayerManager;
class UserMediaCaptureManagerProxy;
+struct GPUProcessConnectionParameters;
struct RemoteAudioSessionConfiguration;
class GPUConnectionToWebProcess
@@ -77,7 +79,7 @@
, public WebCore::NowPlayingManager::Client
, IPC::Connection::Client {
public:
- static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
+ static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
virtual ~GPUConnectionToWebProcess();
IPC::Connection& connection() { return m_connection.get(); }
@@ -102,6 +104,10 @@
bool allowsDisplayCapture() const { return m_allowsDisplayCapture; }
#endif
+#if HAVE(TASK_IDENTITY_TOKEN)
+ task_id_token_t webProcessIdentityToken() const { return static_cast<task_id_token_t>(m_webProcessIdentityToken.sendRight()); }
+#endif
+
#if ENABLE(ENCRYPTED_MEDIA)
RemoteCDMFactoryProxy& cdmFactoryProxy();
#endif
@@ -123,7 +129,7 @@
void terminateWebProcess();
private:
- GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
+ GPUConnectionToWebProcess(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID, GPUProcessConnectionParameters&&);
#if ENABLE(WEB_AUDIO)
RemoteAudioDestinationManager& remoteAudioDestinationManager();
@@ -184,6 +190,9 @@
IPC::MessageReceiverMap m_messageReceiverMap;
Ref<GPUProcess> m_gpuProcess;
const WebCore::ProcessIdentifier m_webProcessIdentifier;
+#if HAVE(TASK_IDENTITY_TOKEN)
+ MachSendRight m_webProcessIdentityToken;
+#endif
#if ENABLE(WEB_AUDIO)
std::unique_ptr<RemoteAudioDestinationManager> m_remoteAudioDestinationManager;
#endif
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.cpp (273287 => 273288)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -33,6 +33,7 @@
#include "AuxiliaryProcessMessages.h"
#include "DataReference.h"
#include "GPUConnectionToWebProcess.h"
+#include "GPUProcessConnectionParameters.h"
#include "GPUProcessCreationParameters.h"
#include "GPUProcessSessionParameters.h"
#include "Logging.h"
@@ -82,7 +83,7 @@
{
}
-void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
+void GPUProcess::createGPUConnectionToWebProcess(ProcessIdentifier identifier, PAL::SessionID sessionID, GPUProcessConnectionParameters&& parameters, CompletionHandler<void(Optional<IPC::Attachment>&&)>&& completionHandler)
{
auto ipcConnection = createIPCConnectionPair();
if (!ipcConnection) {
@@ -90,7 +91,7 @@
return;
}
- auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID);
+ auto newConnection = GPUConnectionToWebProcess::create(*this, identifier, ipcConnection->first, sessionID, WTFMove(parameters));
#if ENABLE(MEDIA_STREAM)
// FIXME: We should refactor code to go from WebProcess -> GPUProcess -> UIProcess when getUserMedia is called instead of going from WebProcess -> UIProcess directly.
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.h (273287 => 273288)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -43,6 +43,7 @@
namespace WebKit {
class GPUConnectionToWebProcess;
+struct GPUProcessConnectionParameters;
struct GPUProcessCreationParameters;
struct GPUProcessSessionParameters;
class LayerHostingContext;
@@ -102,7 +103,7 @@
// Message Handlers
void initializeGPUProcess(GPUProcessCreationParameters&&);
- void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
+ void createGPUConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, GPUProcessConnectionParameters&&, CompletionHandler<void(Optional<IPC::Attachment>&&)>&&);
void addSession(PAL::SessionID, GPUProcessSessionParameters&&);
void removeSession(PAL::SessionID);
Modified: trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in (273287 => 273288)
--- trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in 2021-02-23 00:31:56 UTC (rev 273288)
@@ -25,7 +25,7 @@
messages -> GPUProcess {
InitializeGPUProcess(struct WebKit::GPUProcessCreationParameters processCreationParameters)
- CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID) -> (Optional<IPC::Attachment> connectionIdentifier) Async
+ CreateGPUConnectionToWebProcess(WebCore::ProcessIdentifier processIdentifier, PAL::SessionID sessionID, struct WebKit::GPUProcessConnectionParameters parameters) -> (Optional<IPC::Attachment> connectionIdentifier) Async
ProcessDidTransitionToForeground()
ProcessDidTransitionToBackground()
Modified: trunk/Source/WebKit/Scripts/process-entitlements.sh (273287 => 273288)
--- trunk/Source/WebKit/Scripts/process-entitlements.sh 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/Scripts/process-entitlements.sh 2021-02-23 00:31:56 UTC (rev 273288)
@@ -51,6 +51,7 @@
plistbuddy Add :com.apple.avfoundation.allow-system-wide-context bool YES
fi
+ plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
plistbuddy Add :com.apple.rootless.storage.WebKitGPUSandbox bool YES
plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
fi
@@ -170,6 +171,7 @@
plistbuddy Add :com.apple.security.network.client bool YES
plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
plistbuddy Add :com.apple.QuartzCore.webkit-end-points bool YES
+ plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
}
function maccatalyst_process_network_entitlements()
@@ -241,6 +243,7 @@
plistbuddy Add :com.apple.private.mediaexperience.startrecordinginthebackground.allow bool YES
plistbuddy Add :com.apple.private.coremedia.pidinheritance.allow bool YES
plistbuddy Add :com.apple.private.memorystatus bool YES
+ plistbuddy Add :com.apple.private.memory.ownership_transfer bool YES
plistbuddy Add :com.apple.private.network.socket-delegate bool YES
plistbuddy Add :com.apple.runningboard.assertions.webkit bool YES
Copied: trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h (from rev 273287, trunk/Source/WTF/wtf/MachSendRight.h) (0 => 273288)
--- trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h (rev 0)
+++ trunk/Source/WebKit/Shared/GPUProcessConnectionParameters.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include <wtf/MachSendRight.h>
+
+namespace WebKit {
+
+struct GPUProcessConnectionParameters {
+#if HAVE(TASK_IDENTITY_TOKEN)
+ MachSendRight webProcessIdentityToken;
+#endif
+
+ void encode(IPC::Encoder& encoder) const
+ {
+#if HAVE(TASK_IDENTITY_TOKEN)
+ encoder << webProcessIdentityToken;
+#else
+ UNUSED_PARAM(encoder);
+#endif
+ }
+
+ static Optional<GPUProcessConnectionParameters> decode(IPC::Decoder& decoder)
+ {
+#if HAVE(TASK_IDENTITY_TOKEN)
+ Optional<MachSendRight> webProcessIdentityToken;
+ decoder >> webProcessIdentityToken;
+ if (!webProcessIdentityToken)
+ return WTF::nullopt;
+#else
+ UNUSED_PARAM(decoder);
+#endif
+
+ return GPUProcessConnectionParameters {
+#if HAVE(TASK_IDENTITY_TOKEN)
+ WTFMove(*webProcessIdentityToken),
+#endif
+ };
+ }
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -30,6 +30,7 @@
#include "DrawingAreaProxy.h"
#include "GPUProcessConnectionInfo.h"
+#include "GPUProcessConnectionParameters.h"
#include "GPUProcessCreationParameters.h"
#include "GPUProcessMessages.h"
#include "GPUProcessProxyMessages.h"
@@ -228,7 +229,7 @@
singleton() = nullptr;
}
-void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void GPUProcessProxy::getGPUProcessConnection(WebProcessProxy& webProcessProxy, const GPUProcessConnectionParameters& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
{
addSession(webProcessProxy.websiteDataStore());
#if HAVE(VISIBILITY_PROPAGATION_VIEW)
@@ -239,7 +240,7 @@
#endif
RELEASE_LOG(ProcessSuspension, "%p - GPUProcessProxy is taking a background assertion because a web process is requesting a connection", this);
- sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID() }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
+ sendWithAsyncReply(Messages::GPUProcess::CreateGPUConnectionToWebProcess { webProcessProxy.coreProcessIdentifier(), webProcessProxy.sessionID(), parameters }, [this, weakThis = makeWeakPtr(*this), reply = WTFMove(reply)](auto&& identifier) mutable {
if (!weakThis) {
RELEASE_LOG_ERROR(Process, "GPUProcessProxy::getGPUProcessConnection: GPUProcessProxy deallocated during connection establishment");
return reply({ });
Modified: trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -49,6 +49,7 @@
class WebProcessProxy;
class WebsiteDataStore;
+struct GPUProcessConnectionParameters;
struct GPUProcessCreationParameters;
class GPUProcessProxy final : public AuxiliaryProcessProxy, private ProcessThrottlerClient, public CanMakeWeakPtr<GPUProcessProxy>, public RefCounted<GPUProcessProxy> {
@@ -60,7 +61,7 @@
static GPUProcessProxy* singletonIfCreated();
~GPUProcessProxy();
- void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+ void getGPUProcessConnection(WebProcessProxy&, const GPUProcessConnectionParameters&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
ProcessThrottler& throttler() final { return m_throttler; }
void updateProcessAssertion();
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -40,6 +40,7 @@
#include "DownloadProxy.h"
#include "DownloadProxyMessages.h"
#include "GPUProcessConnectionInfo.h"
+#include "GPUProcessConnectionParameters.h"
#include "GamepadData.h"
#include "HighPerformanceGraphicsUsageSampler.h"
#include "LegacyGlobalSettings.h"
@@ -511,12 +512,12 @@
m_resetGPUProcessCrashCountTimer.startOneShot(resetGPUProcessCrashCountDelay);
}
-void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void WebProcessPool::getGPUProcessConnection(WebProcessProxy& webProcessProxy, GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
{
- ensureGPUProcess().getGPUProcessConnection(webProcessProxy, [this, weakThis = makeWeakPtr(*this), webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
+ ensureGPUProcess().getGPUProcessConnection(webProcessProxy, parameters, [this, weakThis = makeWeakPtr(*this), parameters, webProcessProxy = makeWeakPtr(webProcessProxy), reply = WTFMove(reply)] (auto& connectionInfo) mutable {
if (UNLIKELY(!IPC::Connection::identifierIsValid(connectionInfo.identifier()) && webProcessProxy && weakThis)) {
WEBPROCESSPOOL_RELEASE_LOG_ERROR(Process, "getGPUProcessConnection: Failed first attempt, retrying");
- ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, WTFMove(reply));
+ ensureGPUProcess().getGPUProcessConnection(*webProcessProxy, parameters, WTFMove(reply));
return;
}
reply(connectionInfo);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -109,6 +109,7 @@
class WebPageGroup;
class WebPageProxy;
class WebProcessCache;
+struct GPUProcessConnectionParameters;
struct GPUProcessCreationParameters;
struct NetworkProcessCreationParameters;
struct WebProcessCreationParameters;
@@ -358,7 +359,7 @@
#if ENABLE(GPU_PROCESS)
void gpuProcessCrashed(ProcessID);
- void getGPUProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+ void getGPUProcessConnection(WebProcessProxy&, GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
GPUProcessProxy& ensureGPUProcess();
GPUProcessProxy* gpuProcess() const { return m_gpuProcess.get(); }
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -774,9 +774,9 @@
}
#if ENABLE(GPU_PROCESS)
-void WebProcessProxy::getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
+void WebProcessProxy::getGPUProcessConnection(GPUProcessConnectionParameters&& parameters, Messages::WebProcessProxy::GetGPUProcessConnection::DelayedReply&& reply)
{
- m_processPool->getGPUProcessConnection(*this, WTFMove(reply));
+ m_processPool->getGPUProcessConnection(*this, WTFMove(parameters), WTFMove(reply));
}
void WebProcessProxy::gpuProcessCrashed()
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -98,6 +98,7 @@
class WebsiteDataStore;
enum class WebsiteDataType : uint32_t;
struct BackForwardListItemState;
+struct GPUProcessConnectionParameters;
struct UserMessage;
struct WebNavigationDataStore;
struct WebPageCreationParameters;
@@ -463,7 +464,7 @@
void getNetworkProcessConnection(Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
#if ENABLE(GPU_PROCESS)
- void getGPUProcessConnection(Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
+ void getGPUProcessConnection(GPUProcessConnectionParameters&&, Messages::WebProcessProxy::GetGPUProcessConnectionDelayedReply&&);
#endif
#if ENABLE(WEB_AUTHN)
Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (273287 => 273288)
--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in 2021-02-23 00:31:56 UTC (rev 273288)
@@ -39,7 +39,7 @@
GetNetworkProcessConnection() -> (struct WebKit::NetworkProcessConnectionInfo connectionInfo) Synchronous
#if ENABLE(GPU_PROCESS)
- GetGPUProcessConnection() -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
+ GetGPUProcessConnection(struct WebKit::GPUProcessConnectionParameters parameters) -> (struct WebKit::GPUProcessConnectionInfo connectionInfo) Synchronous
#endif
#if ENABLE(WEB_AUTHN)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (273287 => 273288)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2021-02-23 00:31:56 UTC (rev 273288)
@@ -426,12 +426,6 @@
1CA8B946127C882A00576C2B /* WebInspectorProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CA8B944127C882A00576C2B /* WebInspectorProxyMessages.h */; };
1CBBE4A019B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CBBE49E19B66C53006B7D81 /* WebInspectorUIMessageReceiver.cpp */; };
1CBBE4A119B66C53006B7D81 /* WebInspectorUIMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CBBE49F19B66C53006B7D81 /* WebInspectorUIMessages.h */; };
- 1D47658625CCA416007AF312 /* RemoteImageDecoderAVFProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47658425CCA416007AF312 /* RemoteImageDecoderAVFProxy.h */; };
- 1D47659325CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659025CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessages.h */; };
- 1D47659425CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659125CCCE93007AF312 /* RemoteImageDecoderAVFProxyMessagesReplies.h */; };
- 1D47659C25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659925CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessages.h */; };
- 1D47659D25CE74AD007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659A25CE74AC007AF312 /* RemoteImageDecoderAVFManagerMessagesReplies.h */; };
- 1D4765A125CF5740007AF312 /* RemoteImageDecoderAVFManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D47659F25CF5740007AF312 /* RemoteImageDecoderAVFManager.h */; };
1D4D737023A9E54700717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D4D736B23A9DF5500717A25 /* RemoteMediaResourceManagerMessageReceiver.cpp */; };
1D4D737123A9E56200717A25 /* RemoteMediaResourceManagerMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4D736C23A9DF6000717A25 /* RemoteMediaResourceManagerMessages.h */; };
1D4D737623A9ED1800717A25 /* RemoteMediaResourceManagerMessagesReplies.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D4D737523A9EB6800717A25 /* RemoteMediaResourceManagerMessagesReplies.h */; };
@@ -956,6 +950,7 @@
460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; };
460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
4613A74425D32CCF00A5033A /* WKBlankOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4613A74225D32CB800A5033A /* WKBlankOverlayView.h */; };
+ 4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */; };
461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; };
461CCCA6231485AA00B659B9 /* WebRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */; };
463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3849,6 +3844,7 @@
4683569B21E81CC7006E27A3 /* ProvisionalPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProvisionalPageProxy.cpp; sourceTree = "<group>"; };
46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; };
46A2B6071E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackgroundProcessResponsivenessTimer.h; sourceTree = "<group>"; };
+ 46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GPUProcessConnectionParameters.h; sourceTree = "<group>"; };
46B0524422668D2300265B97 /* WebDeviceOrientationAndMotionAccessController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebDeviceOrientationAndMotionAccessController.h; sourceTree = "<group>"; };
46B0524522668D2400265B97 /* WebDeviceOrientationAndMotionAccessController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebDeviceOrientationAndMotionAccessController.cpp; sourceTree = "<group>"; };
46BEB6D522FB9BD600269867 /* StorageArea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageArea.h; sourceTree = "<group>"; };
@@ -6593,6 +6589,7 @@
1A14F8DF1D74C834006CBEC6 /* FrameInfoData.cpp */,
1A14F8E01D74C834006CBEC6 /* FrameInfoData.h */,
5C121E8324101F7000486F9B /* FrameTreeNodeData.h */,
+ 46AC532425DED81E003B57EC /* GPUProcessConnectionParameters.h */,
F40BBB40257FF46E0067463A /* GPUProcessWakeupMessageArguments.h */,
1AC75A1A1B3368270056745B /* HangDetectionDisabler.h */,
BCCF6B2312C93E7A008F9C35 /* ImageOptions.h */,
@@ -11748,6 +11745,7 @@
BC06F44A12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h in Headers */,
BC06F43A12DBCCFB002D78DE /* GeolocationPermissionRequestProxy.h in Headers */,
2DA944A41884E4F000ED86DB /* GestureTypes.h in Headers */,
+ 4614F13225DED875007006E7 /* GPUProcessConnectionParameters.h in Headers */,
F40BBB41257FF46E0067463A /* GPUProcessWakeupMessageArguments.h in Headers */,
2DA049B8180CCD0A00AAFA9E /* GraphicsLayerCARemote.h in Headers */,
C0CE72AD1247E78D00BC0EC4 /* HandleMessage.h in Headers */,
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (273287 => 273288)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2021-02-23 00:31:56 UTC (rev 273288)
@@ -33,6 +33,7 @@
#include "AuxiliaryProcessMessages.h"
#include "DrawingArea.h"
#include "EventDispatcher.h"
+#include "GPUProcessConnectionParameters.h"
#include "InjectedBundle.h"
#include "LibWebRTCNetwork.h"
#include "Logging.h"
@@ -1142,13 +1143,22 @@
#if ENABLE(GPU_PROCESS)
-static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection& connection)
+#if !PLATFORM(COCOA)
+void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&)
{
+}
+#endif
+
+GPUProcessConnectionInfo WebProcess::getGPUProcessConnection(IPC::Connection& connection)
+{
+ GPUProcessConnectionParameters parameters;
+ platformInitializeGPUProcessConnectionParameters(parameters);
+
GPUProcessConnectionInfo connectionInfo;
- if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
+ if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0)) {
// If we failed the first time, retry once. The attachment may have become invalid
// before it was received by the web process if the network process crashed.
- if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
+ if (!connection.sendSync(Messages::WebProcessProxy::GetGPUProcessConnection(parameters), Messages::WebProcessProxy::GetGPUProcessConnection::Reply(connectionInfo), 0))
CRASH();
}
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (273287 => 273288)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2021-02-23 00:31:56 UTC (rev 273288)
@@ -127,6 +127,8 @@
class WebLoaderStrategy;
class WebPage;
class WebPageGroupProxy;
+struct GPUProcessConnectionInfo;
+struct GPUProcessConnectionParameters;
struct UserMessage;
struct WebProcessCreationParameters;
struct WebProcessDataStoreParameters;
@@ -554,6 +556,11 @@
void updateFreezerStatus();
#endif
+#if ENABLE(GPU_PROCESS)
+ static GPUProcessConnectionInfo getGPUProcessConnection(IPC::Connection&);
+ static void platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters&);
+#endif
+
#if ENABLE(VIDEO)
void suspendAllMediaBuffering();
void resumeAllMediaBuffering();
Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (273287 => 273288)
--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2021-02-23 00:19:02 UTC (rev 273287)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2021-02-23 00:31:56 UTC (rev 273288)
@@ -26,6 +26,7 @@
#import "config.h"
#import "WebProcess.h"
+#import "GPUProcessConnectionParameters.h"
#import "LegacyCustomProtocolManager.h"
#import "LogInitialization.h"
#import "Logging.h"
@@ -1216,6 +1217,22 @@
}
}
+#if ENABLE(GPU_PROCESS)
+void WebProcess::platformInitializeGPUProcessConnectionParameters(GPUProcessConnectionParameters& parameters)
+{
+#if HAVE(TASK_IDENTITY_TOKEN)
+ task_id_token_t identityToken;
+ kern_return_t kr = task_create_identity_token(mach_task_self(), &identityToken);
+ if (kr == KERN_SUCCESS)
+ parameters.webProcessIdentityToken = MachSendRight::adopt(identityToken);
+ else
+ RELEASE_LOG_ERROR(Process, "Call to task_create_identity_token() failed: %{private}s (%x)", mach_error_string(kr), kr);
+#else
+ UNUSED_PARAM(parameters);
+#endif
+}
+#endif
+
#if PLATFORM(MAC)
void WebProcess::systemWillPowerOn()
{