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

Commit c94dafee authored by Siarhei Vishniakou's avatar Siarhei Vishniakou
Browse files

Add log for events dropped by InputState

Before this CL, events could be silently dropped. This is because
InputState acts as a "verifier" in a way - if an incorrect stream is
detected, it doesn't crash, but simply skips the event.

In this CL, log is added so that we learn about these drops if something
goes wrong.
In theory, this should never happen because the InputState should never
receive an inconsistent stream to begin with.

Bug: 281806933
Note: the actual test will be added in a later patch
Test: m inputflinger_tests && adb sync data && adb shell -t data/nativetest64/inputflinger_tests/inputflinger_tests --gtest_filter="*MultiplePointersWithRotatingWindow"
Change-Id: I1a0b417872d03e3b1b11dd68b9bbe3a0dc057a14
parent f6e3079e
Loading
Loading
Loading
Loading
+4 −10
Original line number Diff line number Diff line
@@ -3292,11 +3292,8 @@ void InputDispatcher::enqueueDispatchEntryLocked(const std::shared_ptr<Connectio

            if (!connection->inputState.trackKey(keyEntry, dispatchEntry->resolvedAction,
                                                 dispatchEntry->resolvedFlags)) {
                if (DEBUG_DISPATCH_CYCLE) {
                    ALOGD("channel '%s' ~ enqueueDispatchEntryLocked: skipping inconsistent key "
                          "event",
                          connection->getInputChannelName().c_str());
                }
                LOG(WARNING) << "channel " << connection->getInputChannelName()
                             << "~ dropping inconsistent event: " << *dispatchEntry;
                return; // skip the inconsistent event
            }
            break;
@@ -3349,11 +3346,8 @@ void InputDispatcher::enqueueDispatchEntryLocked(const std::shared_ptr<Connectio

            if (!connection->inputState.trackMotion(motionEntry, dispatchEntry->resolvedAction,
                                                    dispatchEntry->resolvedFlags)) {
                if (DEBUG_DISPATCH_CYCLE) {
                    ALOGD("channel '%s' ~ enqueueDispatchEntryLocked: skipping inconsistent motion "
                          "event",
                          connection->getInputChannelName().c_str());
                }
                LOG(WARNING) << "channel " << connection->getInputChannelName()
                             << "~ dropping inconsistent event: " << *dispatchEntry;
                return; // skip the inconsistent event
            }

+3 −15
Original line number Diff line number Diff line
@@ -93,11 +93,7 @@ bool InputState::trackMotion(const MotionEntry& entry, int32_t action, int32_t f
                mMotionMementos.erase(mMotionMementos.begin() + index);
                return true;
            }
            if (DEBUG_OUTBOUND_EVENT_DETAILS) {
                ALOGD("Dropping inconsistent motion up or cancel event: deviceId=%d, source=%08x, "
                      "displayId=%" PRId32 ", actionMasked=%d",
                      entry.deviceId, entry.source, entry.displayId, actionMasked);
            }

            return false;
        }

@@ -150,11 +146,7 @@ bool InputState::trackMotion(const MotionEntry& entry, int32_t action, int32_t f
                    return true;
                }
            }
            if (DEBUG_OUTBOUND_EVENT_DETAILS) {
                ALOGD("Dropping inconsistent motion pointer up/down or move event: "
                      "deviceId=%d, source=%08x, displayId=%" PRId32 ", actionMasked=%d",
                      entry.deviceId, entry.source, entry.displayId, actionMasked);
            }

            return false;
        }

@@ -164,11 +156,7 @@ bool InputState::trackMotion(const MotionEntry& entry, int32_t action, int32_t f
                mMotionMementos.erase(mMotionMementos.begin() + index);
                return true;
            }
            if (DEBUG_OUTBOUND_EVENT_DETAILS) {
                ALOGD("Dropping inconsistent motion hover exit event: deviceId=%d, source=%08x, "
                      "displayId=%" PRId32,
                      entry.deviceId, entry.source, entry.displayId);
            }

            return false;
        }