Title: [258022] branches/safari-610.1.6-branch/Source/WebKit
Revision
258022
Author
repst...@apple.com
Date
2020-03-06 12:48:50 -0800 (Fri, 06 Mar 2020)

Log Message

Cherry-pick r257845. rdar://problem/60049340

    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.

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257845 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-610.1.6-branch/Source/WebKit/ChangeLog (258021 => 258022)


--- branches/safari-610.1.6-branch/Source/WebKit/ChangeLog	2020-03-06 20:48:45 UTC (rev 258021)
+++ branches/safari-610.1.6-branch/Source/WebKit/ChangeLog	2020-03-06 20:48:50 UTC (rev 258022)
@@ -1,5 +1,47 @@
 2020-03-06  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r257845. rdar://problem/60049340
+
+    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.
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257845 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    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-06  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r257730. rdar://problem/60049340
 
     Implement the remote ImageBuffer

Modified: branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp (258021 => 258022)


--- branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	2020-03-06 20:48:45 UTC (rev 258021)
+++ branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	2020-03-06 20:48:50 UTC (rev 258022)
@@ -72,20 +72,30 @@
     return m_renderingBackendIdentifier.toUInt64();
 }
 
-std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace)
+bool RemoteRenderingBackend::waitForCreateImageBufferBackend()
 {
-    if (renderingMode == RenderingMode::RemoteAccelerated) {
-        if (auto imageBuffer = AcceleratedRemoteImageBuffer::create(size, renderingMode, resolutionScale, colorSpace, *this)) {
+    Ref<IPC::Connection> connection = WebProcess::singleton().ensureGPUProcessConnection().connection();
+    return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackend::CreateImageBufferBackend>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
+}
+
+bool RemoteRenderingBackend::waitForCommitImageBufferFlushContext()
+{
+    Ref<IPC::Connection> connection = WebProcess::singleton().ensureGPUProcessConnection().connection();
+    return connection->waitForAndDispatchImmediately<Messages::RemoteRenderingBackend::CommitImageBufferFlushContext>(m_renderingBackendIdentifier, 1_s, IPC::WaitForOption::InterruptWaitingIfSyncMessageArrives);
+}
+
+std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize& size, ShouldAccelerate shouldAccelerate, float resolutionScale, ColorSpace colorSpace)
+{
+    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: branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h (258021 => 258022)


--- branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	2020-03-06 20:48:45 UTC (rev 258021)
+++ branches/safari-610.1.6-branch/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	2020-03-06 20:48:50 UTC (rev 258022)
@@ -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);
 
 private:

Modified: branches/safari-610.1.6-branch/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp (258021 => 258022)


--- branches/safari-610.1.6-branch/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-03-06 20:48:45 UTC (rev 258021)
+++ branches/safari-610.1.6-branch/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-03-06 20:48:50 UTC (rev 258022)
@@ -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