Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2010 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 
      8 #ifndef GrAllocPool_DEFINED
      9 #define GrAllocPool_DEFINED
     10 
     11 #include "SkTypes.h"
     12 
     13 class GrAllocPool : SkNoncopyable {
     14 public:
     15     GrAllocPool(size_t blockSize = 0);
     16     ~GrAllocPool();
     17 
     18     /**
     19      *  Frees all blocks that have been allocated with alloc().
     20      */
     21     void reset();
     22 
     23     /**
     24      *  Returns a block of memory bytes size big. This address must not be
     25      *  passed to realloc/free/delete or any other function that assumes the
     26      *  address was allocated by malloc or new (because it hasn't).
     27      */
     28     void* alloc(size_t bytes);
     29 
     30     /**
     31      * Releases the most recently allocated bytes back to allocpool.
     32      */
     33     void release(size_t bytes);
     34 
     35 private:
     36     struct Block;
     37 
     38     Block*  fBlock;
     39     size_t  fMinBlockSize;
     40 
     41 #ifdef SK_DEBUG
     42     int fBlocksAllocated;
     43     void validate() const;
     44 #else
     45     void validate() const {}
     46 #endif
     47 };
     48 
     49 template <typename T> class GrTAllocPool {
     50 public:
     51     GrTAllocPool(int count) : fPool(count * sizeof(T)) {}
     52 
     53     void reset() { fPool.reset(); }
     54     T* alloc() { return (T*)fPool.alloc(sizeof(T)); }
     55 
     56 private:
     57     GrAllocPool fPool;
     58 };
     59 
     60 #endif
     61