aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-03-26 17:48:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-03-26 17:48:59 +0000
commitc2ff2811687273d918db9253f1c891368ed96fd7 (patch)
tree69f8c43632d7306f17c0c9ba2c2bca42b31d38a7
parent0a957fd385da1ab070f96a8454d25aba96bb6479 (diff)
parent3794d066911181eb6f3db19abff3dea4e230293e (diff)
downloadchre-c2ff2811687273d918db9253f1c891368ed96fd7.tar.gz
Merge "Adds fetch_sub/decrement to AtomicUint32"
-rw-r--r--platform/include/chre/platform/atomic.h16
-rw-r--r--platform/linux/include/chre/target_platform/atomic_base_impl.h8
-rw-r--r--platform/slpi/include/chre/target_platform/atomic_base_impl.h10
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_