update pipe test
git-svn-id: http://skia.googlecode.com/svn/trunk@1238 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 113a8ed..724602d 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -705,9 +705,6 @@
}
SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) {
- SkIPoint viewport;
- bool alreadyGPU = canvas->getViewport(&viewport);
-
if (kGPU_CanvasType != fCanvasType) {
#ifdef SK_SUPPORT_GL
detachGL();
@@ -723,7 +720,7 @@
canvas = fPicture->beginRecording(9999, 9999);
break;
case kGPU_CanvasType: {
- if (!alreadyGPU && make3DReady()) {
+ if (make3DReady()) {
SkDevice* device = canvas->getDevice();
const SkBitmap& bitmap = device->accessBitmap(true);
@@ -1338,35 +1335,77 @@
}
#define TEST_GPIPEx
+
#ifdef TEST_GPIPE
#include "SkGPipe.h"
+
+class SimplePC : public SkGPipeController {
+public:
+ SimplePC(SkCanvas* target);
+ ~SimplePC();
+
+ virtual void* requestBlock(size_t minRequest, size_t* actual);
+ virtual void notifyWritten(size_t bytes);
+
+private:
+ SkGPipeReader fReader;
+ void* fBlock;
+ size_t fBlockSize;
+ size_t fBytesWritten;
+ SkGPipeReader::Status fStatus;
+
+ size_t fTotalWritten;
+};
+
+SimplePC::SimplePC(SkCanvas* target) : fReader(target) {
+ fBlock = NULL;
+ fBlockSize = fBytesWritten = 0;
+ fStatus = SkGPipeReader::kDone_Status;
+ fTotalWritten = 0;
+}
+
+SimplePC::~SimplePC() {
+// SkASSERT(SkGPipeReader::kDone_Status == fStatus);
+ sk_free(fBlock);
+
+ SkDebugf("--- %d bytes written to pipe, status %d\n", fTotalWritten, fStatus);
+}
+
+void* SimplePC::requestBlock(size_t minRequest, size_t* actual) {
+ sk_free(fBlock);
+
+ fBlockSize = minRequest * 4;
+ fBlock = sk_malloc_throw(fBlockSize);
+ fBytesWritten = 0;
+ *actual = fBlockSize;
+ return fBlock;
+}
+
+void SimplePC::notifyWritten(size_t bytes) {
+ SkASSERT(fBytesWritten + bytes <= fBlockSize);
+
+ fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
+ SkASSERT(SkGPipeReader::kError_Status != fStatus);
+ fBytesWritten += bytes;
+ fTotalWritten += bytes;
+}
+
#endif
+
void SampleView::onDraw(SkCanvas* canvas) {
this->onDrawBackground(canvas);
#ifdef TEST_GPIPE
+ SimplePC controller(canvas);
SkGPipeWriter writer;
- SkCanvas* origCanvas = canvas;
- canvas = writer.startRecording();
+ canvas = writer.startRecording(&controller);
#endif
for (int i = 0; i < fRepeatCount; i++) {
SkAutoCanvasRestore acr(canvas, true);
this->onDrawContent(canvas);
}
-
-#ifdef TEST_GPIPE
- writer.endRecording();
-
- size_t size = writer.flatten(NULL);
- SkAutoMalloc storage(size);
- writer.flatten(storage.get());
-
- SkGPipeReader reader(origCanvas);
- SkGPipeReader::Status status = reader.playback(storage.get(), size);
- SkASSERT(SkGPipeReader::kDone_Status == status);
-#endif
}
void SampleView::onDrawBackground(SkCanvas* canvas) {