am 120a4594
: Drop all dispatcher state when dispatcher is disabled.
This commit is contained in:
@ -1032,6 +1032,9 @@ private:
|
|||||||
// Splitting motion events across windows.
|
// Splitting motion events across windows.
|
||||||
MotionEntry* splitMotionEvent(const MotionEntry* originalMotionEntry, BitSet32 pointerIds);
|
MotionEntry* splitMotionEvent(const MotionEntry* originalMotionEntry, BitSet32 pointerIds);
|
||||||
|
|
||||||
|
// Reset and drop everything the dispatcher is doing.
|
||||||
|
void resetAndDropEverythingLocked(const char* reason);
|
||||||
|
|
||||||
// Dump state.
|
// Dump state.
|
||||||
void dumpDispatchStateLocked(String8& dump);
|
void dumpDispatchStateLocked(String8& dump);
|
||||||
void logDispatchStateLocked();
|
void logDispatchStateLocked();
|
||||||
|
@ -1302,6 +1302,9 @@ Failed:
|
|||||||
}
|
}
|
||||||
|
|
||||||
Unresponsive:
|
Unresponsive:
|
||||||
|
// Reset temporary touch state to ensure we release unnecessary references to input channels.
|
||||||
|
mTempTouchState.reset();
|
||||||
|
|
||||||
nsecs_t timeSpentWaitingForApplication = getTimeSpentWaitingForApplicationLocked(currentTime);
|
nsecs_t timeSpentWaitingForApplication = getTimeSpentWaitingForApplicationLocked(currentTime);
|
||||||
updateDispatchStatisticsLocked(currentTime, entry,
|
updateDispatchStatisticsLocked(currentTime, entry,
|
||||||
injectionResult, timeSpentWaitingForApplication);
|
injectionResult, timeSpentWaitingForApplication);
|
||||||
@ -2586,10 +2589,14 @@ void InputDispatcher::setInputDispatchMode(bool enabled, bool frozen) {
|
|||||||
AutoMutex _l(mLock);
|
AutoMutex _l(mLock);
|
||||||
|
|
||||||
if (mDispatchEnabled != enabled || mDispatchFrozen != frozen) {
|
if (mDispatchEnabled != enabled || mDispatchFrozen != frozen) {
|
||||||
if (mDispatchFrozen && ! frozen) {
|
if (mDispatchFrozen && !frozen) {
|
||||||
resetANRTimeoutsLocked();
|
resetANRTimeoutsLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mDispatchEnabled && !enabled) {
|
||||||
|
resetAndDropEverythingLocked("dispatcher is being disabled");
|
||||||
|
}
|
||||||
|
|
||||||
mDispatchEnabled = enabled;
|
mDispatchEnabled = enabled;
|
||||||
mDispatchFrozen = frozen;
|
mDispatchFrozen = frozen;
|
||||||
changed = true;
|
changed = true;
|
||||||
@ -2608,6 +2615,21 @@ void InputDispatcher::setInputDispatchMode(bool enabled, bool frozen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InputDispatcher::resetAndDropEverythingLocked(const char* reason) {
|
||||||
|
#if DEBUG_FOCUS
|
||||||
|
LOGD("Resetting and dropping all events (%s).", reason);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
synthesizeCancelationEventsForAllConnectionsLocked(InputState::CANCEL_ALL_EVENTS, reason);
|
||||||
|
|
||||||
|
resetKeyRepeatLocked();
|
||||||
|
releasePendingEventLocked();
|
||||||
|
drainInboundQueueLocked();
|
||||||
|
resetTargetsLocked();
|
||||||
|
|
||||||
|
mTouchState.reset();
|
||||||
|
}
|
||||||
|
|
||||||
void InputDispatcher::logDispatchStateLocked() {
|
void InputDispatcher::logDispatchStateLocked() {
|
||||||
String8 dump;
|
String8 dump;
|
||||||
dumpDispatchStateLocked(dump);
|
dumpDispatchStateLocked(dump);
|
||||||
|
Reference in New Issue
Block a user