Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: b1f94e7ba1ccdedaa103189b6979a9839a6cdcec
      
https://github.com/WebKit/WebKit/commit/b1f94e7ba1ccdedaa103189b6979a9839a6cdcec
  Author: Kimmo Kinnunen <[email protected]>
  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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to