Chromium Code Reviews| 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 4dede47795e53ea3150db3e8b3eb3fb629914f17..a89f54e9448f347e30a81159cbac480998fa3ff3 100644 |
| --- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
| +++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp |
| @@ -147,6 +147,7 @@ inline HTMLCanvasElement::HTMLCanvasElement(Document& document) |
| , m_originClean(true) |
| , m_didFailToCreateImageBuffer(false) |
| , m_imageBufferIsClear(false) |
| + , m_numFramesSinceLastRenderingModeSwitch(0) |
| { |
| CanvasMetrics::countCanvasContextUsage(CanvasMetrics::CanvasCreated); |
| } |
| @@ -292,6 +293,13 @@ void HTMLCanvasElement::didDraw(const FloatRect& rect) |
| buffer()->didDraw(rect); |
| } |
| +static void disableAccelerationWrapper(WeakPtr<ImageBuffer> buffer) |
| +{ |
| + if (buffer) { |
| + buffer->disableAcceleration(); |
| + } |
| +} |
| + |
| void HTMLCanvasElement::didFinalizeFrame() |
| { |
| notifyListenersCanvasChanged(); |
| @@ -315,6 +323,18 @@ void HTMLCanvasElement::didFinalizeFrame() |
| ro->invalidatePaintRectangle(mappedDirtyRect); |
| } |
| m_dirtyRect = FloatRect(); |
| + |
| + m_numFramesSinceLastRenderingModeSwitch++; |
| + if (m_context->is2d() && buffer()->isAccelerated() |
| + && m_numFramesSinceLastRenderingModeSwitch >= ExpensiveCanvasHeuristicParameters::MinFramesBeforeSwitch) { |
| + if (RuntimeEnabledFeatures::enableCanvas2dDynamicRenderingModeEnabled()) { |
| + if (!m_context->isAccelerationOptimalForCanvasContent()) { |
| + Platform::current()->currentThread()->getWebTaskRunner()->postTask( |
|
Justin Novosad
2016/07/14 18:07:10
Add a comment to explain why the switch is asynchr
sebastienlc
2016/07/14 22:26:53
Done.
|
| + BLINK_FROM_HERE, WTF::bind(&disableAccelerationWrapper, m_imageBuffer->m_weakPtrFactory.createWeakPtr())); |
|
Stephen White
2016/07/14 18:53:04
Out of curiosity, would it be possible to use a la
sebastienlc
2016/07/14 22:26:53
Done.
|
| + m_numFramesSinceLastRenderingModeSwitch = 0; |
| + } |
| + } |
| + } |
| } |
| void HTMLCanvasElement::didDisableAcceleration() |