diff options
author | 2011-09-13 15:41:01 -0700 | |
---|---|---|
committer | 2011-09-13 15:41:01 -0700 | |
commit | 5316b9eead0c29df36f46d29c17914bc3c61ed9f (patch) | |
tree | bab39b823aaffa5d97014690fbc84505543b5a7a /libs/rs/rsLocklessFifo.cpp | |
parent | 53fc3e18675d47face40b4726414fdc4aacb7d2f (diff) |
Add RS watchdog.
Change-Id: I4c912beb84fa8a37ada0088049f7776132e994b6
Diffstat (limited to 'libs/rs/rsLocklessFifo.cpp')
-rw-r--r-- | libs/rs/rsLocklessFifo.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp index 4d022698ce31..88798058d1a8 100644 --- a/libs/rs/rsLocklessFifo.cpp +++ b/libs/rs/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(); |