Commit 71af5043 authored by chrishtr@chromium.org's avatar chrishtr@chromium.org

Accelerate small canvases if Ganesh is on.

Blink half of change.

BUG=382738

Review URL: https://codereview.chromium.org/328883002

git-svn-id: svn://svn.chromium.org/blink/trunk@175934 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent a83e02c3
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "core/html/canvas/WebGLContextAttributes.h" #include "core/html/canvas/WebGLContextAttributes.h"
#include "core/html/canvas/WebGLContextEvent.h" #include "core/html/canvas/WebGLContextEvent.h"
#include "core/html/canvas/WebGLRenderingContext.h" #include "core/html/canvas/WebGLRenderingContext.h"
#include "core/page/ChromeClient.h"
#include "core/rendering/RenderHTMLCanvas.h" #include "core/rendering/RenderHTMLCanvas.h"
#include "platform/MIMETypeRegistry.h" #include "platform/MIMETypeRegistry.h"
#include "platform/graphics/Canvas2DImageBufferSurface.h" #include "platform/graphics/Canvas2DImageBufferSurface.h"
...@@ -431,8 +432,9 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const ...@@ -431,8 +432,9 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
if (!settings || !settings->accelerated2dCanvasEnabled()) if (!settings || !settings->accelerated2dCanvasEnabled())
return false; return false;
// Do not use acceleration for small canvas. // Do not use acceleration for small canvases, unless GPU rasterization is available.
if (size.width() * size.height() < settings->minimumAccelerated2dCanvasSize()) // GPU raterization is a heuristic to avoid difficult content & whitelist targeted content.
if (!document().frame()->chromeClient().usesGpuRasterization() && size.width() * size.height() < settings->minimumAccelerated2dCanvasSize())
return false; return false;
if (!blink::Platform::current()->canAccelerate2dCanvas()) if (!blink::Platform::current()->canAccelerate2dCanvas())
......
...@@ -161,6 +161,9 @@ public: ...@@ -161,6 +161,9 @@ public:
virtual void annotatedRegionsChanged() OVERRIDE { } virtual void annotatedRegionsChanged() OVERRIDE { }
virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE { return false; } virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE { return false; }
virtual String acceptLanguages() OVERRIDE; virtual String acceptLanguages() OVERRIDE;
virtual bool usesGpuRasterization() OVERRIDE { return false; }
}; };
class EmptyFrameLoaderClient FINAL : public FrameLoaderClient { class EmptyFrameLoaderClient FINAL : public FrameLoaderClient {
......
...@@ -238,6 +238,8 @@ public: ...@@ -238,6 +238,8 @@ public:
virtual void willSetInputMethodState() { } virtual void willSetInputMethodState() { }
virtual void didUpdateTextOfFocusedElementByNonUserInput() { } virtual void didUpdateTextOfFocusedElementByNonUserInput() { }
virtual bool usesGpuRasterization() = 0;
protected: protected:
virtual ~ChromeClient() { } virtual ~ChromeClient() { }
}; };
......
...@@ -882,6 +882,11 @@ void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input) ...@@ -882,6 +882,11 @@ void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input)
m_webView->autofillClient()->openTextDataListChooser(WebInputElement(&input)); m_webView->autofillClient()->openTextDataListChooser(WebInputElement(&input));
} }
bool ChromeClientImpl::usesGpuRasterization()
{
return m_webView->layerTreeView()->usesGpuRasterization();
}
PassOwnPtr<NavigatorContentUtilsClientImpl> NavigatorContentUtilsClientImpl::create(WebViewImpl* webView) PassOwnPtr<NavigatorContentUtilsClientImpl> NavigatorContentUtilsClientImpl::create(WebViewImpl* webView)
{ {
return adoptPtr(new NavigatorContentUtilsClientImpl(webView)); return adoptPtr(new NavigatorContentUtilsClientImpl(webView));
...@@ -907,4 +912,5 @@ void NavigatorContentUtilsClientImpl::unregisterProtocolHandler(const String& sc ...@@ -907,4 +912,5 @@ void NavigatorContentUtilsClientImpl::unregisterProtocolHandler(const String& sc
m_webView->client()->unregisterProtocolHandler(scheme, baseURL, url); m_webView->client()->unregisterProtocolHandler(scheme, baseURL, url);
} }
} // namespace blink } // namespace blink
...@@ -183,6 +183,8 @@ public: ...@@ -183,6 +183,8 @@ public:
virtual void willSetInputMethodState() OVERRIDE; virtual void willSetInputMethodState() OVERRIDE;
virtual void didUpdateTextOfFocusedElementByNonUserInput() OVERRIDE; virtual void didUpdateTextOfFocusedElementByNonUserInput() OVERRIDE;
virtual bool usesGpuRasterization() OVERRIDE;
private: private:
virtual bool isChromeClientImpl() const OVERRIDE { return true; } virtual bool isChromeClientImpl() const OVERRIDE { return true; }
......
...@@ -141,6 +141,9 @@ public: ...@@ -141,6 +141,9 @@ public:
// Toggles scroll bottleneck rects on the HUD layer // Toggles scroll bottleneck rects on the HUD layer
virtual void setShowScrollBottleneckRects(bool) { } virtual void setShowScrollBottleneckRects(bool) { }
// FIXME: make pure virtual once the cc-side patch is in
virtual bool usesGpuRasterization() { return false; };
}; };
} // namespace blink } // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment