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

Unified Diff: src/core/SkPicturePlayback.cpp

Issue 617953002: Strip old backend recording down to essentials (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: debug-only Created 6 years, 3 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/SkPictureRecord.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 308ce9ec3fa2cd906d0f662f6d0ff57969a7fc00..661115e41a3c67e62f64ced97537dd037f75d573 100644
--- a/src/core/SkPicturePlayback.cpp
+++ b/src/core/SkPicturePlayback.cpp
@@ -10,7 +10,6 @@
#include "SkPictureData.h"
#include "SkPicturePlayback.h"
#include "SkPictureRecord.h"
-#include "SkPictureStateTree.h"
#include "SkReader32.h"
#include "SkTextBlob.h"
#include "SkTDArray.h"
@@ -66,84 +65,12 @@ static SkBitmap shallow_copy(const SkBitmap& bitmap) {
return bitmap;
}
-const SkPicture::OperationList* SkPicturePlayback::getActiveOps(const SkCanvas* canvas) {
-
- if (fUseBBH) {
- SkRect clipBounds;
- if (canvas->getClipBounds(&clipBounds)) {
- return fPictureData->getActiveOps(clipBounds);
- }
- }
-
- return NULL;
-}
-
-// Initialize the state tree iterator. Return false if there is nothing left to draw.
-bool SkPicturePlayback::initIterator(SkPictureStateTree::Iterator* iter,
- SkCanvas* canvas,
- const SkPicture::OperationList *activeOpsList) {
-
- if (activeOpsList) {
- if (0 == activeOpsList->numOps()) {
- return false; // nothing to draw
- }
-
- fPictureData->initIterator(iter, activeOpsList->fOps, canvas);
- }
-
- return true;
-}
-
-// If 'iter' is valid use it to skip forward through the picture.
-void SkPicturePlayback::StepIterator(SkPictureStateTree::Iterator* iter, SkReader32* reader) {
- if (iter->isValid()) {
- uint32_t skipTo = iter->nextDraw();
- if (SkPictureStateTree::Iterator::kDrawComplete == skipTo) {
- reader->setOffset(reader->size()); // skip to end
- } else {
- reader->setOffset(skipTo);
- }
- }
-}
-
-// Update the iterator and state tree to catch up with the skipped ops.
-void SkPicturePlayback::SkipIterTo(SkPictureStateTree::Iterator* iter,
- SkReader32* reader,
- uint32_t skipTo) {
- SkASSERT(skipTo <= reader->size());
- SkASSERT(reader->offset() <= skipTo); // should only be skipping forward
-
- if (iter->isValid()) {
- // If using a bounding box hierarchy, advance the state tree
- // iterator until at or after skipTo
- uint32_t adjustedSkipTo;
- do {
- adjustedSkipTo = iter->nextDraw();
- } while (adjustedSkipTo < skipTo);
- skipTo = adjustedSkipTo;
- }
- if (SkPictureStateTree::Iterator::kDrawComplete == skipTo) {
- reader->setOffset(reader->size()); // skip to end
- } else {
- reader->setOffset(skipTo);
- }
-}
-
void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback) {
AutoResetOpID aroi(this);
SkASSERT(0 == fCurOffset);
- SkAutoTDelete<const SkPicture::OperationList> activeOpsList(this->getActiveOps(canvas));
- SkPictureStateTree::Iterator it;
-
- if (!this->initIterator(&it, canvas, activeOpsList.get())) {
- return; // nothing to draw
- }
-
SkReader32 reader(fPictureData->opData()->bytes(), fPictureData->opData()->size());
- StepIterator(&it, &reader);
-
// Record this, so we can concat w/ it if we encounter a setMatrix()
SkMatrix initialMatrix = canvas->getTotalMatrix();
@@ -157,15 +84,8 @@ void SkPicturePlayback::draw(SkCanvas* canvas, SkDrawPictureCallback* callback)
fCurOffset = reader.offset();
uint32_t size;
DrawType op = ReadOpAndSize(&reader, &size);
- if (NOOP == op) {
- // NOOPs are to be ignored - do not propagate them any further
- SkipIterTo(&it, &reader, fCurOffset + size);
- continue;
- }
this->handleOp(&reader, op, size, canvas, initialMatrix);
-
- StepIterator(&it, &reader);
}
}
@@ -175,6 +95,10 @@ void SkPicturePlayback::handleOp(SkReader32* reader,
SkCanvas* canvas,
const SkMatrix& initialMatrix) {
switch (op) {
+ case NOOP: {
+ SkASSERT(size >= 4);
+ reader->skip(size - 4);
+ } break;
case CLIP_PATH: {
const SkPath& path = fPictureData->getPath(reader);
uint32_t packed = reader->readInt();
@@ -518,7 +442,7 @@ void SkPicturePlayback::handleOp(SkReader32* reader,
canvas->translate(dx, dy);
} break;
default:
- SkASSERT(0);
+ SkASSERTF(false, "Unknown draw type: %d", op);
}
}
« no previous file with comments | « src/core/SkPicturePlayback.h ('k') | src/core/SkPictureRecord.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698