Fix android build issues with atomics

Uses inline methods for sk_atomic_inc/add/dec instead of #define.
Since those methods are declared as static in SkThread.h, they need
a definition or else the compiler generates an error. Also corrects
a typo.

BUG=skia:
R=djsollen@google.com, bungeman@google.com, bsalomon@google.com

Author: cdalton@nvidia.com

Review URL: https://codereview.chromium.org/148113010

git-svn-id: http://skia.googlecode.com/svn/trunk@13360 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-02-07 13:55:57 +00:00
parent 1f1dd96336
commit c435360f20

View File

@ -13,9 +13,17 @@
#include <cutils/atomic.h>
#include <stdint.h>
#define sk_atomic_inc(addr) android_atomic_inc(addr)
#define sk_atomic_add(addr, inc) android_atomic_add(inc, addr)
#define sk_atomic_dec(addr) android_atomic_dec(addr)
static inline __attribute__((always_inline)) int32_t sk_atomic_inc(int32_t* addr) {
return android_atomic_inc(addr);
}
static inline __attribute__((always_inline)) int32_t sk_atomic_add(int32_t* addr, int32_t inc) {
return android_atomic_add(inc, addr);
}
static inline __attribute__((always_inline)) int32_t sk_atomic_dec(int32_t* addr) {
return android_atomic_dec(addr);
}
static inline __attribute__((always_inline)) void sk_membar_acquire__after_atomic_dec() {
//HACK: Android is actually using full memory barriers.
@ -36,7 +44,7 @@ static inline __attribute__((always_inline)) int32_t sk_atomic_conditional_inc(i
}
}
static inline __attribute___((always_inline)) bool sk_atomic_cas(int32_t* addr,
static inline __attribute__((always_inline)) bool sk_atomic_cas(int32_t* addr,
int32_t before,
int32_t after) {
// android_atomic_release_cas returns 0 for success (if *addr == before and it wrote after).