- 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)