Merge "Improve watchdog monitor for InputReader and InputDispatcher."

This commit is contained in:
Jeff Brown
2012-01-27 17:37:31 -08:00
committed by Android (Google) Code Review
4 changed files with 16 additions and 3 deletions

View File

@@ -238,6 +238,8 @@ void InputDispatcher::dispatchOnce() {
nsecs_t nextWakeupTime = LONG_LONG_MAX;
{ // acquire lock
AutoMutex _l(mLock);
mDispatcherIsAliveCondition.broadcast();
dispatchOnceInnerLocked(&nextWakeupTime);
if (runCommandsLockedInterruptible()) {
@@ -4086,6 +4088,8 @@ void InputDispatcher::dump(String8& dump) {
void InputDispatcher::monitor() {
// Acquire and release the lock to ensure that the dispatcher has not deadlocked.
mLock.lock();
mLooper->wake();
mDispatcherIsAliveCondition.wait(mLock);
mLock.unlock();
}

View File

@@ -862,6 +862,8 @@ private:
Mutex mLock;
Condition mDispatcherIsAliveCondition;
sp<Looper> mLooper;
EventEntry* mPendingEvent;

View File

@@ -278,17 +278,20 @@ void InputReader::loopOnce() {
{ // acquire lock
AutoMutex _l(mLock);
mReaderIsAliveCondition.broadcast();
if (count) {
processEventsLocked(mEventBuffer, count);
}
if (!count || timeoutMillis == 0) {
nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
if (now >= mNextTimeout) {
#if DEBUG_RAW_EVENTS
ALOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
ALOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
#endif
mNextTimeout = LLONG_MAX;
timeoutExpiredLocked(now);
mNextTimeout = LLONG_MAX;
timeoutExpiredLocked(now);
}
}
} // release lock
@@ -772,6 +775,8 @@ void InputReader::dump(String8& dump) {
void InputReader::monitor() {
// Acquire and release the lock to ensure that the reader has not deadlocked.
mLock.lock();
mEventHub->wake();
mReaderIsAliveCondition.wait(mLock);
mLock.unlock();
// Check the EventHub

View File

@@ -363,6 +363,8 @@ protected:
private:
Mutex mLock;
Condition mReaderIsAliveCondition;
sp<EventHubInterface> mEventHub;
sp<InputReaderPolicyInterface> mPolicy;
sp<QueuedInputListener> mQueuedListener;