diff options
author | 2014-01-08 21:15:56 +0000 | |
---|---|---|
committer | 2014-01-08 21:15:56 +0000 | |
commit | 4b5fba5a3cc29058088a9a62df1da83e1a3c7db0 (patch) | |
tree | f50e71f9e8f93b6649b36aecd13068e8e1ae6a83 /src/ports/SkAtomics_none.h | |
parent | d4ba6e778122df9b52dc68a2f41210d33fd43471 (diff) |
Use a spinlock in SkOnce.
SkOnceFlag is now statically initializable on all platforms.
Also adds sk_atomic_cas, used to implement new SkSpinlock.
Going to punt on making SkOnceFlag any smaller (for now, it's 8 bytes). We could conceivably get it down to two bits, one for done and one for a one-bit spinlock (we'd need atomic-& and atomic-| to make that work, but they appear to be available everywhere).
BUG=skia:1929
R=bungeman@google.com, reed@google.com
Author: mtklein@google.com
Review URL: https://codereview.chromium.org/123093002
git-svn-id: http://skia.googlecode.com/svn/trunk@12968 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/ports/SkAtomics_none.h')
-rw-r--r-- | src/ports/SkAtomics_none.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/ports/SkAtomics_none.h b/src/ports/SkAtomics_none.h index 345cb09de4..d44791c32c 100644 --- a/src/ports/SkAtomics_none.h +++ b/src/ports/SkAtomics_none.h @@ -38,6 +38,12 @@ static inline int32_t sk_atomic_conditional_inc(int32_t* addr) { return value; } +static inline bool sk_atomic_cas(int32_t* addr, int32_t before, int32_t after) { + if (*addr != before) return false; + *addr = after; + return true; +} + static inline void sk_membar_acquire__after_atomic_conditional_inc() { } #endif |