| /* |
| * Copyright 2013 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkDiscardablePixelRef_DEFINED |
| #define SkDiscardablePixelRef_DEFINED |
| |
| #include "SkDiscardableMemory.h" |
| #include "SkImageGenerator.h" |
| #include "SkImageInfo.h" |
| #include "SkPixelRef.h" |
| |
| /** |
| * A PixelRef backed by SkDiscardableMemory, with the ability to |
| * re-generate the pixels (via a SkImageGenerator) if the DM is |
| * purged. |
| * |
| * Since SkColorTable is reference-counted, we do not support indexed |
| * color with this class; there would be no way for the discardable |
| * memory system to unref the color table. |
| */ |
| class SkDiscardablePixelRef : public SkPixelRef { |
| public: |
| SK_DECLARE_INST_COUNT(SkDiscardablePixelRef) |
| SK_DECLARE_UNFLATTENABLE_OBJECT() |
| |
| protected: |
| ~SkDiscardablePixelRef(); |
| |
| virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE; |
| virtual void onUnlockPixels() SK_OVERRIDE; |
| virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; } |
| |
| virtual SkData* onRefEncodedData() SK_OVERRIDE { |
| return fGenerator->refEncodedData(); |
| } |
| |
| private: |
| SkImageGenerator* const fGenerator; |
| SkDiscardableMemory::Factory* const fDMFactory; |
| const size_t fRowBytes; |
| // These const members should not change over the life of the |
| // PixelRef, since the SkBitmap doesn't expect them to change. |
| |
| SkDiscardableMemory* fDiscardableMemory; |
| |
| /* Takes ownership of SkImageGenerator. */ |
| SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*, |
| size_t rowBytes, |
| SkDiscardableMemory::Factory* factory); |
| |
| friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, |
| SkBitmap*, |
| SkDiscardableMemory::Factory*); |
| |
| typedef SkPixelRef INHERITED; |
| }; |
| |
| #endif // SkDiscardablePixelRef_DEFINED |