diff options
author | yangsu@google.com <yangsu@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-08-08 15:12:05 +0000 |
---|---|---|
committer | yangsu@google.com <yangsu@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-08-08 15:12:05 +0000 |
commit | f3493f0e1f92a8a284adb93ecbf350401e1c7423 (patch) | |
tree | 6a2e7b99bbcbf566b184b8789c4452ee175f9ff1 /experimental/DrawingBoard/SkNetPipeController.cpp | |
parent | 0168afc7196fe82da8af230c93c56f3035d54d2b (diff) |
iOS/Cocoa SampleApp, Drawingboard, and Networking updates
http://codereview.appspot.com/4843041/
http://codereview.appspot.com/4826061/
http://codereview.appspot.com/4832044/
http://codereview.appspot.com/4798055/
git-svn-id: http://skia.googlecode.com/svn/trunk@2058 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'experimental/DrawingBoard/SkNetPipeController.cpp')
-rw-r--r-- | experimental/DrawingBoard/SkNetPipeController.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/experimental/DrawingBoard/SkNetPipeController.cpp b/experimental/DrawingBoard/SkNetPipeController.cpp new file mode 100644 index 0000000000..01a844b616 --- /dev/null +++ b/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; +}
\ No newline at end of file |