Index: skia/sgl/SkPixelRef.cpp |
=================================================================== |
--- skia/sgl/SkPixelRef.cpp (revision 16859) |
+++ skia/sgl/SkPixelRef.cpp (working copy) |
@@ -1,129 +0,0 @@ |
-#include "SkPixelRef.h" |
-#include "SkFlattenable.h" |
-#include "SkThread.h" |
- |
-static SkMutex gPixelRefMutex; |
-static int32_t gPixelRefGenerationID; |
- |
-SkPixelRef::SkPixelRef(SkMutex* mutex) { |
- if (NULL == mutex) { |
- mutex = &gPixelRefMutex; |
- } |
- fMutex = mutex; |
- fPixels = NULL; |
- fColorTable = NULL; // we do not track ownership of this |
- fLockCount = 0; |
- fGenerationID = 0; // signal to rebuild |
- fIsImmutable = false; |
-} |
- |
-SkPixelRef::SkPixelRef(SkFlattenableReadBuffer& buffer, SkMutex* mutex) { |
- if (NULL == mutex) { |
- mutex = &gPixelRefMutex; |
- } |
- fMutex = mutex; |
- fPixels = NULL; |
- fColorTable = NULL; // we do not track ownership of this |
- fLockCount = 0; |
- fGenerationID = 0; // signal to rebuild |
- fIsImmutable = buffer.readBool(); |
-} |
- |
-void SkPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const { |
- buffer.writeBool(fIsImmutable); |
-} |
- |
-void SkPixelRef::lockPixels() { |
- SkAutoMutexAcquire ac(*fMutex); |
- |
- if (1 == ++fLockCount) { |
- fPixels = this->onLockPixels(&fColorTable); |
- } |
-} |
- |
-void SkPixelRef::unlockPixels() { |
- SkAutoMutexAcquire ac(*fMutex); |
- |
- SkASSERT(fLockCount > 0); |
- if (0 == --fLockCount) { |
- this->onUnlockPixels(); |
- fPixels = NULL; |
- fColorTable = NULL; |
- } |
-} |
- |
-uint32_t SkPixelRef::getGenerationID() const { |
- uint32_t genID = fGenerationID; |
- if (0 == genID) { |
- // do a loop in case our global wraps around, as we never want to |
- // return a 0 |
- do { |
- genID = sk_atomic_inc(&gPixelRefGenerationID) + 1; |
- } while (0 == genID); |
- fGenerationID = genID; |
- } |
- return genID; |
-} |
- |
-void SkPixelRef::notifyPixelsChanged() { |
- if (fIsImmutable) { |
- SkDebugf("========== notifyPixelsChanged called on immutable pixelref"); |
- sk_throw(); |
- } |
- // this signals us to recompute this next time around |
- fGenerationID = 0; |
-} |
- |
-void SkPixelRef::setImmutable() { |
- fIsImmutable = true; |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-#define MAX_PAIR_COUNT 16 |
- |
-struct Pair { |
- const char* fName; |
- SkPixelRef::Factory fFactory; |
-}; |
- |
-static int gCount; |
-static Pair gPairs[MAX_PAIR_COUNT]; |
- |
-void SkPixelRef::Register(const char name[], Factory factory) { |
- SkASSERT(name); |
- SkASSERT(factory); |
- |
- static bool gOnce; |
- if (!gOnce) { |
- gCount = 0; |
- gOnce = true; |
- } |
- |
- SkASSERT(gCount < MAX_PAIR_COUNT); |
- |
- gPairs[gCount].fName = name; |
- gPairs[gCount].fFactory = factory; |
- gCount += 1; |
-} |
- |
-SkPixelRef::Factory SkPixelRef::NameToFactory(const char name[]) { |
- const Pair* pairs = gPairs; |
- for (int i = gCount - 1; i >= 0; --i) { |
- if (strcmp(pairs[i].fName, name) == 0) { |
- return pairs[i].fFactory; |
- } |
- } |
- return NULL; |
-} |
- |
-const char* SkPixelRef::FactoryToName(Factory fact) { |
- const Pair* pairs = gPairs; |
- for (int i = gCount - 1; i >= 0; --i) { |
- if (pairs[i].fFactory == fact) { |
- return pairs[i].fName; |
- } |
- } |
- return NULL; |
-} |
- |