Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: include/core/SkPicture.h

Issue 741793002: Add SkNVRefCnt, prune down SkPicture's size (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tweak name Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gm/gmmain.cpp ('k') | include/core/SkRefCnt.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2007 The Android Open Source Project 3 * Copyright 2007 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkPicture_DEFINED 10 #ifndef SkPicture_DEFINED
(...skipping 22 matching lines...) Expand all
33 33
34 namespace SkRecords { 34 namespace SkRecords {
35 class CollectLayers; 35 class CollectLayers;
36 }; 36 };
37 37
38 /** \class SkPicture 38 /** \class SkPicture
39 39
40 The SkPicture class records the drawing commands made to a canvas, to 40 The SkPicture class records the drawing commands made to a canvas, to
41 be played back at a later time. 41 be played back at a later time.
42 */ 42 */
43 class SK_API SkPicture : public SkRefCnt { 43 class SK_API SkPicture : public SkNVRefCnt<SkPicture> {
44 public: 44 public:
45 SK_DECLARE_INST_COUNT(SkPicture)
46
47 // AccelData provides a base class for device-specific acceleration 45 // AccelData provides a base class for device-specific acceleration
48 // data. It is added to the picture via EXPERIMENTAL_addAccelData. 46 // data. It is added to the picture via EXPERIMENTAL_addAccelData.
49 class AccelData : public SkRefCnt { 47 class AccelData : public SkRefCnt {
50 public: 48 public:
51 typedef uint8_t Domain; 49 typedef uint8_t Domain;
52 typedef uint32_t Key; 50 typedef uint32_t Key;
53 51
54 AccelData(Key key) : fKey(key) { } 52 AccelData(Key key) : fKey(key) { }
55 53
56 const Key& getKey() const { return fKey; } 54 const Key& getKey() const { return fKey; }
57 55
58 // This entry point allows user's to get a unique domain prefix 56 // This entry point allows user's to get a unique domain prefix
59 // for their keys 57 // for their keys
60 static Domain GenerateDomain(); 58 static Domain GenerateDomain();
61 private: 59 private:
62 Key fKey; 60 Key fKey;
63
64 typedef SkRefCnt INHERITED;
65 }; 61 };
66 62
67 /** PRIVATE / EXPERIMENTAL -- do not call */ 63 /** PRIVATE / EXPERIMENTAL -- do not call */
68 void EXPERIMENTAL_addAccelData(const AccelData*) const; 64 void EXPERIMENTAL_addAccelData(const AccelData*) const;
69 65
70 /** PRIVATE / EXPERIMENTAL -- do not call */ 66 /** PRIVATE / EXPERIMENTAL -- do not call */
71 const AccelData* EXPERIMENTAL_getAccelData(AccelData::Key) const; 67 const AccelData* EXPERIMENTAL_getAccelData(AccelData::Key) const;
72 68
73 /** 69 /**
74 * Function signature defining a function that sets up an SkBitmap from enc oded data. On 70 * Function signature defining a function that sets up an SkBitmap from enc oded data. On
(...skipping 22 matching lines...) Expand all
97 /** 93 /**
98 * Recreate a picture that was serialized into a buffer. If the creation re quires bitmap 94 * Recreate a picture that was serialized into a buffer. If the creation re quires bitmap
99 * decoding, the decoder must be set on the SkReadBuffer parameter by calli ng 95 * decoding, the decoder must be set on the SkReadBuffer parameter by calli ng
100 * SkReadBuffer::setBitmapDecoder() before calling SkPicture::CreateFromBuf fer(). 96 * SkReadBuffer::setBitmapDecoder() before calling SkPicture::CreateFromBuf fer().
101 * @param SkReadBuffer Serialized picture data. 97 * @param SkReadBuffer Serialized picture data.
102 * @return A new SkPicture representing the serialized data, or NULL if the buffer is 98 * @return A new SkPicture representing the serialized data, or NULL if the buffer is
103 * invalid. 99 * invalid.
104 */ 100 */
105 static SkPicture* CreateFromBuffer(SkReadBuffer&); 101 static SkPicture* CreateFromBuffer(SkReadBuffer&);
106 102
107 virtual ~SkPicture(); 103 ~SkPicture();
108 104
109 /** Replays the drawing commands on the specified canvas. Note that 105 /** Replays the drawing commands on the specified canvas. Note that
110 this has the effect of unfurling this picture into the destination 106 this has the effect of unfurling this picture into the destination
111 canvas. Using the SkCanvas::drawPicture entry point gives the destinatio n 107 canvas. Using the SkCanvas::drawPicture entry point gives the destinatio n
112 canvas the option of just taking a ref. 108 canvas the option of just taking a ref.
113 @param canvas the canvas receiving the drawing commands. 109 @param canvas the canvas receiving the drawing commands.
114 @param callback a callback that allows interruption of playback 110 @param callback a callback that allows interruption of playback
115 */ 111 */
116 void playback(SkCanvas* canvas, SkDrawPictureCallback* = NULL) const; 112 void playback(SkCanvas* canvas, SkDrawPictureCallback* = NULL) const;
117 113
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 static bool IsValidPictInfo(const SkPictInfo& info); 256 static bool IsValidPictInfo(const SkPictInfo& info);
261 257
262 // Takes ownership of the SkRecord, refs the (optional) drawablePicts and BB H. 258 // Takes ownership of the SkRecord, refs the (optional) drawablePicts and BB H.
263 SkPicture(const SkRect& cullRect, SkRecord*, SkData* drawablePicts, 259 SkPicture(const SkRect& cullRect, SkRecord*, SkData* drawablePicts,
264 SkBBoxHierarchy*); 260 SkBBoxHierarchy*);
265 261
266 static SkPicture* Forwardport(const SkPictInfo&, const SkPictureData*); 262 static SkPicture* Forwardport(const SkPictInfo&, const SkPictureData*);
267 static SkPictureData* Backport(const SkRecord&, const SkPictInfo&, 263 static SkPictureData* Backport(const SkRecord&, const SkPictInfo&,
268 SkPicture const* const drawablePics[], int dr awableCount); 264 SkPicture const* const drawablePics[], int dr awableCount);
269 265
266 // uint32_t fRefCnt; from SkNVRefCnt<SkPicture>
267 mutable uint32_t fUniqueID;
270 const SkRect fCullRect; 268 const SkRect fCullRect;
271 mutable SkAutoTUnref<const AccelData> fAccelData; 269 mutable SkAutoTUnref<const AccelData> fAccelData;
272 mutable SkTDArray<DeletionListener*> fDeletionListeners; // pointers are re fed 270 mutable SkTDArray<DeletionListener*> fDeletionListeners; // pointers are re fed
273 SkAutoTDelete<SkRecord> fRecord; 271 SkAutoTDelete<SkRecord> fRecord;
274 SkAutoTUnref<SkBBoxHierarchy> fBBH; 272 SkAutoTUnref<SkBBoxHierarchy> fBBH;
275 SkAutoTUnref<SkData> fDrawablePicts; 273 SkAutoTUnref<SkData> fDrawablePicts;
276 274
277 // helpers for fDrawablePicts 275 // helpers for fDrawablePicts
278 int drawableCount() const; 276 int drawableCount() const;
279 // will return NULL if drawableCount() returns 0 277 // will return NULL if drawableCount() returns 0
280 SkPicture const* const* drawablePicts() const; 278 SkPicture const* const* drawablePicts() const;
281 279
282 struct PathCounter; 280 struct PathCounter;
283 281
284 struct Analysis { 282 struct Analysis {
285 Analysis() {} // Only used by SkPictureData codepath. 283 Analysis() {} // Only used by SkPictureData codepath.
286 explicit Analysis(const SkRecord&); 284 explicit Analysis(const SkRecord&);
287 285
288 bool suitableForGpuRasterization(const char** reason, int sampleCount) c onst; 286 bool suitableForGpuRasterization(const char** reason, int sampleCount) c onst;
289 287
290 bool fWillPlaybackBitmaps; 288 bool fWillPlaybackBitmaps;
291 bool fHasText; 289 bool fHasText;
292 int fNumPaintWithPathEffectUses; 290 int fNumPaintWithPathEffectUses;
293 int fNumFastPathDashEffects; 291 int fNumFastPathDashEffects;
294 int fNumAAConcavePaths; 292 int fNumAAConcavePaths;
295 int fNumAAHairlineConcavePaths; 293 int fNumAAHairlineConcavePaths;
296 int fNumAADFEligibleConcavePaths; 294 int fNumAADFEligibleConcavePaths;
297 } fAnalysis; 295 } fAnalysis;
298 mutable uint32_t fUniqueID;
299 296
300 friend class SkPictureRecorder; // SkRecord-based constructor. 297 friend class SkPictureRecorder; // SkRecord-based constructor.
301 friend class GrLayerHoister; // access to fRecord 298 friend class GrLayerHoister; // access to fRecord
302 friend class ReplaceDraw; 299 friend class ReplaceDraw;
303 friend class SkPictureUtils; 300 friend class SkPictureUtils;
304
305 typedef SkRefCnt INHERITED;
306 }; 301 };
302 SK_COMPILE_ASSERT(sizeof(SkPicture) <= 96, SkPictureSize);
307 303
308 #endif 304 #endif
OLDNEW
« no previous file with comments | « gm/gmmain.cpp ('k') | include/core/SkRefCnt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698