diff options
author | joshualitt <joshualitt@chromium.org> | 2015-03-25 13:40:13 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-25 13:40:13 -0700 |
commit | 2af858354d913397a6c316ef46a5d52d686e10ab (patch) | |
tree | 14a44b67e8ac1a5d6b7adaa27a0666ebe117f042 | |
parent | d4714af018158c15e13439bef2c9b5bafc25c1d7 (diff) |
simple patch to always init SkTextBlob uniqueID
BUG=skia:
Review URL: https://codereview.chromium.org/1036613002
-rw-r--r-- | include/core/SkTextBlob.h | 4 | ||||
-rw-r--r-- | src/core/SkTextBlob.cpp | 23 |
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; |