diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-03-26 17:48:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-03-26 17:48:59 +0000 |
commit | c2ff2811687273d918db9253f1c891368ed96fd7 (patch) | |
tree | 69f8c43632d7306f17c0c9ba2c2bca42b31d38a7 | |
parent | 0a957fd385da1ab070f96a8454d25aba96bb6479 (diff) | |
parent | 3794d066911181eb6f3db19abff3dea4e230293e (diff) | |
download | chre-c2ff2811687273d918db9253f1c891368ed96fd7.tar.gz |
Merge "Adds fetch_sub/decrement to AtomicUint32"
-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 4f2a8f3e..a718b60e 100644 --- a/platform/include/chre/platform/atomic.h +++ b/platform/include/chre/platform/atomic.h @@ -132,6 +132,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 68e7f2d8..cea4c8e1 100644 --- a/platform/linux/include/chre/target_platform/atomic_base_impl.h +++ b/platform/linux/include/chre/target_platform/atomic_base_impl.h @@ -69,6 +69,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 ee73f708..97698ecd 100644 --- a/platform/slpi/include/chre/target_platform/atomic_base_impl.h +++ b/platform/slpi/include/chre/target_platform/atomic_base_impl.h @@ -84,6 +84,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_ |