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