aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2015-03-25 13:40:13 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-03-25 13:40:13 -0700
commit2af858354d913397a6c316ef46a5d52d686e10ab (patch)
tree14a44b67e8ac1a5d6b7adaa27a0666ebe117f042
parentd4714af018158c15e13439bef2c9b5bafc25c1d7 (diff)
simple patch to always init SkTextBlob uniqueID
-rw-r--r--include/core/SkTextBlob.h4
-rw-r--r--src/core/SkTextBlob.cpp23
2 files changed, 13 insertions, 14 deletions
diff --git a/include/core/SkTextBlob.h b/include/core/SkTextBlob.h
index 6970e6d5c7..d31ec5c760 100644
--- a/include/core/SkTextBlob.h
+++ b/include/core/SkTextBlob.h
@@ -30,7 +30,7 @@ public:
/**
* Return a non-zero, unique value representing the text blob.
*/
- uint32_t uniqueID() const;
+ uint32_t uniqueID() const { return fUniqueID; }
/**
* Serialize to a buffer.
@@ -98,7 +98,7 @@ private:
const int fRunCount;
const SkRect fBounds;
- mutable uint32_t fUniqueID;
+ const uint32_t fUniqueID;
SkDEBUGCODE(size_t fStorageSize;)
diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp
index bf620328d6..3ffc41e9ba 100644
--- a/src/core/SkTextBlob.cpp
+++ b/src/core/SkTextBlob.cpp
@@ -108,9 +108,19 @@ private:
SkDEBUGCODE(unsigned fMagic;)
};
+static int32_t gNextID = 1;
+static int32_t next_id() {
+ int32_t id;
+ do {
+ id = sk_atomic_inc(&gNextID);
+ } while (id == SK_InvalidGenID);
+ return id;
+}
+
SkTextBlob::SkTextBlob(int runCount, const SkRect& bounds)
: fRunCount(runCount)
- , fBounds(bounds) {
+ , fBounds(bounds)
+ , fUniqueID(next_id()) {
}
SkTextBlob::~SkTextBlob() {
@@ -123,17 +133,6 @@ SkTextBlob::~SkTextBlob() {
}
}
-uint32_t SkTextBlob::uniqueID() const {
- static int32_t gTextBlobGenerationID; // = 0;
-
- // loop in case our global wraps around, as we never want to return SK_InvalidGenID
- while (SK_InvalidGenID == fUniqueID) {
- fUniqueID = sk_atomic_inc(&gTextBlobGenerationID) + 1;
- }
-
- return fUniqueID;
-}
-
void SkTextBlob::flatten(SkWriteBuffer& buffer) const {
int runCount = fRunCount;