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

Commit f7e67dbf authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add dump of pending focus requests"

parents 0805c0a8 ad991405
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -4404,6 +4404,24 @@ std::string InputDispatcher::dumpFocusedWindowsLocked() {
    return dump;
}

std::string InputDispatcher::dumpPendingFocusRequestsLocked() {
    if (mPendingFocusRequests.empty()) {
        return INDENT "mPendingFocusRequests: <none>\n";
    }

    std::string dump;
    dump += INDENT "mPendingFocusRequests:\n";
    for (const auto& [displayId, focusRequest] : mPendingFocusRequests) {
        // Rather than printing raw values for focusRequest.token and focusRequest.focusedToken,
        // try to resolve them to actual windows.
        std::string windowName = getConnectionNameLocked(focusRequest.token);
        std::string focusedWindowName = getConnectionNameLocked(focusRequest.focusedToken);
        dump += StringPrintf(INDENT2 "displayId=%" PRId32 ", token->%s, focusedToken->%s\n",
                             displayId, windowName.c_str(), focusedWindowName.c_str());
    }
    return dump;
}

void InputDispatcher::dumpDispatchStateLocked(std::string& dump) {
    dump += StringPrintf(INDENT "DispatchEnabled: %s\n", toString(mDispatchEnabled));
    dump += StringPrintf(INDENT "DispatchFrozen: %s\n", toString(mDispatchFrozen));
@@ -4426,6 +4444,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) {
    }

    dump += dumpFocusedWindowsLocked();
    dump += dumpPendingFocusRequestsLocked();

    if (!mTouchStatesByDisplay.empty()) {
        dump += StringPrintf(INDENT "TouchStatesByDisplay:\n");
@@ -4833,6 +4852,14 @@ sp<Connection> InputDispatcher::getConnectionLocked(const sp<IBinder>& inputConn
    return nullptr;
}

std::string InputDispatcher::getConnectionNameLocked(const sp<IBinder>& connectionToken) const {
    sp<Connection> connection = getConnectionLocked(connectionToken);
    if (connection == nullptr) {
        return "<nullptr>";
    }
    return connection->getInputChannelName();
}

void InputDispatcher::removeConnectionLocked(const sp<Connection>& connection) {
    mAnrTracker.eraseToken(connection->inputChannel->getConnectionToken());
    removeByValue(mConnectionsByFd, connection);
+3 −0
Original line number Diff line number Diff line
@@ -210,6 +210,8 @@ private:
    sp<Connection> getConnectionLocked(const sp<IBinder>& inputConnectionToken) const
            REQUIRES(mLock);

    std::string getConnectionNameLocked(const sp<IBinder>& connectionToken) const REQUIRES(mLock);

    void removeConnectionLocked(const sp<Connection>& connection) REQUIRES(mLock);

    struct IBinderHash {
@@ -532,6 +534,7 @@ private:
    void dumpMonitors(std::string& dump, const std::vector<Monitor>& monitors);
    void logDispatchStateLocked() REQUIRES(mLock);
    std::string dumpFocusedWindowsLocked() REQUIRES(mLock);
    std::string dumpPendingFocusRequestsLocked() REQUIRES(mLock);

    // Registration.
    void removeMonitorChannelLocked(const sp<IBinder>& connectionToken) REQUIRES(mLock);