blob: 8b347d83b62826fcc30d86125b75c7312672d714 [file] [log] [blame]
yangsu@google.comc5aeccd2011-07-17 14:42:08 +00001#include "SkNetPipeController.h"
2
3SkNetPipeController::SkNetPipeController(SkCanvas* target) : fReader(target) {
4 fBlock = NULL;
5 fBlockSize = fBytesWritten = 0;
6 fPlayback = true;
7 fStatus = SkGPipeReader::kDone_Status;
8 fTotalWritten = 0;
9 fAtomsWritten = 0;
10}
11SkNetPipeController::~SkNetPipeController() {
12 sk_free(fBlock);
13}
14
15int SkNetPipeController::writeToSocket(SkSocket* sockfd, SkSocket::DataType type) {
16 if (NULL != sockfd && fTotalWritten > 4)
17 return sockfd->writePacket(fBlock, fBytesWritten, type);
18 else
19 return -1;
20}
21
22void* SkNetPipeController::requestBlock(size_t minRequest, size_t* actual) {
23 sk_free(fBlock);
24
25 fBlockSize = minRequest * 4;
26 fBlock = sk_malloc_throw(fBlockSize);
27 fBytesWritten = 0;
28 *actual = fBlockSize;
29 return fBlock;
30}
31
32void SkNetPipeController::notifyWritten(size_t bytes) {
33 SkASSERT(fBytesWritten + bytes <= fBlockSize);
34
35 if (fPlayback) {
36 fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
37 }
38
39 SkASSERT(SkGPipeReader::kError_Status != fStatus);
40 fBytesWritten += bytes;
41 fTotalWritten += bytes;
42
43 fAtomsWritten += 1;
44}