• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 class SkDiscardablePixelRef : public SkPixelRef {
22 public:
23     SK_DECLARE_INST_COUNT(SkDiscardablePixelRef)
24 
25 protected:
26     ~SkDiscardablePixelRef();
27 
28     virtual bool onNewLockPixels(LockRec*) SK_OVERRIDE;
29     virtual void onUnlockPixels() SK_OVERRIDE;
onLockPixelsAreWritable()30     virtual bool onLockPixelsAreWritable() const SK_OVERRIDE { return false; }
31 
onRefEncodedData()32     virtual SkData* onRefEncodedData() SK_OVERRIDE {
33         return fGenerator->refEncodedData();
34     }
35 
36 private:
37     SkImageGenerator* const fGenerator;
38     SkDiscardableMemory::Factory* const fDMFactory;
39     const size_t fRowBytes;
40     // These const members should not change over the life of the
41     // PixelRef, since the SkBitmap doesn't expect them to change.
42 
43     SkDiscardableMemory* fDiscardableMemory;
44     SkAutoTUnref<SkColorTable> fCTable;
45 
46     /* Takes ownership of SkImageGenerator. */
47     SkDiscardablePixelRef(const SkImageInfo&, SkImageGenerator*,
48                           size_t rowBytes,
49                           SkDiscardableMemory::Factory* factory);
50 
onGetYUV8Planes(SkISize sizes[3],void * planes[3],size_t rowBytes[3],SkYUVColorSpace * colorSpace)51     virtual bool onGetYUV8Planes(SkISize sizes[3],
52                                  void* planes[3],
53                                  size_t rowBytes[3],
54                                  SkYUVColorSpace* colorSpace) SK_OVERRIDE {
55         return fGenerator->getYUV8Planes(sizes, planes, rowBytes, colorSpace);
56     }
57 
58     friend bool SkInstallDiscardablePixelRef(SkImageGenerator*, SkBitmap*,
59                                              SkDiscardableMemory::Factory*);
60 
61     typedef SkPixelRef INHERITED;
62 };
63 
64 #endif  // SkDiscardablePixelRef_DEFINED
65