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 @@
#include "core/html/canvas/WebGLContextAttributes.h"
#include "core/html/canvas/WebGLContextEvent.h"
#include "core/html/canvas/WebGLRenderingContext.h"
#include "core/page/ChromeClient.h"
#include "core/rendering/RenderHTMLCanvas.h"
#include "platform/MIMETypeRegistry.h"
#include "platform/graphics/Canvas2DImageBufferSurface.h"
......@@ -431,8 +432,9 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
if (!settings || !settings->accelerated2dCanvasEnabled())
return false;
// Do not use acceleration for small canvas.
if (size.width() * size.height() < settings->minimumAccelerated2dCanvasSize())
// Do not use acceleration for small canvases, unless GPU rasterization is available.
// 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;
if (!blink::Platform::current()->canAccelerate2dCanvas())
......
......@@ -161,6 +161,9 @@ public:
virtual void annotatedRegionsChanged() OVERRIDE { }
virtual bool paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&) OVERRIDE { return false; }
virtual String acceptLanguages() OVERRIDE;
virtual bool usesGpuRasterization() OVERRIDE { return false; }
};
class EmptyFrameLoaderClient FINAL : public FrameLoaderClient {
......
......@@ -238,6 +238,8 @@ public:
virtual void willSetInputMethodState() { }
virtual void didUpdateTextOfFocusedElementByNonUserInput() { }
virtual bool usesGpuRasterization() = 0;
protected:
virtual ~ChromeClient() { }
};
......
......@@ -882,6 +882,11 @@ void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input)
m_webView->autofillClient()->openTextDataListChooser(WebInputElement(&input));
}
bool ChromeClientImpl::usesGpuRasterization()
{
return m_webView->layerTreeView()->usesGpuRasterization();
}
PassOwnPtr<NavigatorContentUtilsClientImpl> NavigatorContentUtilsClientImpl::create(WebViewImpl* webView)
{
return adoptPtr(new NavigatorContentUtilsClientImpl(webView));
......@@ -907,4 +912,5 @@ void NavigatorContentUtilsClientImpl::unregisterProtocolHandler(const String& sc
m_webView->client()->unregisterProtocolHandler(scheme, baseURL, url);
}
} // namespace blink
......@@ -183,6 +183,8 @@ public:
virtual void willSetInputMethodState() OVERRIDE;
virtual void didUpdateTextOfFocusedElementByNonUserInput() OVERRIDE;
virtual bool usesGpuRasterization() OVERRIDE;
private:
virtual bool isChromeClientImpl() const OVERRIDE { return true; }
......
......@@ -141,6 +141,9 @@ public:
// Toggles scroll bottleneck rects on the HUD layer
virtual void setShowScrollBottleneckRects(bool) { }
// FIXME: make pure virtual once the cc-side patch is in
virtual bool usesGpuRasterization() { return false; };
};
} // 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