Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Unified Diff: src/core/SkPicturePlayback.cpp

Issue 374833006: Split SkPictureRangePlayback out of SkPicturePlayback (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Addressed code review comments Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkPicturePlayback.h ('k') | src/core/SkPictureRangePlayback.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkPicturePlayback.cpp
diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp
index 7d9d53bf6bc6aebbc261aa503b797ffbc8f32d8e..d8ed082690e310ca924b955c4f0bd4ae285ee22a 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -56,28 +56,14 @@ SkPicturePlayback::PlaybackReplacements::lookupByStart(size_t start) {
return NULL;
}
-
-class SkAutoResetOpID {
-public:
- SkAutoResetOpID(SkPicturePlayback* playback) : fPlayback(playback) { }
- ~SkAutoResetOpID() {
- if (NULL != fPlayback) {
- fPlayback->resetOpID();
- }
- }
-
-private:
- SkPicturePlayback* fPlayback;
-};
-
/*
-* Read the next op code and chunk size from 'reader'. The returned size
-* is the entire size of the chunk (including the opcode). Thus, the
-* offset just prior to calling read_op_and_size + 'size' is the offset
-* to the next chunk's op code. This also means that the size of a chunk
-* with no arguments (just an opcode) will be 4.
-*/
-static DrawType read_op_and_size(SkReader32* reader, uint32_t* size) {
+ * Read the next op code and chunk size from 'reader'. The returned size
+ * is the entire size of the chunk (including the opcode). Thus, the
+ * offset just prior to calling ReadOpAndSize + 'size' is the offset
+ * to the next chunk's op code. This also means that the size of a chunk
+ * with no arguments (just an opcode) will be 4.
+ */
+DrawType SkPicturePlayback::ReadOpAndSize(SkReader32* reader, uint32_t* size) {
uint32_t temp = reader->readInt();
uint32_t op;
if (((uint8_t)temp) == temp) {
@@ -121,7 +107,7 @@ static SkBitmap shallow_copy(const SkBitmap& bitmap) {
}
void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) {
- SkAutoResetOpID aroi(this);
+ AutoResetOpID aroi(this);
SkASSERT(0 == fCurOffset);
// kDrawComplete will be the signal that we have reached the end of
@@ -132,24 +118,19 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
SkAutoTDelete<const SkPicture::OperationList> activeOpsList;
const SkTDArray<void*>* activeOps = NULL;
- // When draw limits are enabled (i.e., 0 != fStart || 0 != fStop) the state
- // tree isn't used to pick and choose the draw operations
- if (0 == fStart && 0 == fStop) {
- if (fUseBBH && NULL != fPictureData->fStateTree && NULL != fPictureData->fBoundingHierarchy) {
- SkRect clipBounds;
- if (canvas->getClipBounds(&clipBounds)) {
- SkIRect query;
- clipBounds.roundOut(&query);
-
- activeOpsList.reset(fPictureData->getActiveOps(query));
- if (NULL != activeOpsList.get()) {
- if (0 == activeOpsList->numOps()) {
- return; // nothing to draw
- }
+ if (fUseBBH && NULL != fPictureData->fStateTree && NULL != fPictureData->fBoundingHierarchy) {
+ SkRect clipBounds;
+ if (canvas->getClipBounds(&clipBounds)) {
+ SkIRect query;
+ clipBounds.roundOut(&query);
- // Since the opList is valid we know it is our derived class
- activeOps = &(activeOpsList.get()->fOps);
+ activeOpsList.reset(fPictureData->getActiveOps(query));
+ if (NULL != activeOpsList.get()) {
+ if (0 == activeOpsList->numOps()) {
+ return; // nothing to draw
}
+
+ activeOps = &(activeOpsList.get()->fOps);
}
}
}
@@ -158,14 +139,6 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
SkPictureStateTree::Iterator() :
fPictureData->fStateTree->getIterator(*activeOps, canvas);
- if (0 != fStart || 0 != fStop) {
- reader.setOffset(fStart);
- uint32_t size;
- SkDEBUGCODE(DrawType op = ) read_op_and_size(&reader, &size);
- SkASSERT(SAVE_LAYER == op);
- reader.setOffset(fStart + size);
- }
-
if (it.isValid()) {
uint32_t skipTo = it.nextDraw();
if (kDrawComplete == skipTo) {
@@ -188,16 +161,6 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
return;
}
- if (0 != fStart || 0 != fStop) {
- size_t offset = reader.offset();
- if (offset >= fStop) {
- uint32_t size;
- SkDEBUGCODE(DrawType op = ) read_op_and_size(&reader, &size);
- SkASSERT(RESTORE == op);
- return;
- }
- }
-
if (NULL != fReplacements) {
// Potentially replace a block of operations with a single drawBitmap call
SkPicturePlayback::PlaybackReplacements::ReplacementInfo* temp =
@@ -236,7 +199,7 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
if (skipTo <= temp->fStop) {
reader.setOffset(skipTo);
uint32_t size;
- DrawType op = read_op_and_size(&reader, &size);
+ DrawType op = ReadOpAndSize(&reader, &size);
// Since we are relying on the normal SkPictureStateTree
// playback we need to convert any nested saveLayer calls
// it may issue into saves (so that all its internal
@@ -255,7 +218,7 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
} else {
reader.setOffset(temp->fStop);
uint32_t size;
- SkDEBUGCODE(DrawType op = ) read_op_and_size(&reader, &size);
+ SkDEBUGCODE(DrawType op = ) ReadOpAndSize(&reader, &size);
SkASSERT(RESTORE == op);
}
continue;
@@ -264,7 +227,7 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
fCurOffset = reader.offset();
uint32_t size;
- DrawType op = read_op_and_size(&reader, &size);
+ DrawType op = ReadOpAndSize(&reader, &size);
size_t skipTo = 0;
if (NOOP == op) {
// NOOPs are to be ignored - do not propagate them any further
« no previous file with comments | « src/core/SkPicturePlayback.h ('k') | src/core/SkPictureRangePlayback.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698