Home | History | Annotate | Download | only in DrawingBoard
      1 /*
      2  * Copyright 2011 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 #include "SkNetPipeController.h"
      8 
      9 SkNetPipeController::SkNetPipeController(SkCanvas* target) : fReader(target) {
     10     fBlock = NULL;
     11     fBlockSize = fBytesWritten = 0;
     12     fPlayback = true;
     13     fStatus = SkGPipeReader::kDone_Status;
     14     fTotalWritten = 0;
     15     fAtomsWritten = 0;
     16 }
     17 SkNetPipeController::~SkNetPipeController() {
     18     sk_free(fBlock);
     19 }
     20 
     21 int SkNetPipeController::writeToSocket(SkSocket* sockfd, SkSocket::DataType type) {
     22     if (NULL != sockfd && fTotalWritten > 4)
     23         return sockfd->writePacket(fBlock, fBytesWritten, type);
     24     else
     25         return -1;
     26 }
     27 
     28 void* SkNetPipeController::requestBlock(size_t minRequest, size_t* actual) {
     29     sk_free(fBlock);
     30 
     31     fBlockSize = minRequest * 4;
     32     fBlock = sk_malloc_throw(fBlockSize);
     33     fBytesWritten = 0;
     34     *actual = fBlockSize;
     35     return fBlock;
     36 }
     37 
     38 void SkNetPipeController::notifyWritten(size_t bytes) {
     39     SkASSERT(fBytesWritten + bytes <= fBlockSize);
     40 
     41     if (fPlayback) {
     42         fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
     43     }
     44 
     45     SkASSERT(SkGPipeReader::kError_Status != fStatus);
     46     fBytesWritten += bytes;
     47     fTotalWritten += bytes;
     48 
     49     fAtomsWritten += 1;
     50 }
     51