1 /* 2 * Copyright 2013 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 SkDiscardablePixelRef_DEFINED 9 #define SkDiscardablePixelRef_DEFINED 10 11 #include "SkDiscardableMemory.h" 12 #include "SkImageGenerator.h" 13 #include "SkImageInfo.h" 14 #include "SkPixelRef.h" 15 16 /** 17 * A PixelRef backed by SkDiscardableMemory, with the ability to 18 * re-generate the pixels (via a SkImageGenerator) if the DM is 19 * purged. 20 */ 21 class SkDiscardablePixelRef : public SkPixelRef { 22 public: 23 SK_DECLARE_INST_COUNT(SkDiscardablePixelRef) 24 25 protected: 26 ~SkDiscardablePixelRef(); 27 28 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; 29 virtual void onUnlockPixels() SK_OVERRIDE; onLockPixelsAreWritable()30 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; } 31 onRefEncodedData()32 virtual SkData* onRefEncodedData() SK_OVERRIDE { 33 return fGenerator->refEncodedData(); 34 } 35 36 private: 37 SkImageGenerator* const fGenerator; 38 SkDiscardableMemory::Factory* const fDMFactory; 39 const size_t fRowBytes; 40 // These const members should not change over the life of the 41 // PixelRef, since the SkBitmap doesn't expect them to change. 42 43 SkDiscardableMemory* fDiscardableMemory; 44 SkAutoTUnref<SkColorTable> fCTable; 45 46 /* Takes ownership of SkImageGenerator. */ 47 SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*, 48 size_t rowBytes, 49 SkDiscardableMemory::Factory* factory); 50 onGetYUV8Planes(SkISize sizes[3],void * planes[3],size_t rowBytes[3],SkYUVColorSpace * colorSpace)51 virtual bool onGetYUV8Planes(SkISize sizes[3], 52 void* planes[3], 53 size_t rowBytes[3], 54 SkYUVColorSpace* colorSpace) SK_OVERRIDE { 55 return fGenerator->getYUV8Planes(sizes, planes, rowBytes, colorSpace); 56 } 57 58 friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, SkBitmap*, 59 SkDiscardableMemory::Factory*); 60 61 typedef SkPixelRef INHERITED; 62 }; 63 64 #endif // SkDiscardablePixelRef_DEFINED 65