diff options
| author | Jason Sams <rjsams@android.com> | 2011-08-12 15:05:15 -0700 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2011-08-12 15:05:15 -0700 |
| commit | bfc7891bdd08f2c16e9ffa592fd9f4ea21ff220d (patch) | |
| tree | b4a745fb02532bfb5e96e8fc807bb8415562dc23 /libs/rs/rsLocklessFifo.cpp | |
| parent | 6e97ed2127bdda72fee739fe9d28011d52155b9c (diff) | |
| download | frameworks_base-bfc7891bdd08f2c16e9ffa592fd9f4ea21ff220d.zip frameworks_base-bfc7891bdd08f2c16e9ffa592fd9f4ea21ff220d.tar.gz frameworks_base-bfc7891bdd08f2c16e9ffa592fd9f4ea21ff220d.tar.bz2 | |
Fix the RS frame timeout.
Previous a slow app would block from receiving new
commands until the timer expired. This change will
expire the timer immediatly.
Change-Id: I42b949d21f98ee0f1d3156763cd723c3e9cabb67
Diffstat (limited to 'libs/rs/rsLocklessFifo.cpp')
| -rw-r--r-- | libs/rs/rsLocklessFifo.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/rs/rsLocklessFifo.cpp b/libs/rs/rsLocklessFifo.cpp index 7023a1f..02a76ab 100644 --- a/libs/rs/rsLocklessFifo.cpp +++ b/libs/rs/rsLocklessFifo.cpp @@ -129,21 +129,23 @@ void LocklessCommandFifo::flush() { //dumpState("flush 2"); } -void LocklessCommandFifo::wait() { +bool LocklessCommandFifo::wait(uint64_t timeout) { while (isEmpty() && !mInShutdown) { mSignalToControl.set(); - mSignalToWorker.wait(); + return mSignalToWorker.wait(timeout); } + return true; } -const void * LocklessCommandFifo::get(uint32_t *command, uint32_t *bytesData) { +const void * LocklessCommandFifo::get(uint32_t *command, uint32_t *bytesData, uint64_t timeout) { while (1) { //dumpState("get"); - wait(); - if (mInShutdown) { + wait(timeout); + + if (isEmpty() || mInShutdown) { *command = 0; *bytesData = 0; - return 0; + return NULL; } *command = reinterpret_cast<const uint16_t *>(mGet)[0]; |
