Title: [281058] trunk/Source
Revision
281058
Author
[email protected]
Date
2021-08-14 16:22:58 -0700 (Sat, 14 Aug 2021)

Log Message

[GPU Process] REGRESSION: WebContent often crashes when opening a Google spreadsheet with charts
https://bugs.webkit.org/show_bug.cgi?id=229106
<rdar://81806877>

Reviewed by Wenson Hsieh.

Source/WebCore:

Add a method to return the backend of the ImageBuffer.

* platform/graphics/ConcreteImageBuffer.h:
* platform/graphics/ImageBuffer.h:

Source/WebKit:

Don't resume processing the DisplayList of an ImageBuffer until its
backend is created.

* WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
(WebKit::RemoteRenderingBackendProxy::didAppendData):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (281057 => 281058)


--- trunk/Source/WebCore/ChangeLog	2021-08-14 17:38:26 UTC (rev 281057)
+++ trunk/Source/WebCore/ChangeLog	2021-08-14 23:22:58 UTC (rev 281058)
@@ -1,3 +1,16 @@
+2021-08-14  Said Abou-Hallawa  <[email protected]>
+
+        [GPU Process] REGRESSION: WebContent often crashes when opening a Google spreadsheet with charts
+        https://bugs.webkit.org/show_bug.cgi?id=229106
+        <rdar://81806877>
+
+        Reviewed by Wenson Hsieh.
+
+        Add a method to return the backend of the ImageBuffer.
+
+        * platform/graphics/ConcreteImageBuffer.h:
+        * platform/graphics/ImageBuffer.h:
+
 2021-08-13  Chris Dumez  <[email protected]>
 
         Add Cross-Origin-Embedder-Policy support for Blob URLs

Modified: trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h (281057 => 281058)


--- trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h	2021-08-14 17:38:26 UTC (rev 281057)
+++ trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h	2021-08-14 23:22:58 UTC (rev 281058)
@@ -71,6 +71,7 @@
     }
 
     void clearBackend() override { m_backend = nullptr; }
+    ImageBufferBackend* backend() const override { return m_backend.get(); }
     ImageBufferBackend* ensureBackendCreated() const override { return m_backend.get(); }
 
     RenderingResourceIdentifier renderingResourceIdentifier() const override { return m_renderingResourceIdentifier; }

Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.h (281057 => 281058)


--- trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2021-08-14 17:38:26 UTC (rev 281057)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.h	2021-08-14 23:22:58 UTC (rev 281058)
@@ -66,6 +66,7 @@
 
     virtual void setBackend(std::unique_ptr<ImageBufferBackend>&&) = 0;
     virtual void clearBackend() = 0;
+    virtual ImageBufferBackend* backend() const = 0;
     virtual ImageBufferBackend* ensureBackendCreated() const = 0;
 
     virtual RenderingMode renderingMode() const = 0;

Modified: trunk/Source/WebKit/ChangeLog (281057 => 281058)


--- trunk/Source/WebKit/ChangeLog	2021-08-14 17:38:26 UTC (rev 281057)
+++ trunk/Source/WebKit/ChangeLog	2021-08-14 23:22:58 UTC (rev 281058)
@@ -1,3 +1,17 @@
+2021-08-14  Said Abou-Hallawa  <[email protected]>
+
+        [GPU Process] REGRESSION: WebContent often crashes when opening a Google spreadsheet with charts
+        https://bugs.webkit.org/show_bug.cgi?id=229106
+        <rdar://81806877>
+
+        Reviewed by Wenson Hsieh.
+
+        Don't resume processing the DisplayList of an ImageBuffer until its 
+        backend is created.
+
+        * WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:
+        (WebKit::RemoteRenderingBackendProxy::didAppendData):
+
 2021-08-13  Kate Cheney  <[email protected]>
 
         Check quarantine bits before rendering local files

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp (281057 => 281058)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2021-08-14 17:38:26 UTC (rev 281057)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp	2021-08-14 23:22:58 UTC (rev 281058)
@@ -344,7 +344,8 @@
     bool wasEmpty = sharedHandle->advance(numberOfBytes) == numberOfBytes;
     if (!wasEmpty || didChangeItemBuffer == DisplayList::DidChangeItemBuffer::Yes) {
         if (m_deferredWakeupMessageArguments) {
-            if (sharedHandle->tryToResume({ m_deferredWakeupMessageArguments->offset, m_deferredWakeupMessageArguments->destinationImageBufferIdentifier.toUInt64() })) {
+            auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(m_deferredWakeupMessageArguments->destinationImageBufferIdentifier);
+            if (imageBuffer && imageBuffer->backend() && sharedHandle->tryToResume({ m_deferredWakeupMessageArguments->offset, m_deferredWakeupMessageArguments->destinationImageBufferIdentifier.toUInt64() })) {
                 m_parameters.resumeDisplayListSemaphore.signal();
                 m_deferredWakeupMessageArguments = std::nullopt;
                 m_remainingItemsToAppendBeforeSendingWakeup = 0;
@@ -358,8 +359,9 @@
 
     sendDeferredWakeupMessageIfNeeded();
 
+    auto imageBuffer = m_remoteResourceCacheProxy.cachedImageBuffer(destinationImageBuffer);
     auto offsetToRead = sharedHandle->writableOffset() - numberOfBytes;
-    if (sharedHandle->tryToResume({ offsetToRead, destinationImageBuffer.toUInt64() })) {
+    if (imageBuffer && imageBuffer->backend() && sharedHandle->tryToResume({ offsetToRead, destinationImageBuffer.toUInt64() })) {
         m_parameters.resumeDisplayListSemaphore.signal();
         return;
     }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to