Chromium Code Reviews| 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(); |