Loading services/inputflinger/dispatcher/Entry.cpp +14 −20 Original line number Diff line number Diff line Loading @@ -70,12 +70,6 @@ EventEntry::~EventEntry() { releaseInjectionState(); } std::string EventEntry::getDescription() const { std::string result; appendDescription(result); return result; } void EventEntry::release() { refCount -= 1; if (refCount == 0) { Loading @@ -99,8 +93,8 @@ ConfigurationChangedEntry::ConfigurationChangedEntry(int32_t id, nsecs_t eventTi ConfigurationChangedEntry::~ConfigurationChangedEntry() {} void ConfigurationChangedEntry::appendDescription(std::string& msg) const { msg += StringPrintf("ConfigurationChangedEvent(), policyFlags=0x%08x", policyFlags); std::string ConfigurationChangedEntry::getDescription() const { return StringPrintf("ConfigurationChangedEvent(), policyFlags=0x%08x", policyFlags); } // --- DeviceResetEntry --- Loading @@ -110,8 +104,8 @@ DeviceResetEntry::DeviceResetEntry(int32_t id, nsecs_t eventTime, int32_t device DeviceResetEntry::~DeviceResetEntry() {} void DeviceResetEntry::appendDescription(std::string& msg) const { msg += StringPrintf("DeviceResetEvent(deviceId=%d), policyFlags=0x%08x", deviceId, policyFlags); std::string DeviceResetEntry::getDescription() const { return StringPrintf("DeviceResetEvent(deviceId=%d), policyFlags=0x%08x", deviceId, policyFlags); } // --- FocusEntry --- Loading @@ -126,8 +120,8 @@ FocusEntry::FocusEntry(int32_t id, nsecs_t eventTime, sp<IBinder> connectionToke FocusEntry::~FocusEntry() {} void FocusEntry::appendDescription(std::string& msg) const { msg += StringPrintf("FocusEvent(hasFocus=%s)", hasFocus ? "true" : "false"); std::string FocusEntry::getDescription() const { return StringPrintf("FocusEvent(hasFocus=%s)", hasFocus ? "true" : "false"); } // --- KeyEntry --- Loading @@ -153,12 +147,11 @@ KeyEntry::KeyEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t sou KeyEntry::~KeyEntry() {} void KeyEntry::appendDescription(std::string& msg) const { msg += StringPrintf("KeyEvent"); std::string KeyEntry::getDescription() const { if (!GetBoolProperty("ro.debuggable", false)) { return; return "KeyEvent"; } msg += StringPrintf("(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, " return StringPrintf("KeyEvent(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, " "flags=0x%08x, keyCode=%d, scanCode=%d, metaState=0x%08x, " "repeatCount=%d), policyFlags=0x%08x", deviceId, source, displayId, KeyEvent::actionToString(action), flags, Loading Loading @@ -212,12 +205,12 @@ MotionEntry::MotionEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32 MotionEntry::~MotionEntry() {} void MotionEntry::appendDescription(std::string& msg) const { msg += StringPrintf("MotionEvent"); std::string MotionEntry::getDescription() const { if (!GetBoolProperty("ro.debuggable", false)) { return; return "MotionEvent"; } msg += StringPrintf("(deviceId=%d, source=0x%08x, displayId=%" PRId32 std::string msg; msg += StringPrintf("MotionEvent(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, actionButton=0x%08x, flags=0x%08x, metaState=0x%08x, " "buttonState=0x%08x, " "classification=%s, edgeFlags=0x%08x, xPrecision=%.1f, yPrecision=%.1f, " Loading @@ -235,6 +228,7 @@ void MotionEntry::appendDescription(std::string& msg) const { pointerCoords[i].getY()); } msg += StringPrintf("]), policyFlags=0x%08x", policyFlags); return msg; } // --- DispatchEntry --- Loading services/inputflinger/dispatcher/Entry.h +6 −8 Original line number Diff line number Diff line Loading @@ -81,9 +81,7 @@ struct EventEntry { void release(); virtual void appendDescription(std::string& msg) const = 0; std::string getDescription() const; virtual std::string getDescription() const = 0; protected: EventEntry(int32_t id, Type type, nsecs_t eventTime, uint32_t policyFlags); Loading @@ -93,7 +91,7 @@ protected: struct ConfigurationChangedEntry : EventEntry { explicit ConfigurationChangedEntry(int32_t id, nsecs_t eventTime); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~ConfigurationChangedEntry(); Loading @@ -103,7 +101,7 @@ struct DeviceResetEntry : EventEntry { int32_t deviceId; DeviceResetEntry(int32_t id, nsecs_t eventTime, int32_t deviceId); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~DeviceResetEntry(); Loading @@ -116,7 +114,7 @@ struct FocusEntry : EventEntry { FocusEntry(int32_t id, nsecs_t eventTime, sp<IBinder> connectionToken, bool hasFocus, std::string_view reason); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~FocusEntry(); Loading Loading @@ -148,7 +146,7 @@ struct KeyEntry : EventEntry { KeyEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t source, int32_t displayId, uint32_t policyFlags, int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState, int32_t repeatCount, nsecs_t downTime); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; void recycle(); protected: Loading Loading @@ -182,7 +180,7 @@ struct MotionEntry : EventEntry { float yCursorPosition, nsecs_t downTime, uint32_t pointerCount, const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, float xOffset, float yOffset); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~MotionEntry(); Loading services/inputflinger/dispatcher/InputDispatcher.cpp +36 −20 Original line number Diff line number Diff line Loading @@ -217,6 +217,36 @@ static void dumpRegion(std::string& dump, const Region& region) { } } static std::string dumpQueue(const std::deque<DispatchEntry*>& queue, nsecs_t currentTime) { constexpr size_t maxEntries = 50; // max events to print constexpr size_t skipBegin = maxEntries / 2; const size_t skipEnd = queue.size() - maxEntries / 2; // skip from maxEntries / 2 ... size() - maxEntries/2 // only print from 0 .. skipBegin and then from skipEnd .. size() std::string dump; for (size_t i = 0; i < queue.size(); i++) { const DispatchEntry& entry = *queue[i]; if (i >= skipBegin && i < skipEnd) { dump += StringPrintf(INDENT4 "<skipped %zu entries>\n", skipEnd - skipBegin); i = skipEnd - 1; // it will be incremented to "skipEnd" by 'continue' continue; } dump.append(INDENT4); dump += entry.eventEntry->getDescription(); dump += StringPrintf(", seq=%" PRIu32 ", targetFlags=0x%08x, resolvedAction=%d, age=%" PRId64 "ms", entry.seq, entry.targetFlags, entry.resolvedAction, ns2ms(currentTime - entry.eventEntry->eventTime)); if (entry.deliveryTime != 0) { // This entry was delivered, so add information on how long we've been waiting dump += StringPrintf(", wait=%" PRId64 "ms", ns2ms(currentTime - entry.deliveryTime)); } dump.append("\n"); } return dump; } /** * Find the entry in std::unordered_map by key, and return it. * If the entry is not found, return a default constructed entry. Loading Loading @@ -4454,7 +4484,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { dump += StringPrintf(INDENT "RecentQueue: length=%zu\n", mRecentQueue.size()); for (EventEntry* entry : mRecentQueue) { dump += INDENT2; entry->appendDescription(dump); dump += entry->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - entry->eventTime)); } } else { Loading @@ -4465,7 +4495,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (mPendingEvent) { dump += INDENT "PendingEvent:\n"; dump += INDENT2; mPendingEvent->appendDescription(dump); dump += mPendingEvent->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - mPendingEvent->eventTime)); } else { Loading @@ -4477,7 +4507,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { dump += StringPrintf(INDENT "InboundQueue: length=%zu\n", mInboundQueue.size()); for (EventEntry* entry : mInboundQueue) { dump += INDENT2; entry->appendDescription(dump); dump += entry->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - entry->eventTime)); } } else { Loading Loading @@ -4509,14 +4539,8 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (!connection->outboundQueue.empty()) { dump += StringPrintf(INDENT3 "OutboundQueue: length=%zu\n", connection->outboundQueue.size()); for (DispatchEntry* entry : connection->outboundQueue) { dump.append(INDENT4); entry->eventEntry->appendDescription(dump); dump += StringPrintf(", targetFlags=0x%08x, resolvedAction=%d, age=%" PRId64 "ms\n", entry->targetFlags, entry->resolvedAction, ns2ms(currentTime - entry->eventEntry->eventTime)); } dump += dumpQueue(connection->outboundQueue, currentTime); } else { dump += INDENT3 "OutboundQueue: <empty>\n"; } Loading @@ -4524,15 +4548,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (!connection->waitQueue.empty()) { dump += StringPrintf(INDENT3 "WaitQueue: length=%zu\n", connection->waitQueue.size()); for (DispatchEntry* entry : connection->waitQueue) { dump += INDENT4; entry->eventEntry->appendDescription(dump); dump += StringPrintf(", targetFlags=0x%08x, resolvedAction=%d, " "age=%" PRId64 "ms, wait=%" PRId64 "ms seq=%" PRIu32 "\n", entry->targetFlags, entry->resolvedAction, ns2ms(currentTime - entry->eventEntry->eventTime), ns2ms(currentTime - entry->deliveryTime), entry->seq); } dump += dumpQueue(connection->waitQueue, currentTime); } else { dump += INDENT3 "WaitQueue: <empty>\n"; } Loading Loading
services/inputflinger/dispatcher/Entry.cpp +14 −20 Original line number Diff line number Diff line Loading @@ -70,12 +70,6 @@ EventEntry::~EventEntry() { releaseInjectionState(); } std::string EventEntry::getDescription() const { std::string result; appendDescription(result); return result; } void EventEntry::release() { refCount -= 1; if (refCount == 0) { Loading @@ -99,8 +93,8 @@ ConfigurationChangedEntry::ConfigurationChangedEntry(int32_t id, nsecs_t eventTi ConfigurationChangedEntry::~ConfigurationChangedEntry() {} void ConfigurationChangedEntry::appendDescription(std::string& msg) const { msg += StringPrintf("ConfigurationChangedEvent(), policyFlags=0x%08x", policyFlags); std::string ConfigurationChangedEntry::getDescription() const { return StringPrintf("ConfigurationChangedEvent(), policyFlags=0x%08x", policyFlags); } // --- DeviceResetEntry --- Loading @@ -110,8 +104,8 @@ DeviceResetEntry::DeviceResetEntry(int32_t id, nsecs_t eventTime, int32_t device DeviceResetEntry::~DeviceResetEntry() {} void DeviceResetEntry::appendDescription(std::string& msg) const { msg += StringPrintf("DeviceResetEvent(deviceId=%d), policyFlags=0x%08x", deviceId, policyFlags); std::string DeviceResetEntry::getDescription() const { return StringPrintf("DeviceResetEvent(deviceId=%d), policyFlags=0x%08x", deviceId, policyFlags); } // --- FocusEntry --- Loading @@ -126,8 +120,8 @@ FocusEntry::FocusEntry(int32_t id, nsecs_t eventTime, sp<IBinder> connectionToke FocusEntry::~FocusEntry() {} void FocusEntry::appendDescription(std::string& msg) const { msg += StringPrintf("FocusEvent(hasFocus=%s)", hasFocus ? "true" : "false"); std::string FocusEntry::getDescription() const { return StringPrintf("FocusEvent(hasFocus=%s)", hasFocus ? "true" : "false"); } // --- KeyEntry --- Loading @@ -153,12 +147,11 @@ KeyEntry::KeyEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t sou KeyEntry::~KeyEntry() {} void KeyEntry::appendDescription(std::string& msg) const { msg += StringPrintf("KeyEvent"); std::string KeyEntry::getDescription() const { if (!GetBoolProperty("ro.debuggable", false)) { return; return "KeyEvent"; } msg += StringPrintf("(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, " return StringPrintf("KeyEvent(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, " "flags=0x%08x, keyCode=%d, scanCode=%d, metaState=0x%08x, " "repeatCount=%d), policyFlags=0x%08x", deviceId, source, displayId, KeyEvent::actionToString(action), flags, Loading Loading @@ -212,12 +205,12 @@ MotionEntry::MotionEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32 MotionEntry::~MotionEntry() {} void MotionEntry::appendDescription(std::string& msg) const { msg += StringPrintf("MotionEvent"); std::string MotionEntry::getDescription() const { if (!GetBoolProperty("ro.debuggable", false)) { return; return "MotionEvent"; } msg += StringPrintf("(deviceId=%d, source=0x%08x, displayId=%" PRId32 std::string msg; msg += StringPrintf("MotionEvent(deviceId=%d, source=0x%08x, displayId=%" PRId32 ", action=%s, actionButton=0x%08x, flags=0x%08x, metaState=0x%08x, " "buttonState=0x%08x, " "classification=%s, edgeFlags=0x%08x, xPrecision=%.1f, yPrecision=%.1f, " Loading @@ -235,6 +228,7 @@ void MotionEntry::appendDescription(std::string& msg) const { pointerCoords[i].getY()); } msg += StringPrintf("]), policyFlags=0x%08x", policyFlags); return msg; } // --- DispatchEntry --- Loading
services/inputflinger/dispatcher/Entry.h +6 −8 Original line number Diff line number Diff line Loading @@ -81,9 +81,7 @@ struct EventEntry { void release(); virtual void appendDescription(std::string& msg) const = 0; std::string getDescription() const; virtual std::string getDescription() const = 0; protected: EventEntry(int32_t id, Type type, nsecs_t eventTime, uint32_t policyFlags); Loading @@ -93,7 +91,7 @@ protected: struct ConfigurationChangedEntry : EventEntry { explicit ConfigurationChangedEntry(int32_t id, nsecs_t eventTime); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~ConfigurationChangedEntry(); Loading @@ -103,7 +101,7 @@ struct DeviceResetEntry : EventEntry { int32_t deviceId; DeviceResetEntry(int32_t id, nsecs_t eventTime, int32_t deviceId); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~DeviceResetEntry(); Loading @@ -116,7 +114,7 @@ struct FocusEntry : EventEntry { FocusEntry(int32_t id, nsecs_t eventTime, sp<IBinder> connectionToken, bool hasFocus, std::string_view reason); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~FocusEntry(); Loading Loading @@ -148,7 +146,7 @@ struct KeyEntry : EventEntry { KeyEntry(int32_t id, nsecs_t eventTime, int32_t deviceId, uint32_t source, int32_t displayId, uint32_t policyFlags, int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState, int32_t repeatCount, nsecs_t downTime); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; void recycle(); protected: Loading Loading @@ -182,7 +180,7 @@ struct MotionEntry : EventEntry { float yCursorPosition, nsecs_t downTime, uint32_t pointerCount, const PointerProperties* pointerProperties, const PointerCoords* pointerCoords, float xOffset, float yOffset); virtual void appendDescription(std::string& msg) const; std::string getDescription() const override; protected: virtual ~MotionEntry(); Loading
services/inputflinger/dispatcher/InputDispatcher.cpp +36 −20 Original line number Diff line number Diff line Loading @@ -217,6 +217,36 @@ static void dumpRegion(std::string& dump, const Region& region) { } } static std::string dumpQueue(const std::deque<DispatchEntry*>& queue, nsecs_t currentTime) { constexpr size_t maxEntries = 50; // max events to print constexpr size_t skipBegin = maxEntries / 2; const size_t skipEnd = queue.size() - maxEntries / 2; // skip from maxEntries / 2 ... size() - maxEntries/2 // only print from 0 .. skipBegin and then from skipEnd .. size() std::string dump; for (size_t i = 0; i < queue.size(); i++) { const DispatchEntry& entry = *queue[i]; if (i >= skipBegin && i < skipEnd) { dump += StringPrintf(INDENT4 "<skipped %zu entries>\n", skipEnd - skipBegin); i = skipEnd - 1; // it will be incremented to "skipEnd" by 'continue' continue; } dump.append(INDENT4); dump += entry.eventEntry->getDescription(); dump += StringPrintf(", seq=%" PRIu32 ", targetFlags=0x%08x, resolvedAction=%d, age=%" PRId64 "ms", entry.seq, entry.targetFlags, entry.resolvedAction, ns2ms(currentTime - entry.eventEntry->eventTime)); if (entry.deliveryTime != 0) { // This entry was delivered, so add information on how long we've been waiting dump += StringPrintf(", wait=%" PRId64 "ms", ns2ms(currentTime - entry.deliveryTime)); } dump.append("\n"); } return dump; } /** * Find the entry in std::unordered_map by key, and return it. * If the entry is not found, return a default constructed entry. Loading Loading @@ -4454,7 +4484,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { dump += StringPrintf(INDENT "RecentQueue: length=%zu\n", mRecentQueue.size()); for (EventEntry* entry : mRecentQueue) { dump += INDENT2; entry->appendDescription(dump); dump += entry->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - entry->eventTime)); } } else { Loading @@ -4465,7 +4495,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (mPendingEvent) { dump += INDENT "PendingEvent:\n"; dump += INDENT2; mPendingEvent->appendDescription(dump); dump += mPendingEvent->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - mPendingEvent->eventTime)); } else { Loading @@ -4477,7 +4507,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { dump += StringPrintf(INDENT "InboundQueue: length=%zu\n", mInboundQueue.size()); for (EventEntry* entry : mInboundQueue) { dump += INDENT2; entry->appendDescription(dump); dump += entry->getDescription(); dump += StringPrintf(", age=%" PRId64 "ms\n", ns2ms(currentTime - entry->eventTime)); } } else { Loading Loading @@ -4509,14 +4539,8 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (!connection->outboundQueue.empty()) { dump += StringPrintf(INDENT3 "OutboundQueue: length=%zu\n", connection->outboundQueue.size()); for (DispatchEntry* entry : connection->outboundQueue) { dump.append(INDENT4); entry->eventEntry->appendDescription(dump); dump += StringPrintf(", targetFlags=0x%08x, resolvedAction=%d, age=%" PRId64 "ms\n", entry->targetFlags, entry->resolvedAction, ns2ms(currentTime - entry->eventEntry->eventTime)); } dump += dumpQueue(connection->outboundQueue, currentTime); } else { dump += INDENT3 "OutboundQueue: <empty>\n"; } Loading @@ -4524,15 +4548,7 @@ void InputDispatcher::dumpDispatchStateLocked(std::string& dump) { if (!connection->waitQueue.empty()) { dump += StringPrintf(INDENT3 "WaitQueue: length=%zu\n", connection->waitQueue.size()); for (DispatchEntry* entry : connection->waitQueue) { dump += INDENT4; entry->eventEntry->appendDescription(dump); dump += StringPrintf(", targetFlags=0x%08x, resolvedAction=%d, " "age=%" PRId64 "ms, wait=%" PRId64 "ms seq=%" PRIu32 "\n", entry->targetFlags, entry->resolvedAction, ns2ms(currentTime - entry->eventEntry->eventTime), ns2ms(currentTime - entry->deliveryTime), entry->seq); } dump += dumpQueue(connection->waitQueue, currentTime); } else { dump += INDENT3 "WaitQueue: <empty>\n"; } Loading