summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author arthurhung <arthurhung@google.com> 2020-06-23 13:44:31 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-06-23 13:44:31 +0000
commit5d7b212a3ffab65c7d55b272a860d6a6a6505380 (patch)
treee6f04395215b02ba886dee778961b5e7f197830c
parentb68b87bc7fb012615bda386f6971e82326280761 (diff)
parent80d685aef18683ed175e0a3fddbd8f55a83c788d (diff)
Clear spam log for INPUT_FEATURE_NO_INPUT_CHANNEL window am: 80d685aef1
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/11931262 Change-Id: I4819c79860bf792e86a12e9703b62b2e84e4d582
-rw-r--r--services/inputflinger/dispatcher/InputDispatcher.cpp33
-rw-r--r--services/inputflinger/dispatcher/InputDispatcher.h3
2 files changed, 21 insertions, 15 deletions
diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp
index f011992daa..cb68355e91 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.cpp
+++ b/services/inputflinger/dispatcher/InputDispatcher.cpp
@@ -3569,6 +3569,10 @@ std::vector<sp<InputWindowHandle>> InputDispatcher::getWindowHandlesLocked(
sp<InputWindowHandle> InputDispatcher::getWindowHandleLocked(
const sp<IBinder>& windowHandleToken) const {
+ if (windowHandleToken == nullptr) {
+ return nullptr;
+ }
+
for (auto& it : mWindowHandlesByDisplay) {
const std::vector<sp<InputWindowHandle>> windowHandles = it.second;
for (const sp<InputWindowHandle>& windowHandle : windowHandles) {
@@ -3580,21 +3584,22 @@ sp<InputWindowHandle> InputDispatcher::getWindowHandleLocked(
return nullptr;
}
-bool InputDispatcher::hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle) const {
- for (auto& it : mWindowHandlesByDisplay) {
- const std::vector<sp<InputWindowHandle>> windowHandles = it.second;
- for (const sp<InputWindowHandle>& handle : windowHandles) {
- if (handle->getToken() == windowHandle->getToken()) {
- if (windowHandle->getInfo()->displayId != it.first) {
- ALOGE("Found window %s in display %" PRId32
- ", but it should belong to display %" PRId32,
- windowHandle->getName().c_str(), it.first,
- windowHandle->getInfo()->displayId);
- }
- return true;
+bool InputDispatcher::hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle,
+ int32_t displayId) const {
+ const std::vector<sp<InputWindowHandle>> windowHandles = getWindowHandlesLocked(displayId);
+ for (const sp<InputWindowHandle>& handle : windowHandles) {
+ if (handle->getId() == windowHandle->getId() &&
+ handle->getToken() == windowHandle->getToken()) {
+ if (handle->getInfo()->displayId != displayId) {
+ ALOGE("Found window %s in display %" PRId32
+ ", but it should belong to display %" PRId32,
+ windowHandle->getName().c_str(), displayId,
+ windowHandle->getInfo()->displayId);
}
+ return true;
}
}
+
return false;
}
@@ -3754,7 +3759,7 @@ void InputDispatcher::setInputWindowsLocked(
TouchState& state = stateIt->second;
for (size_t i = 0; i < state.windows.size();) {
TouchedWindow& touchedWindow = state.windows[i];
- if (!hasWindowHandleLocked(touchedWindow.windowHandle)) {
+ if (!hasWindowHandleLocked(touchedWindow.windowHandle, displayId)) {
if (DEBUG_FOCUS) {
ALOGD("Touched window was removed: %s in display %" PRId32,
touchedWindow.windowHandle->getName().c_str(), displayId);
@@ -3778,7 +3783,7 @@ void InputDispatcher::setInputWindowsLocked(
// Otherwise, they might stick around until the window handle is destroyed
// which might not happen until the next GC.
for (const sp<InputWindowHandle>& oldWindowHandle : oldWindowHandles) {
- if (!hasWindowHandleLocked(oldWindowHandle)) {
+ if (!hasWindowHandleLocked(oldWindowHandle, displayId)) {
if (DEBUG_FOCUS) {
ALOGD("Window went away: %s", oldWindowHandle->getName().c_str());
}
diff --git a/services/inputflinger/dispatcher/InputDispatcher.h b/services/inputflinger/dispatcher/InputDispatcher.h
index e679c6b06f..0f558b4e73 100644
--- a/services/inputflinger/dispatcher/InputDispatcher.h
+++ b/services/inputflinger/dispatcher/InputDispatcher.h
@@ -301,7 +301,8 @@ private:
sp<InputWindowHandle> getWindowHandleLocked(const sp<IBinder>& windowHandleToken) const
REQUIRES(mLock);
sp<InputChannel> getInputChannelLocked(const sp<IBinder>& windowToken) const REQUIRES(mLock);
- bool hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle) const REQUIRES(mLock);
+ bool hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle, int32_t displayId) const
+ REQUIRES(mLock);
/*
* Validate and update InputWindowHandles for a given display.