Title: [257845] trunk/Source/WebKit
Revision
257845
Author
you...@apple.com
Date
2020-03-04 08:31:59 -0800 (Wed, 04 Mar 2020)

Log Message

WebChromeClient::createImageBuffer should not create a connection to GPU Process if page does not want remote rendering
https://bugs.webkit.org/show_bug.cgi?id=208567
rdar://problem/60020229

Reviewed by Wenson Hsieh.

Manually tested.

* WebProcess/GPU/graphics/RemoteRenderingBackend.cpp:
(WebKit::RemoteRenderingBackend::createImageBuffer):
Minor refactoring to directly take a ShouldAccelerate instead of a RenderingMode.
* WebProcess/GPU/graphics/RemoteRenderingBackend.h:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::createImageBuffer const):
In case page does not want to do remote rendering, do not create a remote image buffer.
Instead, return null and let the caller create a local image buffer.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (257844 => 257845)


--- trunk/Source/WebKit/ChangeLog	2020-03-04 16:17:19 UTC (rev 257844)
+++ trunk/Source/WebKit/ChangeLog	2020-03-04 16:31:59 UTC (rev 257845)
@@ -1,3 +1,22 @@
+2020-03-04  Youenn Fablet  <you...@apple.com>
+
+        WebChromeClient::createImageBuffer should not create a connection to GPU Process if page does not want remote rendering
+        https://bugs.webkit.org/show_bug.cgi?id=208567
+        rdar://problem/60020229
+
+        Reviewed by Wenson Hsieh.
+
+        Manually tested.
+
+        * WebProcess/GPU/graphics/RemoteRenderingBackend.cpp:
+        (WebKit::RemoteRenderingBackend::createImageBuffer):
+        Minor refactoring to directly take a ShouldAccelerate instead of a RenderingMode.
+        * WebProcess/GPU/graphics/RemoteRenderingBackend.h:
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::createImageBuffer const):
+        In case page does not want to do remote rendering, do not create a remote image buffer.
+        Instead, return null and let the caller create a local image buffer.
+
 2020-03-04  Zalan Bujtas  <za...@apple.com>
 
         [First paint] Going from visually empty to non-empty should immediately trigger layer unfreezing

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp (257844 => 257845)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	2020-03-04 16:17:19 UTC (rev 257844)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	2020-03-04 16:31:59 UTC (rev 257845)
@@ -84,20 +84,18 @@
     return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackend::CommitImageBufferFlushContext>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
 }
 
-std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace)
+std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize& size, ShouldAccelerate shouldAccelerate, float resolutionScale, ColorSpace colorSpace)
 {
-    if (renderingMode == RenderingMode::RemoteAccelerated) {
-        if (auto imageBuffer = AcceleratedRemoteImageBuffer::create(size, renderingMode, resolutionScale, colorSpace, *this)) {
+    if (shouldAccelerate == ShouldAccelerate::Yes) {
+        if (auto imageBuffer = AcceleratedRemoteImageBuffer::create(size, RenderingMode::RemoteAccelerated, resolutionScale, colorSpace, *this)) {
             m_imageBufferMessageHandlerMap.add(imageBuffer->imageBufferIdentifier(), imageBuffer.get());
             return imageBuffer;
         }
     }
 
-    if (renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated) {
-        if (auto imageBuffer = UnacceleratedRemoteImageBuffer::create(size, renderingMode, resolutionScale, colorSpace, *this)) {
-            m_imageBufferMessageHandlerMap.add(imageBuffer->imageBufferIdentifier(), imageBuffer.get());
-            return imageBuffer;
-        }
+    if (auto imageBuffer = UnacceleratedRemoteImageBuffer::create(size, RenderingMode::RemoteUnaccelerated, resolutionScale, colorSpace, *this)) {
+        m_imageBufferMessageHandlerMap.add(imageBuffer->imageBufferIdentifier(), imageBuffer.get());
+        return imageBuffer;
     }
 
     return nullptr;

Modified: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h (257844 => 257845)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	2020-03-04 16:17:19 UTC (rev 257844)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	2020-03-04 16:31:59 UTC (rev 257845)
@@ -61,7 +61,7 @@
     // IPC::MessageReceiver
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
 
-    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace);
+    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::ShouldAccelerate, float resolutionScale, WebCore::ColorSpace);
     void releaseImageBuffer(ImageBufferIdentifier);
 
     bool waitForCreateImageBufferBackend();

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp (257844 => 257845)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-03-04 16:17:19 UTC (rev 257844)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-03-04 16:31:59 UTC (rev 257845)
@@ -900,14 +900,10 @@
 
 std::unique_ptr<ImageBuffer> WebChromeClient::createImageBuffer(const FloatSize& size, ShouldAccelerate shouldAccelerate, ShouldUseDisplayList shouldUseDisplayList, RenderingPurpose purpose, float resolutionScale, ColorSpace colorSpace) const
 {
-    RenderingMode mode;
-    if (m_page.shouldUseRemoteRenderingFor(purpose))
-        mode = shouldAccelerate == ShouldAccelerate::Yes ? RenderingMode::RemoteAccelerated : RenderingMode::RemoteUnaccelerated;
-    else if (shouldUseDisplayList == ShouldUseDisplayList::Yes)
-        mode = shouldAccelerate == ShouldAccelerate::Yes ? RenderingMode::DisplayListAccelerated : RenderingMode::DisplayListUnaccelerated;
-    else
-        mode = shouldAccelerate == ShouldAccelerate::Yes ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;
-    return ensureRemoteRenderingBackend().createImageBuffer(size, mode, resolutionScale, colorSpace);
+    if (!m_page.shouldUseRemoteRenderingFor(purpose))
+        return nullptr;
+
+    return ensureRemoteRenderingBackend().createImageBuffer(size, shouldAccelerate, resolutionScale, colorSpace);
 }
 
 #endif // ENABLE(GPU_PROCESS)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to