Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Unified Diff: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp

Issue 2267993002: Expose if we are using swiftshader via WebGraphicsContext3DProvider. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: softwarerendering: . Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index 0e451a551665448efc2cd2f1f11dc329eed9a052..a0d1802804eb8b8e375f3adcd2bc6438507b0312 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -760,7 +760,7 @@ bool HTMLCanvasElement::originClean() const
return m_originClean;
}
-bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
+bool HTMLCanvasElement::shouldAccelerate(const IntSize& size, const WebGraphicsContext3DProvider* sharedMainThreadContextProvider) const
{
if (m_context && !m_context->is2d())
return false;
@@ -777,7 +777,11 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
if (layoutBox() && !layoutBox()->hasAcceleratedCompositing())
return false;
- int canvasPixelCount = size.width() * size.height();
+ CheckedNumeric<int> checkedCanvasPixelCount = size.width();
+ checkedCanvasPixelCount *= size.height();
+ if (!checkedCanvasPixelCount.IsValid())
+ return false;
+ int canvasPixelCount = checkedCanvasPixelCount.ValueOrDie();
if (RuntimeEnabledFeatures::displayList2dCanvasEnabled()) {
#if 0
@@ -799,7 +803,7 @@ bool HTMLCanvasElement::shouldAccelerate(const IntSize& size) const
if (!settings || canvasPixelCount < settings->minimumAccelerated2dCanvasSize())
return false;
- if (!Platform::current()->canAccelerate2dCanvas())
+ if (sharedMainThreadContextProvider->isSoftwareRendering())
return false;
// When GPU allocated memory runs low (due to having created too many
@@ -851,10 +855,13 @@ std::unique_ptr<ImageBufferSurface> HTMLCanvasElement::createImageBufferSurface(
return wrapUnique(new AcceleratedImageBufferSurface(deviceSize, opacityMode));
}
- if (shouldAccelerate(deviceSize)) {
+ std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+ if (!contextProvider) {
+ CanvasMetrics::countCanvasContextUsage(CanvasMetrics::Accelerated2DCanvasGPUContextLost);
+ } else if (shouldAccelerate(deviceSize, contextProvider.get())) {
if (document().settings())
*msaaSampleCount = document().settings()->accelerated2dCanvasMSAASampleCount();
- std::unique_ptr<ImageBufferSurface> surface = wrapUnique(new Canvas2DImageBufferSurface(deviceSize, *msaaSampleCount, opacityMode, Canvas2DLayerBridge::EnableAcceleration));
+ std::unique_ptr<ImageBufferSurface> surface = wrapUnique(new Canvas2DImageBufferSurface(std::move(contextProvider), deviceSize, *msaaSampleCount, opacityMode, Canvas2DLayerBridge::EnableAcceleration));
if (surface->isValid()) {
CanvasMetrics::countCanvasContextUsage(CanvasMetrics::GPUAccelerated2DCanvasImageBufferCreated);
return surface;

Powered by Google App Engine
This is Rietveld 408576698