| OLD | NEW | 
|---|
| 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 | 
| 11 #include "SkBitmap.h" | 11 #include "SkBitmap.h" | 
| 12 #include "SkDynamicAnnotations.h" | 12 #include "SkDynamicAnnotations.h" | 
| 13 #include "SkRefCnt.h" | 13 #include "SkRefCnt.h" | 
| 14 #include "SkString.h" | 14 #include "SkString.h" | 
| 15 #include "SkFlattenable.h" |  | 
| 16 #include "SkImageInfo.h" | 15 #include "SkImageInfo.h" | 
| 17 #include "SkTDArray.h" | 16 #include "SkTDArray.h" | 
| 18 | 17 | 
| 19 //#define xed | 18 //#define xed | 
| 20 | 19 | 
| 21 #ifdef SK_DEBUG | 20 #ifdef SK_DEBUG | 
| 22     /** | 21     /** | 
| 23      *  Defining SK_IGNORE_PIXELREF_SETPRELOCKED will force all pixelref | 22      *  Defining SK_IGNORE_PIXELREF_SETPRELOCKED will force all pixelref | 
| 24      *  subclasses to correctly handle lock/unlock pixels. For performance | 23      *  subclasses to correctly handle lock/unlock pixels. For performance | 
| 25      *  reasons, simple malloc-based subclasses call setPreLocked() to skip | 24      *  reasons, simple malloc-based subclasses call setPreLocked() to skip | 
| 26      *  the overhead of implementing these calls. | 25      *  the overhead of implementing these calls. | 
| 27      * | 26      * | 
| 28      *  This build-flag disables that optimization, to add in debugging our | 27      *  This build-flag disables that optimization, to add in debugging our | 
| 29      *  call-sites, to ensure that they correctly balance their calls of | 28      *  call-sites, to ensure that they correctly balance their calls of | 
| 30      *  lock and unlock. | 29      *  lock and unlock. | 
| 31      */ | 30      */ | 
| 32 //    #define SK_IGNORE_PIXELREF_SETPRELOCKED | 31 //    #define SK_IGNORE_PIXELREF_SETPRELOCKED | 
| 33 #endif | 32 #endif | 
| 34 | 33 | 
| 35 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE |  | 
| 36     // we only support unflattening, not flattening |  | 
| 37     #define SK_PIXELREF_BASECLASS   SkFlattenable |  | 
| 38 #else |  | 
| 39     #define SK_PIXELREF_BASECLASS   SkRefCnt |  | 
| 40 #endif |  | 
| 41 |  | 
| 42 class SkColorTable; | 34 class SkColorTable; | 
| 43 class SkData; | 35 class SkData; | 
| 44 struct SkIRect; | 36 struct SkIRect; | 
| 45 class SkMutex; | 37 class SkMutex; | 
| 46 | 38 | 
| 47 class GrTexture; | 39 class GrTexture; | 
| 48 | 40 | 
| 49 /** \class SkPixelRef | 41 /** \class SkPixelRef | 
| 50 | 42 | 
| 51     This class is the smart container for pixel memory, and is used with | 43     This class is the smart container for pixel memory, and is used with | 
| 52     SkBitmap. A pixelref is installed into a bitmap, and then the bitmap can | 44     SkBitmap. A pixelref is installed into a bitmap, and then the bitmap can | 
| 53     access the actual pixel memory by calling lockPixels/unlockPixels. | 45     access the actual pixel memory by calling lockPixels/unlockPixels. | 
| 54 | 46 | 
| 55     This class can be shared/accessed between multiple threads. | 47     This class can be shared/accessed between multiple threads. | 
| 56 */ | 48 */ | 
| 57 class SK_API SkPixelRef : public SK_PIXELREF_BASECLASS { | 49 class SK_API SkPixelRef : public SkRefCnt { | 
| 58 public: | 50 public: | 
| 59     SK_DECLARE_INST_COUNT(SkPixelRef) | 51     SK_DECLARE_INST_COUNT(SkPixelRef) | 
| 60 | 52 | 
| 61     explicit SkPixelRef(const SkImageInfo&); | 53     explicit SkPixelRef(const SkImageInfo&); | 
| 62     SkPixelRef(const SkImageInfo&, SkBaseMutex* mutex); | 54     SkPixelRef(const SkImageInfo&, SkBaseMutex* mutex); | 
| 63     virtual ~SkPixelRef(); | 55     virtual ~SkPixelRef(); | 
| 64 | 56 | 
| 65     const SkImageInfo& info() const { | 57     const SkImageInfo& info() const { | 
| 66         return fInfo; | 58         return fInfo; | 
| 67     } | 59     } | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 251     virtual void globalRef(void* data=NULL); | 243     virtual void globalRef(void* data=NULL); | 
| 252 | 244 | 
| 253     /** | 245     /** | 
| 254      *  Release a "global" ref on this object. | 246      *  Release a "global" ref on this object. | 
| 255      *  The default implementation just calls unref(), but subclasses can overri
     de | 247      *  The default implementation just calls unref(), but subclasses can overri
     de | 
| 256      *  this method to implement additional behavior. | 248      *  this method to implement additional behavior. | 
| 257      */ | 249      */ | 
| 258     virtual void globalUnref(); | 250     virtual void globalUnref(); | 
| 259 #endif | 251 #endif | 
| 260 | 252 | 
| 261 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE |  | 
| 262     SK_DEFINE_FLATTENABLE_TYPE(SkPixelRef) |  | 
| 263 #endif |  | 
| 264 |  | 
| 265     // Register a listener that may be called the next time our generation ID ch
     anges. | 253     // Register a listener that may be called the next time our generation ID ch
     anges. | 
| 266     // | 254     // | 
| 267     // We'll only call the listener if we're confident that we are the only SkPi
     xelRef with this | 255     // We'll only call the listener if we're confident that we are the only SkPi
     xelRef with this | 
| 268     // generation ID.  If our generation ID changes and we decide not to call th
     e listener, we'll | 256     // generation ID.  If our generation ID changes and we decide not to call th
     e listener, we'll | 
| 269     // never call it: you must add a new listener for each generation ID change.
       We also won't call | 257     // never call it: you must add a new listener for each generation ID change.
       We also won't call | 
| 270     // the listener when we're certain no one knows what our generation ID is. | 258     // the listener when we're certain no one knows what our generation ID is. | 
| 271     // | 259     // | 
| 272     // This can be used to invalidate caches keyed by SkPixelRef generation ID. | 260     // This can be used to invalidate caches keyed by SkPixelRef generation ID. | 
| 273     struct GenIDChangeListener { | 261     struct GenIDChangeListener { | 
| 274         virtual ~GenIDChangeListener() {} | 262         virtual ~GenIDChangeListener() {} | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 365     void needsNewGenID(); | 353     void needsNewGenID(); | 
| 366     void callGenIDChangeListeners(); | 354     void callGenIDChangeListeners(); | 
| 367 | 355 | 
| 368     void setMutex(SkBaseMutex* mutex); | 356     void setMutex(SkBaseMutex* mutex); | 
| 369 | 357 | 
| 370     // When copying a bitmap to another with the same shape and config, we can s
     afely | 358     // When copying a bitmap to another with the same shape and config, we can s
     afely | 
| 371     // clone the pixelref generation ID too, which makes them equivalent under c
     aching. | 359     // clone the pixelref generation ID too, which makes them equivalent under c
     aching. | 
| 372     friend class SkBitmap;  // only for cloneGenID | 360     friend class SkBitmap;  // only for cloneGenID | 
| 373     void cloneGenID(const SkPixelRef&); | 361     void cloneGenID(const SkPixelRef&); | 
| 374 | 362 | 
| 375 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE | 363     typedef SkRefCnt INHERITED; | 
| 376     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE { sk_throw(); } |  | 
| 377 #endif |  | 
| 378 |  | 
| 379     typedef SK_PIXELREF_BASECLASS INHERITED; |  | 
| 380 }; | 364 }; | 
| 381 | 365 | 
| 382 class SkPixelRefFactory : public SkRefCnt { | 366 class SkPixelRefFactory : public SkRefCnt { | 
| 383 public: | 367 public: | 
| 384     /** | 368     /** | 
| 385      *  Allocate a new pixelref matching the specified ImageInfo, allocating | 369      *  Allocate a new pixelref matching the specified ImageInfo, allocating | 
| 386      *  the memory for the pixels. If the ImageInfo requires a ColorTable, | 370      *  the memory for the pixels. If the ImageInfo requires a ColorTable, | 
| 387      *  the pixelref will ref() the colortable. | 371      *  the pixelref will ref() the colortable. | 
| 388      *  On failure return NULL. | 372      *  On failure return NULL. | 
| 389      */ | 373      */ | 
| 390     virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable
     *) = 0; | 374     virtual SkPixelRef* create(const SkImageInfo&, size_t rowBytes, SkColorTable
     *) = 0; | 
| 391 }; | 375 }; | 
| 392 | 376 | 
| 393 #endif | 377 #endif | 
| OLD | NEW | 
|---|