Title: [293764] trunk/Source/WebKit
- Revision
- 293764
- Author
- commit-qu...@webkit.org
- Date
- 2022-05-04 00:14:50 -0700 (Wed, 04 May 2022)
Log Message
RemoteImageBuffer ThreadSafeImageBufferFlusher hangs if GPU process crashes
https://bugs.webkit.org/show_bug.cgi?id=240007
Patch by Kimmo Kinnunen <kkinnu...@apple.com> on 2022-05-04
Reviewed by Geoffrey Garen.
RemoteResourceCacheProxy clears the RemoteImageBuffer backend when the
GPUP is lost. Mark the flush as completed in this case, so that any pending
off-thread flush waits can proceed.
Make sure RemoteResourceCacheProxy clears the backends on destruction too,
so that any pending flushes proceed in this case too.
* WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
* WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
(WebKit::RemoteResourceCacheProxy::~RemoteResourceCacheProxy):
(WebKit::RemoteResourceCacheProxy::clearImageBufferBackends):
(WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
* WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (293763 => 293764)
--- trunk/Source/WebKit/ChangeLog 2022-05-04 07:02:57 UTC (rev 293763)
+++ trunk/Source/WebKit/ChangeLog 2022-05-04 07:14:50 UTC (rev 293764)
@@ -1,3 +1,24 @@
+2022-05-04 Kimmo Kinnunen <kkinnu...@apple.com>
+
+ RemoteImageBuffer ThreadSafeImageBufferFlusher hangs if GPU process crashes
+ https://bugs.webkit.org/show_bug.cgi?id=240007
+
+ Reviewed by Geoffrey Garen.
+
+ RemoteResourceCacheProxy clears the RemoteImageBuffer backend when the
+ GPUP is lost. Mark the flush as completed in this case, so that any pending
+ off-thread flush waits can proceed.
+
+ Make sure RemoteResourceCacheProxy clears the backends on destruction too,
+ so that any pending flushes proceed in this case too.
+
+ * WebProcess/GPU/graphics/RemoteImageBufferProxy.h:
+ * WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp:
+ (WebKit::RemoteResourceCacheProxy::~RemoteResourceCacheProxy):
+ (WebKit::RemoteResourceCacheProxy::clearImageBufferBackends):
+ (WebKit::RemoteResourceCacheProxy::remoteResourceCacheWasDestroyed):
+ * WebProcess/GPU/graphics/RemoteResourceCacheProxy.h:
+
2022-05-03 Per Arne Vollan <pvol...@apple.com>
Add logging related to Launch Services database
Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h (293763 => 293764)
--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h 2022-05-04 07:02:57 UTC (rev 293763)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h 2022-05-04 07:14:50 UTC (rev 293764)
@@ -238,6 +238,7 @@
void clearBackend() final
{
m_remoteDisplayList.resetNeedsFlush();
+ didFlush(m_sentFlushIdentifier);
BaseConcreteImageBuffer::clearBackend();
}
Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp (293763 => 293764)
--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp 2022-05-04 07:02:57 UTC (rev 293763)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.cpp 2022-05-04 07:14:50 UTC (rev 293764)
@@ -42,6 +42,7 @@
RemoteResourceCacheProxy::~RemoteResourceCacheProxy()
{
clearNativeImageMap();
+ clearImageBufferBackends();
}
void RemoteResourceCacheProxy::cacheImageBuffer(WebCore::ImageBuffer& imageBuffer)
@@ -166,6 +167,17 @@
m_numberOfFontsUsedInCurrentRenderingUpdate = 0;
}
+void RemoteResourceCacheProxy::clearImageBufferBackends()
+{
+ // Get a copy of m_imageBuffers.values() because clearBackend()
+ // may release some of the cached ImageBuffers.
+ for (auto& imageBuffer : copyToVector(m_imageBuffers.values())) {
+ if (!imageBuffer)
+ continue;
+ imageBuffer->clearBackend();
+ }
+}
+
void RemoteResourceCacheProxy::finalizeRenderingUpdateForFonts()
{
static constexpr unsigned minimumRenderingUpdateCountToKeepFontAlive = 4;
@@ -199,15 +211,8 @@
{
clearNativeImageMap();
clearFontMap();
+ clearImageBufferBackends();
- // Get a copy of m_imageBuffers.values() because clearBackend()
- // may release some of the cached ImageBuffers.
- for (auto& imageBuffer : copyToVector(m_imageBuffers.values())) {
- if (!imageBuffer)
- continue;
- imageBuffer->clearBackend();
- }
-
for (auto& imageBuffer : m_imageBuffers.values()) {
if (!imageBuffer)
continue;
Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h (293763 => 293764)
--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h 2022-05-04 07:02:57 UTC (rev 293763)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteResourceCacheProxy.h 2022-05-04 07:14:50 UTC (rev 293764)
@@ -73,6 +73,7 @@
void finalizeRenderingUpdateForFonts();
void prepareForNextRenderingUpdate();
void clearFontMap();
+ void clearImageBufferBackends();
ImageBufferHashMap m_imageBuffers;
NativeImageHashMap m_nativeImages;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes