add optoinal bytesRead argument (output) to playback()
authorreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 23 May 2011 13:54:24 +0000 (13:54 +0000)
committerreed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Mon, 23 May 2011 13:54:24 +0000 (13:54 +0000)
git-svn-id: http://skia.googlecode.com/svn/trunk@1400 2bbb7eff-a529-9590-31e7-b0007b416f81

include/pipe/SkGPipe.h
src/pipe/SkGPipeRead.cpp

index 0ca66ab..897766f 100644 (file)
@@ -36,7 +36,7 @@ public:
 
     // data must be 4-byte aligned
     // length must be a multiple of 4
-    Status playback(const void* data, size_t length);
+    Status playback(const void* data, size_t length, size_t* bytesRead = NULL);
 
 private:
     SkCanvas*           fCanvas;
index c72aa57..591b7e9 100644 (file)
@@ -526,7 +526,8 @@ SkGPipeReader::~SkGPipeReader() {
     delete fState;
 }
 
-SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length) {
+SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length,
+                                              size_t* bytesRead) {
     if (NULL == fCanvas) {
         return kError_Status;
     }
@@ -540,6 +541,7 @@ SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length) {
     const ReadProc* table = gReadTable;
     SkFlattenableReadBuffer reader(data, length);
     SkCanvas* canvas = fCanvas;
+    Status status = kEOF_Status;
 
     fState->setReader(&reader);
     while (!reader.eof()) {
@@ -549,14 +551,20 @@ SkGPipeReader::Status SkGPipeReader::playback(const void* data, size_t length) {
         
         if (op >= SK_ARRAY_COUNT(gReadTable)) {
             SkDebugf("---- bad op during GPipeState::playback\n");
-            return kError_Status;
+            status = kError_Status;
+            break;
         }
         if (kDone_DrawOp == op) {
-            return kDone_Status;
+            status = kDone_Status;
+            break;
         }
         table[op](canvas, &reader, op32, fState);
     }
-    return kEOF_Status;
+
+    if (bytesRead) {
+        *bytesRead = reader.size();
+    }
+    return status;
 }