| Index: third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| index 5eb8280c4d9a60216c2247965b497d19f33d500d..27d115b6f7ae213503d48f3faa92727c7bd0a47e 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
|
| @@ -39,10 +39,14 @@ RecordingImageBufferSurface::~RecordingImageBufferSurface() {}
|
| void RecordingImageBufferSurface::initializeCurrentFrame() {
|
| static SkRTreeFactory rTreeFactory;
|
| m_currentFrame = wrapUnique(new SkPictureRecorder);
|
| - m_currentFrame->beginRecording(size().width(), size().height(),
|
| - &rTreeFactory);
|
| + SkCanvas* canvas = m_currentFrame->beginRecording(
|
| + size().width(), size().height(), &rTreeFactory);
|
| + // Always save an initial frame, to support resetting the top level matrix
|
| + // and clip.
|
| + canvas->save();
|
| +
|
| if (m_imageBuffer) {
|
| - m_imageBuffer->resetCanvas(m_currentFrame->getRecordingCanvas());
|
| + m_imageBuffer->resetCanvas(canvas);
|
| }
|
| m_didRecordDrawCommandsInCurrentFrame = false;
|
| m_currentFrameHasExpensiveOp = false;
|
| @@ -296,8 +300,10 @@ bool RecordingImageBufferSurface::finalizeFrameInternal(
|
| }
|
|
|
| if (m_fallbackFactory &&
|
| - m_currentFrame->getRecordingCanvas()->getSaveCount() >
|
| + m_currentFrame->getRecordingCanvas()->getSaveCount() - 1 >
|
| ExpensiveCanvasHeuristicParameters::ExpensiveRecordingStackDepth) {
|
| + // (getSaveCount() decremented to account for the intial recording canvas
|
| + // save frame.)
|
| *fallbackReason = FallbackReasonRunawayStateStack;
|
| return false;
|
| }
|
|
|