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

Unified Diff: Source/platform/graphics/GraphicsContext.cpp

Issue 293963009: Fixing GraphicsContext state checks to support oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: updated test expectations Created 6 years, 7 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: Source/platform/graphics/GraphicsContext.cpp
diff --git a/Source/platform/graphics/GraphicsContext.cpp b/Source/platform/graphics/GraphicsContext.cpp
index 02af6b47f1201460f733dcbcf36ccf8566019a05..a841e288a01b899e51be7893761b2c729cb5739c 100644
--- a/Source/platform/graphics/GraphicsContext.cpp
+++ b/Source/platform/graphics/GraphicsContext.cpp
@@ -122,6 +122,8 @@ GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOr
#if !ASSERT_DISABLED
, m_annotationCount(0)
, m_layerCount(0)
+ , m_saveCount(0)
+ , m_disableDestructionChecks(false)
#endif
, m_disabledState(disableContextOrPainting)
, m_trackOpaqueRegion(false)
@@ -144,23 +146,24 @@ GraphicsContext::GraphicsContext(SkCanvas* canvas, DisabledMode disableContextOr
GraphicsContext::~GraphicsContext()
{
-#if !ENABLE(OILPAN)
- // FIXME: Oilpan: These asserts are not true for
- // CanvasRenderingContext2D. Therefore, there is debug mode code
- // in the CanvasRenderingContext2D that forces this to be true so
- // that the assertions can be here for all the other cases. With
- // Oilpan we cannot run that code in the CanvasRenderingContext2D
- // destructor because it touches other objects that are already
- // dead. We need to find another way of doing these asserts when
- // Oilpan is enabled.
- ASSERT(!m_paintStateIndex);
- ASSERT(!m_paintState->saveCount());
- ASSERT(!m_annotationCount);
- ASSERT(!m_layerCount);
- ASSERT(m_recordingStateStack.isEmpty());
+#if !ASSERT_DISABLED
+ if (!m_disableDestructionChecks) {
+ ASSERT(!m_paintStateIndex);
+ ASSERT(!m_paintState->saveCount());
+ ASSERT(!m_annotationCount);
+ ASSERT(!m_layerCount);
+ ASSERT(!m_saveCount);
+ ASSERT(m_recordingStateStack.isEmpty());
+ }
#endif
}
+void GraphicsContext::unwindStateStack()
+{
+ while (m_paintStateIndex || m_paintState->saveCount())
+ restore();
f(malita) 2014/05/27 20:28:22 You can probably drive this off m_canvasStateStack
+}
+
void GraphicsContext::save()
{
if (contextDisabled())
@@ -170,6 +173,10 @@ void GraphicsContext::save()
m_canvasStateStack.append(CanvasSaveState(m_pendingCanvasSave, m_canvas->getSaveCount()));
m_pendingCanvasSave = true;
+
+#if !ASSERT_DISABLED
+ m_saveCount++;
+#endif
}
void GraphicsContext::restore()
@@ -193,6 +200,9 @@ void GraphicsContext::restore()
m_canvasStateStack.removeLast();
m_pendingCanvasSave = savedState.m_pendingSave;
m_canvas->restoreToCount(savedState.m_restoreCount);
+#if !ASSERT_DISABLED
+ m_saveCount--;
+#endif
}
void GraphicsContext::saveLayer(const SkRect* bounds, const SkPaint* paint)
« Source/platform/graphics/GraphicsContext.h ('K') | « Source/platform/graphics/GraphicsContext.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698