track bounds of top-level control ops
We don't need an explicit save-restore block to determine the bounds of
top-level control operations... the implicit save-restore that all
picutres have should logically work the same way.
The commented test failed before this and passes now.
Bug: skia:7735
Change-Id: Ibd31a3a9b0b48042ab3869a6bb57bc8d8bb78c09
Reviewed-on: https://skia-review.googlesource.com/126460
Commit-Queue: Mike Klein <mtklein@chromium.org>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Mike Klein <mtklein@chromium.org>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp
index 37899e8..f712c0e 100644
--- a/src/core/SkRecordDraw.cpp
+++ b/src/core/SkRecordDraw.cpp
@@ -167,6 +167,9 @@
, fCullRect(cullRect)
, fBounds(bounds) {
fCTM = SkMatrix::I();
+
+ // We push an extra save block to track the bounds of any top-level control operations.
+ fSaveStack.push({ 0, Bounds::MakeEmpty(), nullptr, fCTM });
}
void cleanUp() {
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
index f01f0fb..da8543c 100644
--- a/tests/PictureBBHTest.cpp
+++ b/tests/PictureBBHTest.cpp
@@ -124,8 +124,7 @@
REPORTER_ASSERT(r, pic->cullRect() == (SkRect{-20,-20,-10,-10}));
}
- // TODO: we should also get the same results without the explicit save/restore
- if (0) {
+ {
auto canvas = recorder.beginRecording(cull, &factory);
canvas->clipRect(cull);
canvas->drawRect({-20,-20,-10,-10}, SkPaint{});