SkDiscardablePixelRef.h revision f1ce05288a8fee6e691c3dff5db9dcd47818060f
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 * Since SkColorTable is reference-counted, we do not support indexed 22 * color with this class; there would be no way for the discardable 23 * memory system to unref the color table. 24 */ 25class SkDiscardablePixelRef : public SkPixelRef { 26public: 27 SK_DECLARE_UNFLATTENABLE_OBJECT() 28 29protected: 30 ~SkDiscardablePixelRef(); 31 32 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; 33 virtual void onUnlockPixels() SK_OVERRIDE; 34 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; } 35 36 virtual SkData* onRefEncodedData() SK_OVERRIDE { 37 return fGenerator->refEncodedData(); 38 } 39 40private: 41 SkImageGenerator* const fGenerator; 42 SkDiscardableMemory::Factory* const fDMFactory; 43 const size_t fRowBytes; 44 // These const members should not change over the life of the 45 // PixelRef, since the SkBitmap doesn't expect them to change. 46 47 SkDiscardableMemory* fDiscardableMemory; 48 49 /* Takes ownership of SkImageGenerator. */ 50 SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*, 51 size_t rowBytes, 52 SkDiscardableMemory::Factory* factory); 53 54 friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, 55 SkBitmap*, 56 SkDiscardableMemory::Factory*); 57 58 typedef SkPixelRef INHERITED; 59}; 60 61#endif // SkDiscardablePixelRef_DEFINED 62