diff options
author | Arthur Ishiguro <arthuri@google.com> | 2019-03-25 11:36:56 -0700 |
---|---|---|
committer | Arthur Ishiguro <arthuri@google.com> | 2019-03-25 15:58:04 -0700 |
commit | 3794d066911181eb6f3db19abff3dea4e230293e (patch) | |
tree | 6e92d54137904a479f1d3e2dce92b0b6640f2335 | |
parent | ef3a17263d11ac90a6a22fd249c6112ebb920e19 (diff) | |
download | chre-3794d066911181eb6f3db19abff3dea4e230293e.tar.gz |
Adds fetch_sub/decrement to AtomicUint32
Test: Sanity check by using methods
Change-Id: Ica1a41f4cfd8e541f49b907600c8911e77921bc1
-rw-r--r-- | platform/include/chre/platform/atomic.h | 16 | ||||
-rw-r--r-- | platform/linux/include/chre/target_platform/atomic_base_impl.h | 8 | ||||
-rw-r--r-- | platform/slpi/include/chre/target_platform/atomic_base_impl.h | 10 |
3 files changed, 34 insertions, 0 deletions
diff --git a/platform/include/chre/platform/atomic.h b/platform/include/chre/platform/atomic.h index b01fd811..753c94df 100644 --- a/platform/include/chre/platform/atomic.h +++ b/platform/include/chre/platform/atomic.h @@ -98,6 +98,22 @@ class AtomicUint32 : public AtomicUint32Base, * @return The previous value of the object. */ uint32_t fetch_increment(); + + /** + * Atomically subtracts the argument from the current value of the object. + * + * @param The amount which the object should be decreased by. + * + * @return The previous value of the object. + */ + uint32_t fetch_sub(uint32_t arg); + + /** + * Atomically decrements the value stored in the atomic object by 1. + * + * @return The previous value of the object. + */ + uint32_t fetch_decrement(); }; } // namespace chre diff --git a/platform/linux/include/chre/target_platform/atomic_base_impl.h b/platform/linux/include/chre/target_platform/atomic_base_impl.h index 850085d5..68c1f84c 100644 --- a/platform/linux/include/chre/target_platform/atomic_base_impl.h +++ b/platform/linux/include/chre/target_platform/atomic_base_impl.h @@ -53,6 +53,14 @@ inline uint32_t AtomicUint32::fetch_increment() { return mAtomic.fetch_add(1); } +inline uint32_t AtomicUint32::fetch_sub(uint32_t arg) { + return mAtomic.fetch_sub(arg); +} + +inline uint32_t AtomicUint32::fetch_decrement() { + return mAtomic.fetch_sub(1); +} + } // namespace chre #endif // CHRE_PLATFORM_LINUX_ATOMIC_BASE_IMPL_H_ diff --git a/platform/slpi/include/chre/target_platform/atomic_base_impl.h b/platform/slpi/include/chre/target_platform/atomic_base_impl.h index 6b734ef8..46f9d725 100644 --- a/platform/slpi/include/chre/target_platform/atomic_base_impl.h +++ b/platform/slpi/include/chre/target_platform/atomic_base_impl.h @@ -66,6 +66,16 @@ inline uint32_t AtomicUint32::fetch_increment() { return qurt_atomic_add_return(&mValue, 1); } +inline uint32_t AtomicUint32::fetch_sub(uint32_t arg) { + qurt_atomic_barrier(); + return qurt_atomic_sub_return(&mValue, arg); +} + +inline uint32_t AtomicUint32::fetch_decrement() { + qurt_atomic_barrier(); + return qurt_atomic_sub_return(&mValue, 1); +} + } // namespace chre #endif // CHRE_PLATFORM_SLPI_ATOMIC_BASE_IMPL_H_ |