summaryrefslogtreecommitdiff
path: root/rsLocklessFifo.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2011-09-13 15:41:01 -0700
committerJason Sams <rjsams@android.com>2011-09-13 15:41:01 -0700
commit2382aba4a55c6ae74789c478eead8fbd96593321 (patch)
tree0caf2705b4afd76b3a1c372e7de64a86c73f1ca6 /rsLocklessFifo.cpp
parent3f2c944c21af553eb06421aec1fbebf0f4c45e3c (diff)
downloadrs-2382aba4a55c6ae74789c478eead8fbd96593321.tar.gz
Add RS watchdog.
Change-Id: I4c912beb84fa8a37ada0088049f7776132e994b6
Diffstat (limited to 'rsLocklessFifo.cpp')
-rw-r--r--rsLocklessFifo.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/rsLocklessFifo.cpp b/rsLocklessFifo.cpp
index 4d022698..88798058 100644
--- a/rsLocklessFifo.cpp
+++ b/rsLocklessFifo.cpp
@@ -22,6 +22,9 @@ using namespace android;
using namespace android::renderscript;
LocklessCommandFifo::LocklessCommandFifo() : mBuffer(0), mInitialized(false) {
+ mTimeoutCallback = NULL;
+ mTimeoutCallbackData = NULL;
+ mTimeoutWait = 0;
}
LocklessCommandFifo::~LocklessCommandFifo() {
@@ -125,11 +128,21 @@ void LocklessCommandFifo::commitSync(uint32_t command, uint32_t sizeInBytes) {
void LocklessCommandFifo::flush() {
//dumpState("flush 1");
while (mPut != mGet) {
- mSignalToControl.wait();
+ while (!mSignalToControl.wait(mTimeoutWait)) {
+ if (mTimeoutCallback) {
+ mTimeoutCallback(mTimeoutCallbackData);
+ }
+ }
}
//dumpState("flush 2");
}
+void LocklessCommandFifo::setTimoutCallback(void (*cbk)(void *), void *data, uint64_t timeout) {
+ mTimeoutCallback = cbk;
+ mTimeoutCallbackData = data;
+ mTimeoutWait = timeout;
+}
+
bool LocklessCommandFifo::wait(uint64_t timeout) {
while (isEmpty() && !mInShutdown) {
mSignalToControl.set();