Index: src/core/SkPicturePlayback.cpp |
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp |
index 8b8c6b0862dad7bb6d0bc643de3b09b0abca4fd7..1086911ababc72fca494c6c9409a30db36806870 100644 |
--- a/src/core/SkPicturePlayback.cpp |
+++ b/src/core/SkPicturePlayback.cpp |
@@ -707,7 +707,8 @@ void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) |
#endif |
#ifdef SPEW_CLIP_SKIPPING |
- SkipClipRec skipRect, skipRRect, skipRegion, skipPath; |
+ SkipClipRec skipRect, skipRRect, skipRegion, skipPath, skipCull; |
+ unsigned opCount = 0; |
caryclark
2014/02/14 14:54:35
nit : this is fine, but seeing unsigned instead of
f(malita)
2014/02/20 02:37:26
Will update.
|
#endif |
#ifdef SK_BUILD_FOR_ANDROID |
@@ -772,6 +773,10 @@ void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) |
} |
#endif |
+#ifdef SPEW_CLIP_SKIPPING |
+ opCount++; |
+#endif |
+ |
size_t curOffset = reader.offset(); |
uint32_t size; |
DrawType op = read_op_and_size(&reader, &size); |
@@ -867,6 +872,22 @@ void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) |
reader.setOffset(offsetToRestore); |
} |
} break; |
+ case PUSH_CULL: { |
+ const SkRect& cullRect = reader.skipT<SkRect>(); |
+ size_t skipOffset = reader.readInt(); |
+ // FIXME: use inlineable quickRejectNoCheck() |
caryclark
2014/02/14 14:54:35
is there a bug associated with this FIXME?
f(malita)
2014/02/20 02:37:26
Not yet. I recall that at some point quickReject()
|
+ if (skipOffset && canvas.quickReject(cullRect)) { |
+#ifdef SPEW_CLIP_SKIPPING |
+ skipCull.recordSkip(skipOffset - reader.offset()); |
+#endif |
+ reader.setOffset(skipOffset); |
+ } else { |
+ canvas.pushCull(cullRect); |
+ } |
+ } break; |
+ case POP_CULL: |
+ canvas.popCull(); |
+ break; |
case CONCAT: { |
SkMatrix matrix; |
this->getMatrix(reader, &matrix); |
@@ -1117,10 +1138,12 @@ void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) |
#ifdef SPEW_CLIP_SKIPPING |
{ |
- size_t size = skipRect.fSize + skipRRect.fSize + skipPath.fSize + skipRegion.fSize; |
- SkDebugf("--- Clip skips %d%% rect:%d rrect:%d path:%d rgn:%d\n", |
+ size_t size = skipRect.fSize + skipRRect.fSize + skipPath.fSize + skipRegion.fSize + |
+ skipCull.fSize; |
+ SkDebugf("--- Clip skips %d%% rect:%d rrect:%d path:%d rgn:%d cull:%d\n", |
size * 100 / reader.offset(), skipRect.fCount, skipRRect.fCount, |
- skipPath.fCount, skipRegion.fCount); |
+ skipPath.fCount, skipRegion.fCount, skipCull.fCount); |
+ SkDebugf("--- Draw ops: %u\n", opCount); |
} |
#endif |
// this->dumpSize(); |