diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/lazy/SkDiscardablePixelRef.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/lazy/SkDiscardablePixelRef.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,62 @@ +/* + * 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