summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dan Stoza <stoza@google.com> 2016-10-13 09:45:00 -0700
committer Matthew Bouyack <mbouyack@google.com> 2016-10-17 11:32:10 -0700
commit6db42ac36e69ab203e9078e9f70c2ff762af87cd (patch)
tree1fb15be4cf09b47d00cfa157b2899608e97342c8
parent5736f7dc1535452799ef2ea2026b7d1465567a31 (diff)
libui: Change hasSignaled to return optional<bool>
Since the android::Fence::wait() call can possibly return an error, we need some way of indicating to the caller of hasSignaled that a fence that has not yet signaled (because it is in an error state) will never signal. To do this, we return an optional<bool>, where true and false indicate both that the fence is valid and that it has or hasn't signaled. If an error is returned from wait(), we return a default optional value (that is neither true nor false). Test: m Change-Id: Ibce48cd2e71ddb8ccf6cabe3284afe0efca8c132
-rw-r--r--include/ui/Fence.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/include/ui/Fence.h b/include/ui/Fence.h
index fa4b9bc0db..48a7aa3c5c 100644
--- a/include/ui/Fence.h
+++ b/include/ui/Fence.h
@@ -27,6 +27,8 @@
#include <utils/String8.h>
#include <utils/Timers.h>
+#include <experimental/optional>
+
struct ANativeWindowBuffer;
namespace android {
@@ -96,16 +98,26 @@ public:
// occurs then -1 is returned.
nsecs_t getSignalTime() const;
+#if __cplusplus > 201103L
// hasSignaled returns whether the fence has signaled yet. Prefer this to
// getSignalTime() or wait() if all you care about is whether the fence has
- // signaled.
- inline bool hasSignaled() {
+ // signaled. Returns an optional bool, which will have a value if there was
+ // no error.
+ inline std::experimental::optional<bool> hasSignaled() {
// The sync_wait call underlying wait() has been measured to be
// significantly faster than the sync_fence_info call underlying
// getSignalTime(), which might otherwise appear to be the more obvious
// way to check whether a fence has signaled.
- return wait(0) == NO_ERROR;
+ switch (wait(0)) {
+ case NO_ERROR:
+ return true;
+ case -ETIME:
+ return false;
+ default:
+ return {};
+ }
}
+#endif
// Flattenable interface
size_t getFlattenedSize() const;