[webkit-changes] [WebKit/WebKit] 369189: RemoteDisplayListRecorder is unsubscribed from the...

Kimmo Kinnunen noreply at github.com
Fri May 12 06:07:59 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 36918915823b165e1b4b12026347c4397628e78f
      https://github.com/WebKit/WebKit/commit/36918915823b165e1b4b12026347c4397628e78f
  Author: Kimmo Kinnunen <kkinnunen at apple.com>
  Date:   2023-05-12 (Fri, 12 May 2023)

  Changed paths:
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
    M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.h
    M Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h
    M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp
    M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h

  Log Message:
  -----------
  RemoteDisplayListRecorder is unsubscribed from the IPC twice
https://bugs.webkit.org/show_bug.cgi?id=256633
rdar://109196807

Reviewed by Matt Woodrow.

RemoteDisplayListRecorder was referenced twice:
- From a map in RemoteRenderingBackend
- From RemoteImageBuffer
Since the reference was made through ScopedActiveMessageReceiveQueue,
stopListeningForIPC() was called twice.

RemoteDisplayListRecorder is the client that uses ImageBuffer, e.g.
the party that does buffer.context().drawImage(...). It does not
make sense that the client is held inside the very buffer the client
uses.

Instead, hold the RemoteDisplayListRecorder in a map in
RemoteRenderingBackend, similar to any other instance that is created
in GPUP.

Simplify the invocation of didCreateImageBufferBackend. It was
called from the RemoteImageBuffer constructing functions, which
is overly complex. The invocation is linear from RemoteRenderingBackend,
and the logic is internal logic of RemoteRenderingBackend. Thus just
invoke the logic from RemoteRenderingBackend directly.

* Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
(WebKit::RemoteDisplayListRecorder::clearImageBufferReference): Deleted.
* Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.h:
* Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.cpp:
(WebKit::RemoteImageBuffer::RemoteImageBuffer):
(WebKit::RemoteImageBuffer::createTransfer):
(WebKit::m_renderingResourcesRequest): Deleted.
* Source/WebKit/GPUProcess/graphics/RemoteImageBuffer.h:
(WebKit::RemoteImageBuffer::create):
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::startListeningForIPC):
(WebKit::RemoteRenderingBackend::stopListeningForIPC):
(WebKit::RemoteRenderingBackend::workQueueInitialize):
(WebKit::RemoteRenderingBackend::workQueueUninitialize):
(WebKit::RemoteRenderingBackend::dispatch):
(WebKit::RemoteRenderingBackend::didCreateImageBuffer):
(WebKit::RemoteRenderingBackend::moveToSerializedBuffer):
(WebKit::RemoteRenderingBackend::moveToImageBuffer):
(WebKit::RemoteRenderingBackend::createImageBufferWithQualifiedIdentifier):
(WebKit::RemoteRenderingBackend::releaseRenderingResourceWithQualifiedIdentifier):
(WebKit::RemoteRenderingBackend::didCreateImageBufferBackend): Deleted.
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h:
(WebKit::RemoteRenderingBackend::workQueue const):
(WebKit::RemoteRenderingBackend::WTF_GUARDED_BY_LOCK): Deleted.

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




More information about the webkit-changes mailing list