Update SkCanvas::fSaveCount in AutoLayerForImageFilter
It is up to the caller of SkCanvas::internalSaveLayer and
SkCanvas::internalRestore properly track SkCanvas::fSaveCount. The
AutoLayerForImageFilter class did not update these, so any attempt to
save a layer when it is active would potentially restore incorrectly.
Bug: chromium:1292419
Change-Id: Ic64c899d6da99c6c8e6848081379e7cbb4d37fa8
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/503488
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 538eae3..f84b1a5 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -328,6 +328,7 @@
rawBounds = &fPaint.computeFastBounds(*rawBounds, &storage);
}
+ canvas->fSaveCount += 1;
(void)canvas->internalSaveLayer(SkCanvas::SaveLayerRec(rawBounds, &restorePaint),
SkCanvas::kFullLayer_SaveLayerStrategy);
fTempLayerForImageFilter = true;
@@ -341,6 +342,7 @@
~AutoLayerForImageFilter() {
if (fTempLayerForImageFilter) {
+ fCanvas->fSaveCount -= 1;
fCanvas->internalRestore();
}
SkASSERT(fCanvas->getSaveCount() == fSaveCount);