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

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

Issue 320873003: change pixelref to not inherit from SkFlattenable (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 5 months 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 | « include/core/SkMallocPixelRef.h ('k') | include/core/SkReadBuffer.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 * Copyright 2008 The Android Open Source Project 2 * Copyright 2008 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkPixelRef_DEFINED 8 #ifndef SkPixelRef_DEFINED
9 #define SkPixelRef_DEFINED 9 #define SkPixelRef_DEFINED
10 10
(...skipping 13 matching lines...) Expand all
24 * reasons, simple malloc-based subclasses call setPreLocked() to skip 24 * reasons, simple malloc-based subclasses call setPreLocked() to skip
25 * the overhead of implementing these calls. 25 * the overhead of implementing these calls.
26 * 26 *
27 * This build-flag disables that optimization, to add in debugging our 27 * This build-flag disables that optimization, to add in debugging our
28 * call-sites, to ensure that they correctly balance their calls of 28 * call-sites, to ensure that they correctly balance their calls of
29 * lock and unlock. 29 * lock and unlock.
30 */ 30 */
31 // #define SK_IGNORE_PIXELREF_SETPRELOCKED 31 // #define SK_IGNORE_PIXELREF_SETPRELOCKED
32 #endif 32 #endif
33 33
34 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE
35 // we only support unflattening, not flattening
36 #define SK_PIXELREF_BASECLASS SkFlattenable
37 #else
38 #define SK_PIXELREF_BASECLASS SkRefCnt
39 #endif
40
34 class SkColorTable; 41 class SkColorTable;
35 class SkData; 42 class SkData;
36 struct SkIRect; 43 struct SkIRect;
37 class SkMutex; 44 class SkMutex;
38 45
39 class GrTexture; 46 class GrTexture;
40 47
41 /** \class SkPixelRef 48 /** \class SkPixelRef
42 49
43 This class is the smart container for pixel memory, and is used with 50 This class is the smart container for pixel memory, and is used with
44 SkBitmap. A pixelref is installed into a bitmap, and then the bitmap can 51 SkBitmap. A pixelref is installed into a bitmap, and then the bitmap can
45 access the actual pixel memory by calling lockPixels/unlockPixels. 52 access the actual pixel memory by calling lockPixels/unlockPixels.
46 53
47 This class can be shared/accessed between multiple threads. 54 This class can be shared/accessed between multiple threads.
48 */ 55 */
49 class SK_API SkPixelRef : public SkFlattenable { 56 class SK_API SkPixelRef : public SK_PIXELREF_BASECLASS {
50 public: 57 public:
51 SK_DECLARE_INST_COUNT(SkPixelRef) 58 SK_DECLARE_INST_COUNT(SkPixelRef)
52 59
53 explicit SkPixelRef(const SkImageInfo&); 60 explicit SkPixelRef(const SkImageInfo&);
54 SkPixelRef(const SkImageInfo&, SkBaseMutex* mutex); 61 SkPixelRef(const SkImageInfo&, SkBaseMutex* mutex);
55 virtual ~SkPixelRef(); 62 virtual ~SkPixelRef();
56 63
57 const SkImageInfo& info() const { 64 const SkImageInfo& info() const {
58 return fInfo; 65 return fInfo;
59 } 66 }
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 virtual void globalRef(void* data=NULL); 250 virtual void globalRef(void* data=NULL);
244 251
245 /** 252 /**
246 * Release a "global" ref on this object. 253 * Release a "global" ref on this object.
247 * The default implementation just calls unref(), but subclasses can overri de 254 * The default implementation just calls unref(), but subclasses can overri de
248 * this method to implement additional behavior. 255 * this method to implement additional behavior.
249 */ 256 */
250 virtual void globalUnref(); 257 virtual void globalUnref();
251 #endif 258 #endif
252 259
260 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE
253 SK_DEFINE_FLATTENABLE_TYPE(SkPixelRef) 261 SK_DEFINE_FLATTENABLE_TYPE(SkPixelRef)
262 #endif
254 263
255 // Register a listener that may be called the next time our generation ID ch anges. 264 // Register a listener that may be called the next time our generation ID ch anges.
256 // 265 //
257 // We'll only call the listener if we're confident that we are the only SkPi xelRef with this 266 // We'll only call the listener if we're confident that we are the only SkPi xelRef with this
258 // generation ID. If our generation ID changes and we decide not to call th e listener, we'll 267 // generation ID. If our generation ID changes and we decide not to call th e listener, we'll
259 // never call it: you must add a new listener for each generation ID change. We also won't call 268 // never call it: you must add a new listener for each generation ID change. We also won't call
260 // the listener when we're certain no one knows what our generation ID is. 269 // the listener when we're certain no one knows what our generation ID is.
261 // 270 //
262 // This can be used to invalidate caches keyed by SkPixelRef generation ID. 271 // This can be used to invalidate caches keyed by SkPixelRef generation ID.
263 struct GenIDChangeListener { 272 struct GenIDChangeListener {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 */ 326 */
318 virtual size_t getAllocatedSizeInBytes() const; 327 virtual size_t getAllocatedSizeInBytes() const;
319 328
320 /** Return the mutex associated with this pixelref. This value is assigned 329 /** Return the mutex associated with this pixelref. This value is assigned
321 in the constructor, and cannot change during the lifetime of the object. 330 in the constructor, and cannot change during the lifetime of the object.
322 */ 331 */
323 SkBaseMutex* mutex() const { return fMutex; } 332 SkBaseMutex* mutex() const { return fMutex; }
324 333
325 // serialization 334 // serialization
326 SkPixelRef(SkReadBuffer&, SkBaseMutex*); 335 SkPixelRef(SkReadBuffer&, SkBaseMutex*);
327 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
328 336
329 // only call from constructor. Flags this to always be locked, removing 337 // only call from constructor. Flags this to always be locked, removing
330 // the need to grab the mutex and call onLockPixels/onUnlockPixels. 338 // the need to grab the mutex and call onLockPixels/onUnlockPixels.
331 // Performance tweak to avoid those calls (esp. in multi-thread use case). 339 // Performance tweak to avoid those calls (esp. in multi-thread use case).
332 void setPreLocked(void*, size_t rowBytes, SkColorTable*); 340 void setPreLocked(void*, size_t rowBytes, SkColorTable*);
333 341
334 private: 342 private:
335 SkBaseMutex* fMutex; // must remain in scope for the life of this object 343 SkBaseMutex* fMutex; // must remain in scope for the life of this object
336 344
337 // mostly const. fInfo.fAlpahType can be changed at runtime. 345 // mostly const. fInfo.fAlpahType can be changed at runtime.
(...skipping 18 matching lines...) Expand all
356 void needsNewGenID(); 364 void needsNewGenID();
357 void callGenIDChangeListeners(); 365 void callGenIDChangeListeners();
358 366
359 void setMutex(SkBaseMutex* mutex); 367 void setMutex(SkBaseMutex* mutex);
360 368
361 // When copying a bitmap to another with the same shape and config, we can s afely 369 // When copying a bitmap to another with the same shape and config, we can s afely
362 // clone the pixelref generation ID too, which makes them equivalent under c aching. 370 // clone the pixelref generation ID too, which makes them equivalent under c aching.
363 friend class SkBitmap; // only for cloneGenID 371 friend class SkBitmap; // only for cloneGenID
364 void cloneGenID(const SkPixelRef&); 372 void cloneGenID(const SkPixelRef&);
365 373
366 typedef SkFlattenable INHERITED; 374 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE
375 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE { sk_throw(); }
376 #endif
377
378 typedef SK_PIXELREF_BASECLASS INHERITED;
367 }; 379 };
368 380
369 class SkPixelRefFactory : public SkRefCnt { 381 class SkPixelRefFactory : public SkRefCnt {
370 public: 382 public:
371 /** 383 /**
372 * Allocate a new pixelref matching the specified ImageInfo, allocating 384 * Allocate a new pixelref matching the specified ImageInfo, allocating
373 * the memory for the pixels. If the ImageInfo requires a ColorTable, 385 * the memory for the pixels. If the ImageInfo requires a ColorTable,
374 * the pixelref will ref() the colortable. 386 * the pixelref will ref() the colortable.
375 * On failure return NULL. 387 * On failure return NULL.
376 */ 388 */
377 virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable *) = 0; 389 virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable *) = 0;
378 }; 390 };
379 391
380 #endif 392 #endif
OLDNEW
« no previous file with comments | « include/core/SkMallocPixelRef.h ('k') | include/core/SkReadBuffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698