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 0bd9eb357944bf4de88f101f68382cbf68ecab07..514a45460c23c82c35073686cfd15a522a188514 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();
 }