Chromium Code Reviews| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| index f2fa9f7fa472bea7b7ff7d3d04b4eb6cc8b56776..8adf5286225e8fe872bff1e64d43302644e04333 100644 |
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp |
| @@ -159,10 +159,15 @@ void CanvasRenderingContext2D::dispose() { |
| void CanvasRenderingContext2D::validateStateStack() const { |
| #if ENABLE(ASSERT) |
|
Justin Novosad
2016/10/06 19:48:54
should be DCHECK_IS_ON()
f(malita)
2016/10/06 20:02:29
Done.
|
| - SkCanvas* skCanvas = canvas()->existingDrawingCanvas(); |
| - if (skCanvas && m_contextLostMode == NotLostContext) { |
| - ASSERT(static_cast<size_t>(skCanvas->getSaveCount()) == |
| - m_stateStack.size()); |
| + if (SkCanvas* skCanvas = canvas()->existingDrawingCanvas()) { |
| + // The canvas should always have an initial frame, to support resetting the |
| + // top level matrix and clip. |
| + DCHECK_GT(skCanvas->getSaveCount(), 1); |
| + |
| + if (m_contextLostMode == NotLostContext) { |
| + DCHECK_EQ(static_cast<size_t>(skCanvas->getSaveCount()), |
| + m_stateStack.size() + 1); |
| + } |
| } |
| #endif |
| CHECK(m_stateStack.first() |
| @@ -279,11 +284,18 @@ void CanvasRenderingContext2D::reset() { |
| m_stateStack.resize(1); |
| m_stateStack.first() = CanvasRenderingContext2DState::create(); |
| m_path.clear(); |
| - SkCanvas* c = canvas()->existingDrawingCanvas(); |
| - if (c) { |
| - c->resetMatrix(); |
| - c->clipRect(SkRect::MakeWH(canvas()->width(), canvas()->height()), |
| - SkRegion::kReplace_Op); |
| + if (SkCanvas* c = canvas()->existingDrawingCanvas()) { |
| + // The canvas should always have an initial/unbalanced frame, which we use |
| + // to reset the top level matrix and clip here. |
| + DCHECK_EQ(c->getSaveCount(), 2); |
| + c->restore(); |
| + c->save(); |
| + DCHECK(c->getTotalMatrix().isIdentity()); |
| +#if ENABLE(ASSERT) |
|
Justin Novosad
2016/10/06 19:48:54
DCHECK_IS_ON()
f(malita)
2016/10/06 20:02:29
Done.
|
| + SkIRect clipBounds; |
| + DCHECK(c->getClipDeviceBounds(&clipBounds)); |
| + DCHECK(clipBounds == c->imageInfo().bounds()); |
| +#endif |
| } |
| validateStateStack(); |
| } |