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

Unified Diff: src/core/SkPicturePlayback.cpp

Issue 227603006: hack Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: yet more hackage Created 6 years, 8 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/gpu/GrContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkPicturePlayback.cpp
===================================================================
--- src/core/SkPicturePlayback.cpp (revision 14079)
+++ src/core/SkPicturePlayback.cpp (working copy)
@@ -861,7 +861,30 @@
SkPicturePlayback* fPlayback;
};
-void SkPicturePlayback::draw(SkCanvas& canvas, SkDrawPictureCallback* callback) {
+SkPicturePlayback::Foo* SkPicturePlayback::Bar::lookupStart(size_t start) {
+ for (int i = 0; i < fFoo.count(); ++i) {
+ if (start == fFoo[i].fStart) {
+ return &fFoo[i];
+ }
+ }
+
+ return NULL;
+}
+
+SkPicturePlayback::Foo* SkPicturePlayback::Bar::lookupStop(size_t stop) {
+ for (int i = 0; i < fFoo.count(); ++i) {
+ if (stop == fFoo[i].fStop) {
+ return &fFoo[i];
+ }
+ }
+
+ return NULL;
+}
+
+void SkPicturePlayback::draw(SkCanvas& canvas,
+ int start, int stop,
+ SkDrawPictureCallback* callback,
+ Bar* foo) {
SkAutoResetOpID aroi(this);
SkASSERT(0 == fCurOffset);
@@ -886,20 +909,22 @@
TextContainer text;
const SkTDArray<void*>* activeOps = NULL;
- if (NULL != fStateTree && NULL != fBoundingHierarchy) {
- SkRect clipBounds;
- if (canvas.getClipBounds(&clipBounds)) {
- SkIRect query;
- clipBounds.roundOut(&query);
+ if (start == -1 ) {
+ if (NULL != fStateTree && NULL != fBoundingHierarchy) {
+ SkRect clipBounds;
+ if (canvas.getClipBounds(&clipBounds)) {
+ SkIRect query;
+ clipBounds.roundOut(&query);
- const SkPicture::OperationList& activeOpsList = this->getActiveOps(query);
- if (activeOpsList.valid()) {
- if (0 == activeOpsList.numOps()) {
- return; // nothing to draw
+ const SkPicture::OperationList& activeOpsList = this->getActiveOps(query);
+ if (activeOpsList.valid()) {
+ if (0 == activeOpsList.numOps()) {
+ return; // nothing to draw
+ }
+
+ // Since the opList is valid we know it is our derived class
+ activeOps = &((const CachedOperationList&)activeOpsList).fOps;
}
-
- // Since the opList is valid we know it is our derived class
- activeOps = &((const CachedOperationList&)activeOpsList).fOps;
}
}
}
@@ -908,6 +933,14 @@
SkPictureStateTree::Iterator() :
fStateTree->getIterator(*activeOps, &canvas);
+ if (start != -1) {
+ reader.setOffset(start);
+ uint32_t size;
+ SkDEBUGCODE(DrawType op =) read_op_and_size(&reader, &size);
+ SkASSERT(SAVE_LAYER == op);
+ reader.setOffset(start+size);
+ }
+
if (it.isValid()) {
uint32_t skipTo = it.draw();
if (kDrawComplete == skipTo) {
@@ -940,7 +973,50 @@
return;
}
#endif
+ if (stop != -1) {
+ if (reader.offset() >= (unsigned int) stop) {
+ uint32_t size;
+ SkDEBUGCODE(DrawType op =) read_op_and_size(&reader, &size);
+ SkASSERT(RESTORE == op);
+ return;
+ }
+ }
+ if (NULL != foo) {
+#if 0
+ // replace the saveLayer/restore block with a drawBitmap call
+ SkPicturePlayback::Foo* temp = foo->lookupStart(reader.offset());
+
+ if (NULL != temp) {
+ SkASSERT(NULL != temp->fBM);
+ canvas.drawBitmap(*temp->fBM, temp->fPos.fX, temp->fPos.fY, temp->fPaint);
+
+ reader.setOffset(temp->fStop);
+ uint32_t size;
+ SkDEBUGCODE(DrawType op =) read_op_and_size(&reader, &size);
+ SkASSERT(RESTORE == op);
+ continue;
+ }
+#else
+ // execute the saveLayer/restore block but follow it with a drawBitmap call
+ // This is intended (with conversion of saveLayers to saves) to
+ // separate out the overhead of the saveLayer render target changes
+ // from all the other work
+ SkPicturePlayback::Foo* temp = foo->lookupStop(reader.offset());
+ if (NULL != temp) {
+ SkASSERT(NULL != temp->fBM);
+ uint32_t size;
+ SkDEBUGCODE(DrawType op =) read_op_and_size(&reader, &size);
+ SkASSERT(RESTORE == op);
+
+ canvas.restore();
+
+ canvas.drawBitmap(*temp->fBM, temp->fPos.fX, temp->fPos.fY, temp->fPaint);
+ continue;
+ }
+#endif
+ }
+
#ifdef SPEW_CLIP_SKIPPING
opCount++;
#endif
@@ -1272,9 +1348,16 @@
canvas.save((SkCanvas::SaveFlags) reader.readInt());
break;
case SAVE_LAYER: {
+#if 1
const SkRect* boundsPtr = this->getRectPtr(reader);
const SkPaint* paint = this->getPaint(reader);
canvas.saveLayer(boundsPtr, paint, (SkCanvas::SaveFlags) reader.readInt());
+#else
+ // replace all saveLayers with a save
+ this->getRectPtr(reader);
+ this->getPaint(reader);
+ canvas.save((SkCanvas::SaveFlags) reader.readInt());
+#endif
} break;
case SCALE: {
SkScalar sx = reader.readScalar();
« no previous file with comments | « src/core/SkPicturePlayback.h ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698