SkDiscardablePixelRef.h revision f3aead2829fa515f790631ee65784a7b9b073343
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 16class SkDiscardablePixelRef : public SkPixelRef { 17public: 18 SK_DECLARE_UNFLATTENABLE_OBJECT() 19 20protected: 21 ~SkDiscardablePixelRef(); 22 23 virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; 24 virtual void onUnlockPixels() SK_OVERRIDE; 25 virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; } 26 27 virtual SkData* onRefEncodedData() SK_OVERRIDE { 28 return fGenerator->refEncodedData(); 29 } 30 31private: 32 SkImageGenerator* const fGenerator; 33 SkDiscardableMemory::Factory* const fDMFactory; 34 const size_t fRowBytes; 35 // These const members should not change over the life of the 36 // PixelRef, since the SkBitmap doesn't expect them to change. 37 38 SkDiscardableMemory* fDiscardableMemory; 39 40 /* Takes ownership of SkImageGenerator. */ 41 SkDiscardablePixelRef(SkImageGenerator* generator, 42 const SkImageInfo& info, 43 size_t rowBytes, 44 SkDiscardableMemory::Factory* factory); 45 46 friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, 47 SkBitmap*, 48 SkDiscardableMemory::Factory*); 49 50 typedef SkPixelRef INHERITED; 51}; 52 53#endif // SkDiscardablePixelRef_DEFINED 54