Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80d685ae authored by arthurhung's avatar arthurhung Committed by Arthur Hung
Browse files

Clear spam log for INPUT_FEATURE_NO_INPUT_CHANNEL window

Currently, in order to detect occlusion input, all buffered layers
would update input info into InputFlinger, so the window may contain
null token, we should check if id is also identical to prevent get the
wrong result.

Bug: 159349058
Test: Enable show tap, open bubble and watch logs.
Change-Id: Ia1841ba51bce00fc9901fdf7324e8e31d9737082
parent 402bbb4a
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -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;
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->getToken() == windowHandle->getToken()) {
                if (windowHandle->getInfo()->displayId != it.first) {
        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(), it.first,
                      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());
            }
+2 −1
Original line number Diff line number Diff line
@@ -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.