summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp')
-rw-r--r--chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp b/chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp
new file mode 100644
index 00000000000..3e4ded5cf74
--- /dev/null
+++ b/chromium/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+#include "SkNetPipeController.h"
+
+SkNetPipeController::SkNetPipeController(SkCanvas* target) : fReader(target) {
+ fBlock = NULL;
+ fBlockSize = fBytesWritten = 0;
+ fPlayback = true;
+ fStatus = SkGPipeReader::kDone_Status;
+ fTotalWritten = 0;
+ fAtomsWritten = 0;
+}
+SkNetPipeController::~SkNetPipeController() {
+ sk_free(fBlock);
+}
+
+int SkNetPipeController::writeToSocket(SkSocket* sockfd, SkSocket::DataType type) {
+ if (NULL != sockfd && fTotalWritten > 4)
+ return sockfd->writePacket(fBlock, fBytesWritten, type);
+ else
+ return -1;
+}
+
+void* SkNetPipeController::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 SkNetPipeController::notifyWritten(size_t bytes) {
+ SkASSERT(fBytesWritten + bytes <= fBlockSize);
+
+ if (fPlayback) {
+ fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
+ }
+
+ SkASSERT(SkGPipeReader::kError_Status != fStatus);
+ fBytesWritten += bytes;
+ fTotalWritten += bytes;
+
+ fAtomsWritten += 1;
+}