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

Side by Side Diff: skia/sgl/SkPixelRef.cpp

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « skia/sgl/SkPathMeasure.cpp ('k') | skia/sgl/SkProcSpriteBlitter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include "SkPixelRef.h"
2 #include "SkFlattenable.h"
3 #include "SkThread.h"
4
5 static SkMutex gPixelRefMutex;
6 static int32_t gPixelRefGenerationID;
7
8 SkPixelRef::SkPixelRef(SkMutex* mutex) {
9 if (NULL == mutex) {
10 mutex = &gPixelRefMutex;
11 }
12 fMutex = mutex;
13 fPixels = NULL;
14 fColorTable = NULL; // we do not track ownership of this
15 fLockCount = 0;
16 fGenerationID = 0; // signal to rebuild
17 fIsImmutable = false;
18 }
19
20 SkPixelRef::SkPixelRef(SkFlattenableReadBuffer& buffer, SkMutex* mutex) {
21 if (NULL == mutex) {
22 mutex = &gPixelRefMutex;
23 }
24 fMutex = mutex;
25 fPixels = NULL;
26 fColorTable = NULL; // we do not track ownership of this
27 fLockCount = 0;
28 fGenerationID = 0; // signal to rebuild
29 fIsImmutable = buffer.readBool();
30 }
31
32 void SkPixelRef::flatten(SkFlattenableWriteBuffer& buffer) const {
33 buffer.writeBool(fIsImmutable);
34 }
35
36 void SkPixelRef::lockPixels() {
37 SkAutoMutexAcquire ac(*fMutex);
38
39 if (1 == ++fLockCount) {
40 fPixels = this->onLockPixels(&fColorTable);
41 }
42 }
43
44 void SkPixelRef::unlockPixels() {
45 SkAutoMutexAcquire ac(*fMutex);
46
47 SkASSERT(fLockCount > 0);
48 if (0 == --fLockCount) {
49 this->onUnlockPixels();
50 fPixels = NULL;
51 fColorTable = NULL;
52 }
53 }
54
55 uint32_t SkPixelRef::getGenerationID() const {
56 uint32_t genID = fGenerationID;
57 if (0 == genID) {
58 // do a loop in case our global wraps around, as we never want to
59 // return a 0
60 do {
61 genID = sk_atomic_inc(&gPixelRefGenerationID) + 1;
62 } while (0 == genID);
63 fGenerationID = genID;
64 }
65 return genID;
66 }
67
68 void SkPixelRef::notifyPixelsChanged() {
69 if (fIsImmutable) {
70 SkDebugf("========== notifyPixelsChanged called on immutable pixelref");
71 sk_throw();
72 }
73 // this signals us to recompute this next time around
74 fGenerationID = 0;
75 }
76
77 void SkPixelRef::setImmutable() {
78 fIsImmutable = true;
79 }
80
81 ///////////////////////////////////////////////////////////////////////////////
82
83 #define MAX_PAIR_COUNT 16
84
85 struct Pair {
86 const char* fName;
87 SkPixelRef::Factory fFactory;
88 };
89
90 static int gCount;
91 static Pair gPairs[MAX_PAIR_COUNT];
92
93 void SkPixelRef::Register(const char name[], Factory factory) {
94 SkASSERT(name);
95 SkASSERT(factory);
96
97 static bool gOnce;
98 if (!gOnce) {
99 gCount = 0;
100 gOnce = true;
101 }
102
103 SkASSERT(gCount < MAX_PAIR_COUNT);
104
105 gPairs[gCount].fName = name;
106 gPairs[gCount].fFactory = factory;
107 gCount += 1;
108 }
109
110 SkPixelRef::Factory SkPixelRef::NameToFactory(const char name[]) {
111 const Pair* pairs = gPairs;
112 for (int i = gCount - 1; i >= 0; --i) {
113 if (strcmp(pairs[i].fName, name) == 0) {
114 return pairs[i].fFactory;
115 }
116 }
117 return NULL;
118 }
119
120 const char* SkPixelRef::FactoryToName(Factory fact) {
121 const Pair* pairs = gPairs;
122 for (int i = gCount - 1; i >= 0; --i) {
123 if (pairs[i].fFactory == fact) {
124 return pairs[i].fName;
125 }
126 }
127 return NULL;
128 }
129
OLDNEW
« no previous file with comments | « skia/sgl/SkPathMeasure.cpp ('k') | skia/sgl/SkProcSpriteBlitter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698