[webkit-changes] [WebKit/WebKit] b1f94e: Remote WebGPU asserts while subobjects call Stream...

Kimmo Kinnunen noreply at github.com
Fri Nov 25 01:56:05 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b1f94e7ba1ccdedaa103189b6979a9839a6cdcec
      https://github.com/WebKit/WebKit/commit/b1f94e7ba1ccdedaa103189b6979a9839a6cdcec
  Author: Kimmo Kinnunen <kkinnunen at apple.com>
  Date:   2022-11-25 (Fri, 25 Nov 2022)

  Changed paths:
    M LayoutTests/ipc/stream-buffer-read-write.html
    M LayoutTests/ipc/stream-check-autoreleasepool.html
    M LayoutTests/ipc/stream-sync-crash-no-timeout.html
    M LayoutTests/ipc/stream-sync-reply-shared-memory.html
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in
    M Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.h
    M Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLGBM.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLWC.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.cpp
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.h
    M Source/WebKit/Platform/IPC/ArgumentCoders.h
    M Source/WebKit/Platform/IPC/StreamClientConnection.cpp
    M Source/WebKit/Platform/IPC/StreamClientConnection.h
    M Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp
    M Source/WebKit/Platform/IPC/StreamConnectionBuffer.h
    M Source/WebKit/Platform/IPC/StreamServerConnection.cpp
    M Source/WebKit/Platform/IPC/StreamServerConnection.h
    A Source/WebKit/Platform/IPC/unix/ArgumentCodersUnix.cpp
    A Source/WebKit/Platform/IPC/unix/ArgumentCodersUnix.h
    M Source/WebKit/PlatformPlayStation.cmake
    M Source/WebKit/Shared/IPCStreamTester.cpp
    M Source/WebKit/Shared/IPCStreamTester.h
    M Source/WebKit/Shared/IPCTester.cpp
    M Source/WebKit/Shared/IPCTester.h
    M Source/WebKit/Shared/IPCTester.messages.in
    M Source/WebKit/Shared/WebCoreArgumentCoders.cpp
    M Source/WebKit/Shared/WebCoreArgumentCoders.h
    M Source/WebKit/SourcesGTK.txt
    M Source/WebKit/SourcesWPE.txt
    M Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp
    M Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h
    M Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h
    M Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp
    M Tools/TestWebKitAPI/Tests/IPC/StreamConnectionTests.cpp

  Log Message:
  -----------
  Remote WebGPU asserts while subobjects call StreamServerConnection::startReceivingMessages
https://bugs.webkit.org/show_bug.cgi?id=247115
rdar://problem/101622326

Reviewed by Simon Fraser.

WebGPU distinct subobjects act as IPC destinations, similar
to normal remote rendering (RemoteRenderingBackend). As a detail of
stream variant of IPC, these destinations
need to be registered in order for the "non-dedicated" IPC::Connection
to deliver out-of-stream messages to the stream connection. The registration
would need to be done in the connection thread. WebGPU would need the registration
happen in the work queue.

Use the dedicated IPC::Connection for all StreamServerConnection instances.
Remove the non-dedicated codepath, it is not useful. This changes WebGPU
and WebGL.

Before, the stream would be constructed based on IPC::StreamConnectionBuffer
and IPC::Connection.

After, the stream is constructed based on IPC::StreamServerConnection::Handle.
Make the StreamConnectionBuffer be a class that is transferred with
its own Handle, as opposed to value class which would be transferred as
referring to the instance itself. This is because the nature of the
actually intended transferred object, StreamServerConnection, is not a value class
but a class that is transferred and created via a Handle.

Changes to LayoutTest/ipc and IPCTester.cpp are needed, because
before, the JS IPC tests used the non-dedicated stream mode.
Now that they use the dedicated stream mode, the semaphore setter
message comes through the dedicated connection, e.g. conceptually
through the stream connection itself. This means that the
StreamClientConnection that the JS instantiates must be in a valid
open state to receive messages.

Moves UnixFileDescriptor serialization from WebKit WebCore specific headers
to WebKit/Platform/IPC specific headers. Serializing Connection::Handle is
IPC primitive, and it cannot be implemented in the layer above IPC. Follows
the same organization as Win and Darwin.

* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::createRenderingBackend):
(WebKit::GPUConnectionToWebProcess::createGraphicsContextGL):
(WebKit::GPUConnectionToWebProcess::createRemoteGPU):
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:
* Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.cpp:
(WebKit::RemoteGraphicsContextGL::create):
(WebKit::RemoteGraphicsContextGL::RemoteGraphicsContextGL):
* Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGL.h:
* Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLCocoa.cpp:
(WebKit::RemoteGraphicsContextGL::create):
(WebKit::RemoteGraphicsContextGLCocoa::RemoteGraphicsContextGLCocoa):
* Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLGBM.cpp:
(WebKit::RemoteGraphicsContextGLGBM::RemoteGraphicsContextGLGBM):
(WebKit::RemoteGraphicsContextGL::create):
* Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLWC.cpp:
(WebKit::RemoteGraphicsContextGL::create):
(WebKit::RemoteGraphicsContextGLWC::RemoteGraphicsContextGLWC):
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::create):
(WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.cpp:
(WebKit::RemoteGPU::RemoteGPU):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteGPU.h:
* Source/WebKit/Platform/IPC/StreamClientConnection.cpp:
(IPC::StreamClientConnection::DedicatedConnectionClient::DedicatedConnectionClient):
(IPC::StreamClientConnection::DedicatedConnectionClient::didReceiveMessage):
(IPC::StreamClientConnection::DedicatedConnectionClient::didReceiveSyncMessage):
(IPC::StreamClientConnection::DedicatedConnectionClient::didClose):
(IPC::StreamClientConnection::DedicatedConnectionClient::didReceiveInvalidMessage):
(IPC::StreamClientConnection::create):
(IPC::StreamClientConnection::StreamClientConnection):
(IPC::StreamClientConnection::~StreamClientConnection):
(IPC::StreamClientConnection::open):
(IPC::StreamClientConnection::invalidate):
(): Deleted.
(IPC::StreamClientConnection::createWithDedicatedConnection): Deleted.
* Source/WebKit/Platform/IPC/StreamClientConnection.h:
* Source/WebKit/Platform/IPC/StreamConnectionBuffer.cpp:
(IPC::StreamConnectionBuffer::map):
(IPC::StreamConnectionBuffer::createHandle):
(IPC::StreamConnectionBuffer::Handle::encode const):
(IPC::StreamConnectionBuffer::Handle::decode):
(IPC::StreamConnectionBuffer::operator=): Deleted.
(IPC::StreamConnectionBuffer::encode const): Deleted.
(IPC::StreamConnectionBuffer::decode): Deleted.
* Source/WebKit/Platform/IPC/StreamConnectionBuffer.h:
(IPC::StreamConnectionBuffer::maximumSize):
* Source/WebKit/Platform/IPC/StreamServerConnection.cpp:
(IPC::StreamServerConnection::create):
(IPC::StreamServerConnection::StreamServerConnection):
(IPC::StreamServerConnection::~StreamServerConnection):
(IPC::StreamServerConnection::open):
(IPC::StreamServerConnection::invalidate):
(IPC::StreamServerConnection::startReceivingMessages):
(IPC::StreamServerConnection::stopReceivingMessages):
(IPC::StreamServerConnection::createWithDedicatedConnection): Deleted.
* Source/WebKit/Platform/IPC/StreamServerConnection.h:
(IPC::StreamServerConnection::Handle::encode const):
(IPC::StreamServerConnection::Handle::decode):
* Source/WebKit/Shared/IPCStreamTester.cpp:
(WebKit::IPCStreamTester::create):
(WebKit::IPCStreamTester::IPCStreamTester):
* Source/WebKit/Shared/IPCStreamTester.h:
* Source/WebKit/Shared/IPCTester.cpp:
(WebKit::IPCTester::createStreamTester):
* Source/WebKit/Shared/IPCTester.h:
* Source/WebKit/Shared/IPCTester.messages.in:
* Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp:
(WebKit::GPUProcessConnection::dispatchMessage):
* Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.cpp:
(WebKit::RemoteGraphicsContextGLProxy::RemoteGraphicsContextGLProxy):
(WebKit::RemoteGraphicsContextGLProxy::wasCreated):
(WebKit::RemoteGraphicsContextGLProxy::waitUntilInitialized):
(WebKit::RemoteGraphicsContextGLProxy::abandonGpuProcess):
(WebKit::RemoteGraphicsContextGLProxy::disconnectGpuProcessIfNeeded):
* Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxy.h:
(WebKit::RemoteGraphicsContextGLProxy::send):
(WebKit::RemoteGraphicsContextGLProxy::sendSync):
* Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::ensureGPUProcessConnection):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.cpp:
(WebKit::RemoteGPUProxy::RemoteGPUProxy):
(WebKit::RemoteGPUProxy::abandonGPUProcess):
(WebKit::RemoteGPUProxy::wasCreated):
(WebKit::RemoteGPUProxy::waitUntilInitialized):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteGPUProxy.h:
* Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:
(WebKit::IPCTestingAPI::JSIPCStreamConnectionBuffer::encode const):
* Tools/TestWebKitAPI/Tests/IPC/StreamConnectionTests.cpp:
(TestWebKitAPI::TEST_F):

Canonical link: https://commits.webkit.org/257013@main




More information about the webkit-changes mailing list