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