Chromium Code Reviews| Index: src/core/SkPicturePlayback.cpp |
| diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp |
| index b546d397c04617570c7534c1ed338f451abc0af0..abaaa85baf3bb98218674d05ded83ce36bdf5269 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; |
| + int opCount = 0; |
| #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,21 @@ void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) |
| reader.setOffset(offsetToRestore); |
| } |
| } break; |
| + case PUSH_CULL: { |
| + const SkRect& cullRect = reader.skipT<SkRect>(); |
|
robertphillips
2014/02/25 15:58:41
offsetToRestore to match other sites?
|
| + size_t skipOffset = reader.readInt(); |
| + 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); |
| @@ -1124,10 +1144,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); |
|
robertphillips
2014/02/25 15:58:41
Draw ops -> Total ops?
|
| + SkDebugf("--- Draw ops: %d\n", opCount); |
| } |
| #endif |
| // this->dumpSize(); |