diff options
| author | 2020-06-23 13:44:31 +0000 | |
|---|---|---|
| committer | 2020-06-23 13:44:31 +0000 | |
| commit | 5d7b212a3ffab65c7d55b272a860d6a6a6505380 (patch) | |
| tree | e6f04395215b02ba886dee778961b5e7f197830c | |
| parent | b68b87bc7fb012615bda386f6971e82326280761 (diff) | |
| parent | 80d685aef18683ed175e0a3fddbd8f55a83c788d (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.cpp | 33 | ||||
| -rw-r--r-- | services/inputflinger/dispatcher/InputDispatcher.h | 3 |
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. |