Chromium Code Reviews| Index: include/core/SkMallocPixelRef.h |
| diff --git a/include/core/SkMallocPixelRef.h b/include/core/SkMallocPixelRef.h |
| index 100a15d90abb4ca55b30aa9af47e5ce17f18fa67..90be8c2e183c4ae75a19ea3207bcf45985c17e0b 100644 |
| --- a/include/core/SkMallocPixelRef.h |
| +++ b/include/core/SkMallocPixelRef.h |
| @@ -17,33 +17,60 @@ |
| */ |
| class SkMallocPixelRef : public SkPixelRef { |
| public: |
| - /** Allocate the specified buffer for pixels. The memory is freed when the |
| - last owner of this pixelref is gone. If addr is NULL, sk_malloc_throw() |
| - is called to allocate it. |
| + /** |
| + * Return a new SkMallocPixelRef with the provided pixel storage, rowBytes, |
| + * and optional colortable. The caller is responsible for managing the |
| + * lifetime of the pixel storage buffer, as the pixelref will not try |
| + * to delete the storage. |
| + * |
| + * This pixelref will ref() the specified colortable (if not NULL). |
| + * |
| + * Returns NULL on failure. |
| */ |
| - SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable, bool ownPixels = true); |
| - virtual ~SkMallocPixelRef(); |
| + static SkMallocPixelRef* NewDirect(const SkImageInfo&, void* addr, |
| + size_t rowBytes, SkColorTable*); |
| + |
| + /** |
| + * Return a new SkMallocPixelRef, automatically allocating storage for the |
| + * pixels. If rowBytes are 0, an optimal value will be chosen automatically. |
| + * If rowBytes is > 0, then it will be respected, or NULL will be returned |
| + * if rowBytes is invalid for the specified info. |
| + * |
| + * This pixelref will ref() the specified colortable (if not NULL). |
| + * |
| + * Returns NULL on failure. |
| + */ |
| + static SkMallocPixelRef* NewAllocate(const SkImageInfo& info, |
| + size_t rowBytes, SkColorTable*); |
| void* getAddr() const { return fStorage; } |
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMallocPixelRef) |
| protected: |
| - // overrides from SkPixelRef |
| - virtual void* onLockPixels(SkColorTable**); |
| - virtual void onUnlockPixels(); |
| - |
| - SkMallocPixelRef(SkFlattenableReadBuffer& buffer); |
| + virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; |
| + virtual void onUnlockPixels() SK_OVERRIDE; |
| virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; |
| + virtual size_t getAllocatedSizeInBytes() const SK_OVERRIDE; |
|
scroggo
2013/12/06 14:50:33
I don't like that this returns something that may
reed1
2013/12/06 15:48:46
I agree. This virtual was not added as part of thi
scroggo
2013/12/06 15:55:20
Haha - the danger of looking at the changes since
|
| - // Returns the allocation size for the pixels |
| - virtual size_t getAllocatedSizeInBytes() const SK_OVERRIDE { return fSize; } |
| + SkMallocPixelRef(SkFlattenableReadBuffer& buffer); |
| + SkMallocPixelRef(const SkImageInfo&, void* addr, size_t rb, SkColorTable*, |
| + bool ownsPixels); |
| + virtual ~SkMallocPixelRef(); |
| private: |
| - void* fStorage; |
| - size_t fSize; |
| - SkColorTable* fCTable; |
| - bool fOwnPixels; |
| + void* fStorage; |
| + SkColorTable* fCTable; |
| + size_t fRB; |
| + const bool fOwnPixels; |
| + |
| + size_t computeMinSize() const { |
|
scroggo
2013/12/06 14:50:33
Is this function needed?
reed1
2013/12/06 15:48:46
It is called twice, but I may be able to call the
|
| + const SkImageInfo& info = this->info(); |
| + if (info.fHeight == 0) { |
| + return 0; |
| + } |
| + return (info.fHeight - 1) * fRB + info.minRowBytes(); |
| + } |
| typedef SkPixelRef INHERITED; |
| }; |