| Index: Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| diff --git a/Source/platform/graphics/Canvas2DLayerBridge.cpp b/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| index f33300a52a2f25773036320fdef0ea3087c29dd9..7f68b5fdf4c27eb206d95587f3917583a44fb634 100644
|
| --- a/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| +++ b/Source/platform/graphics/Canvas2DLayerBridge.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "SkSurface.h"
|
|
|
| #include "platform/TraceEvent.h"
|
| +#include "platform/graphics/ExpensiveCanvasHeuristicParameters.h"
|
| #include "platform/graphics/GraphicsLayer.h"
|
| #include "platform/graphics/ImageBuffer.h"
|
| #include "public/platform/Platform.h"
|
| @@ -139,6 +140,7 @@ void Canvas2DLayerBridge::startRecording()
|
| if (m_imageBuffer) {
|
| m_imageBuffer->resetCanvas(m_recorder->getRecordingCanvas());
|
| }
|
| + m_recordingPixelCount = 0;
|
| }
|
|
|
| SkCanvas* Canvas2DLayerBridge::canvas()
|
| @@ -489,10 +491,15 @@ WebLayer* Canvas2DLayerBridge::layer() const
|
| return m_layer->layer();
|
| }
|
|
|
| -void Canvas2DLayerBridge::didDraw()
|
| +void Canvas2DLayerBridge::didDraw(const FloatRect& rect)
|
| {
|
| - if (m_isDeferralEnabled)
|
| + if (m_isDeferralEnabled) {
|
| m_haveRecordedDrawCommands = true;
|
| + IntRect pixelBounds = enclosingIntRect(rect);
|
| + m_recordingPixelCount += pixelBounds.width() * pixelBounds.height();
|
| + if (m_recordingPixelCount >= (m_size.width() * m_size.height() * ExpensiveCanvasHeuristicParameters::ExpensiveOverdrawThreshold))
|
| + disableDeferral();
|
| + }
|
| }
|
|
|
| void Canvas2DLayerBridge::finalizeFrame(const FloatRect &dirtyRect)
|
|
|