[webkit-changes] [WebKit/WebKit] 5df080: REGRESSION(257266 at main): Various iOS layout tests ...
Kimmo Kinnunen
noreply at github.com
Wed Dec 7 00:19:56 PST 2022
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 5df080eee4f37a71eb81ad1de85af649db603f74
https://github.com/WebKit/WebKit/commit/5df080eee4f37a71eb81ad1de85af649db603f74
Author: Kimmo Kinnunen <kkinnunen at apple.com>
Date: 2022-12-07 (Wed, 07 Dec 2022)
Changed paths:
M Source/WTF/wtf/ObjectIdentifier.h
M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp
M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp
M Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h
M Source/WebKit/Sources.txt
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h
M Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h
M Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in
R Source/WebKit/WebProcess/GPU/graphics/ThreadSafeRemoteImageBufferFlusher.cpp
R Source/WebKit/WebProcess/GPU/graphics/ThreadSafeRemoteImageBufferFlusher.h
Log Message:
-----------
REGRESSION(257266 at main): Various iOS layout tests asserting in RemoteImageBufferProxy::~RemoteImageBufferProxy()
https://bugs.webkit.org/show_bug.cgi?id=248750
rdar://problem/102967237
Reviewed by Simon Fraser.
Commit 257266 at main would remove the DestructionThread::Main from ImageBuffer.
This is needed for Offscreen cases, where the RemoteImageBufferProxy is created in
non-main thread. This would cause invalid weakptr ref in ~RemoteImageBufferProxy.
The RemoteImageBufferProxy is mostly ref'ed from the expected thread, e.g. the creation
thread.
ThreadSafeRemoteImageBufferFlusher refs the RemoteImageBufferProxy and this is used
in the compositing thread. This means sometimes the last ref to RIBP is dropped in
unintended thread, and this would access the weakptrs in wrong thread for the destructor.
The *Flusher and *Proxy need the "last completed flush" token. Move this shared state
to a refcounted instance. Hold this state in RemoteRenderingBackendProxy, so that the
Flusher gets released properly also when the RIBP is destroyed before the flush completes.
Theoretically the flushes might come out of order due to how waiting is implemented in IPC.
Use >= instead of != when checking last completed flush token to address this.
* Source/WTF/wtf/ObjectIdentifier.h:
(WTF::ObjectIdentifier::operator> const):
(WTF::ObjectIdentifier::operator>= const):
(WTF::ObjectIdentifier::operator< const):
(WTF::ObjectIdentifier::operator<= const):
Add needed operators for full ordering. This patch uses >=.
* Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
(WebKit::RemoteDisplayListRecorder::flushContext):
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::didFlush):
* Source/WebKit/GPUProcess/graphics/RemoteRenderingBackend.h:
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.cpp:
(WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
(WebKit::RemoteImageBufferProxy::hasPendingFlush const):
(WebKit::RemoteImageBufferProxy::clearBackend):
(WebKit::RemoteImageBufferProxy::flushDrawingContextAsync):
(WebKit::RemoteImageBufferProxy::createFlusher):
(WebKit::RemoteImageBufferProxyFlushState::waitForDidFlushOnSecondaryThread):
(WebKit::RemoteImageBufferProxyFlushState::markCompletedFlush):
(WebKit::RemoteImageBufferProxyFlushState::completedFlush const):
(WebKit::RemoteImageBufferProxyFlushState::cancel):
(WebKit::RemoteImageBufferProxy::waitForDidFlushOnSecondaryThread): Deleted.
(WebKit::RemoteImageBufferProxy::didFlush): Deleted.
* Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::disconnectGPUProcess):
(WebKit::RemoteRenderingBackendProxy::didFlush):
(WebKit::RemoteRenderingBackendProxy::addPendingFlush):
* Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.messages.in:
* Source/WebKit/WebProcess/GPU/graphics/ThreadSafeRemoteImageBufferFlusher.cpp: Removed.
* Source/WebKit/WebProcess/GPU/graphics/ThreadSafeRemoteImageBufferFlusher.h: Removed.
Remove the files and move the corresponding class to RemoteImageBufferProxy. This simplifies
the implementation.
* Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
Canonical link: https://commits.webkit.org/257460@main
More information about the webkit-changes
mailing list