Index: src/core/SkPictureRecord.cpp |
diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp |
index 497ce8ec5474606c91adebd3320db111b630ae84..08b69b85271cec5d1ce3de314e5bdd1ec9dafe7b 100644 |
--- a/src/core/SkPictureRecord.cpp |
+++ b/src/core/SkPictureRecord.cpp |
@@ -146,7 +146,7 @@ static inline uint32_t getPaintOffset(DrawType op, uint32_t opSize) { |
return gPaintOffsets[op] * sizeof(uint32_t) + overflow; |
} |
-void SkPictureRecord::onSave(SaveFlags flags) { |
+int SkPictureRecord::save(SaveFlags flags) { |
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE |
fMCMgr.save(flags); |
@@ -156,8 +156,7 @@ void SkPictureRecord::onSave(SaveFlags flags) { |
fRestoreOffsetStack.push(-(int32_t)fWriter.bytesWritten()); |
this->recordSave(flags); |
#endif |
- |
- this->INHERITED::onSave(flags); |
+ return this->INHERITED::save(flags); |
} |
void SkPictureRecord::recordSave(SaveFlags flags) { |
@@ -169,11 +168,12 @@ void SkPictureRecord::recordSave(SaveFlags flags) { |
this->validate(initialOffset, size); |
} |
-bool SkPictureRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint, |
- SaveFlags flags) { |
+int SkPictureRecord::saveLayer(const SkRect* bounds, const SkPaint* paint, |
+ SaveFlags flags) { |
+ int count; |
#ifdef SK_COLLAPSE_MATRIX_CLIP_STATE |
- fMCMgr.saveLayer(bounds, paint, flags); |
+ count = fMCMgr.saveLayer(bounds, paint, flags); |
#else |
// record the offset to us, making it non-positive to distinguish a save |
// from a clip entry. |
@@ -184,13 +184,15 @@ bool SkPictureRecord::onSaveLayer(const SkRect* bounds, const SkPaint* paint, |
} |
#endif |
- this->INHERITED::onSaveLayer(bounds, paint, flags); |
- /* No need for a (potentially very big) layer which we don't actually need |
+ /* Don't actually call INHERITED::saveLayer, because that will try to allocate |
+ an offscreen device (potentially very big) which we don't actually need |
at this time (and may not be able to afford since during record our |
clip starts out the size of the picture, which is often much larger |
than the size of the actual device we'll use during playback). |
*/ |
- return false; |
+ count = this->INHERITED::save(flags); |
+ this->clipRectBounds(bounds, flags, NULL); |
+ return count; |
} |
void SkPictureRecord::recordSaveLayer(const SkRect* bounds, const SkPaint* paint, |
@@ -603,7 +605,7 @@ static void apply_optimization_to_bbh(PictureRecordOptType opt, SkPictureStateTr |
} |
} |
-void SkPictureRecord::onRestore() { |
+void SkPictureRecord::restore() { |
// FIXME: SkDeferredCanvas needs to be refactored to respect |
// save/restore balancing so that the following test can be |
// turned on permanently. |
@@ -651,7 +653,7 @@ void SkPictureRecord::onRestore() { |
fRestoreOffsetStack.pop(); |
#endif |
- this->INHERITED::onRestore(); |
+ return this->INHERITED::restore(); |
} |
void SkPictureRecord::recordRestore(bool fillInSkips) { |