summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsLocklessFifo.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2011-08-12 15:05:15 -0700
committerJason Sams <rjsams@android.com>2011-08-12 15:05:15 -0700
commitbfc7891bdd08f2c16e9ffa592fd9f4ea21ff220d (patch)
treeb4a745fb02532bfb5e96e8fc807bb8415562dc23 /libs/rs/rsLocklessFifo.cpp
parent6e97ed2127bdda72fee739fe9d28011d52155b9c (diff)
downloadframeworks_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.cpp14
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];