diff options
author | Jason Sams <rjsams@android.com> | 2011-09-13 15:41:01 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2011-09-13 15:41:01 -0700 |
commit | 2382aba4a55c6ae74789c478eead8fbd96593321 (patch) | |
tree | 0caf2705b4afd76b3a1c372e7de64a86c73f1ca6 /rsLocklessFifo.cpp | |
parent | 3f2c944c21af553eb06421aec1fbebf0f4c45e3c (diff) | |
download | rs-2382aba4a55c6ae74789c478eead8fbd96593321.tar.gz |
Add RS watchdog.
Change-Id: I4c912beb84fa8a37ada0088049f7776132e994b6
Diffstat (limited to 'rsLocklessFifo.cpp')
-rw-r--r-- | rsLocklessFifo.cpp | 15 |
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(); |