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

Reply via email to