Decrement SkCanvas::fDeferredSaveCount in doSave()
authorfmalita <fmalita@chromium.org>
Tue, 28 Apr 2015 15:08:57 +0000 (08:08 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 28 Apr 2015 15:08:57 +0000 (08:08 -0700)
We're currently decrementing early in checkForDeferredSave(), but that
means we break the getSaveCount() invariant during willSave() dispatch.

Instead, we can defer to doSave(), until after willSave() is called.
This allows overriders to call getSaveCount().

R=reed@google.com,robertphillips@google.com

Review URL: https://codereview.chromium.org/1113603002

src/core/SkCanvas.cpp

index 0bd9eb3..514a454 100644 (file)
@@ -801,7 +801,6 @@ void SkCanvas::updateDeviceCMCache() {
 
 void SkCanvas::checkForDeferredSave() {
     if (fMCRec->fDeferredSaveCount > 0) {
-        fMCRec->fDeferredSaveCount -= 1;
         this->doSave();
     }
 }
@@ -830,6 +829,9 @@ int SkCanvas::save() {
 
 void SkCanvas::doSave() {
     this->willSave();
+
+    SkASSERT(fMCRec->fDeferredSaveCount > 0);
+    fMCRec->fDeferredSaveCount -= 1;
     this->internalSave();
 }