SkDiscardablePixelRef.h revision ba82bd11e2c055f885b2327aa230d2dac8b53f03
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 virtual void* onLockPixels(SkColorTable**) SK_OVERRIDE; 32 virtual void onUnlockPixels() SK_OVERRIDE; 33 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; } 34 35 virtual SkData* onRefEncodedData() SK_OVERRIDE { 36 return fGenerator->refEncodedData(); 37 } 38 39private: 40 SkImageGenerator* const fGenerator; 41 SkDiscardableMemory::Factory* const fDMFactory; 42 const size_t fRowBytes; 43 // These const members should not change over the life of the 44 // PixelRef, since the SkBitmap doesn't expect them to change. 45 46 SkDiscardableMemory* fDiscardableMemory; 47 48 /* Takes ownership of SkImageGenerator. */ 49 SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*, 50 size_t rowBytes, 51 SkDiscardableMemory::Factory* factory); 52 friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, 53 SkBitmap*, 54 SkDiscardableMemory::Factory*); 55 typedef SkPixelRef INHERITED; 56}; 57#endif // SkDiscardablePixelRef_DEFINED 58