diff options
Diffstat (limited to 'services/inputflinger')
| -rw-r--r-- | services/inputflinger/InputListener.cpp | 95 | ||||
| -rw-r--r-- | services/inputflinger/InputManager.cpp | 19 | ||||
| -rw-r--r-- | services/inputflinger/InputManager.h | 2 | ||||
| -rw-r--r-- | services/inputflinger/dispatcher/InputDispatcher.cpp | 46 | ||||
| -rw-r--r-- | services/inputflinger/include/InputListener.h | 22 |
5 files changed, 133 insertions, 51 deletions
diff --git a/services/inputflinger/InputListener.cpp b/services/inputflinger/InputListener.cpp index aa55873aa5..d319d6dbb4 100644 --- a/services/inputflinger/InputListener.cpp +++ b/services/inputflinger/InputListener.cpp @@ -24,7 +24,7 @@ #include <android-base/stringprintf.h> #include <android/log.h> -#include <utils/Trace.h> +#include <input/TraceTools.h> using android::base::StringPrintf; @@ -61,58 +61,42 @@ void InputListenerInterface::notify(const NotifyArgs& generalArgs) { // --- QueuedInputListener --- -static inline void traceEvent(const char* functionName, int32_t id) { - if (ATRACE_ENABLED()) { - std::string message = StringPrintf("%s(id=0x%" PRIx32 ")", functionName, id); - ATRACE_NAME(message.c_str()); - } -} - QueuedInputListener::QueuedInputListener(InputListenerInterface& innerListener) : mInnerListener(innerListener) {} void QueuedInputListener::notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyConfigurationChanged(const NotifyConfigurationChangedArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyKey(const NotifyKeyArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyMotion(const NotifyMotionArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifySwitch(const NotifySwitchArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifySensor(const NotifySensorArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyVibratorState(const NotifyVibratorStateArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } void QueuedInputListener::notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs& args) { - traceEvent(__func__, args.id); mArgsQueue.emplace_back(args); } @@ -123,4 +107,81 @@ void QueuedInputListener::flush() { mArgsQueue.clear(); } +// --- TracedInputListener --- + +TracedInputListener::TracedInputListener(const char* name, InputListenerInterface& innerListener) + : mInnerListener(innerListener), mName(name) {} + +void TracedInputListener::notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyConfigurationChanged(const NotifyConfigurationChangedArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyKey(const NotifyKeyArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyMotion(const NotifyMotionArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifySwitch(const NotifySwitchArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifySensor(const NotifySensorArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyVibratorState(const NotifyVibratorStateArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + +void TracedInputListener::notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs& args) { + constexpr static auto& fnName = __func__; + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("%s::%s(id=0x%" PRIx32 ")", mName, fnName, args.id); + }); + mInnerListener.notify(args); +} + } // namespace android diff --git a/services/inputflinger/InputManager.cpp b/services/inputflinger/InputManager.cpp index da79ae3a48..0733a1c7c6 100644 --- a/services/inputflinger/InputManager.cpp +++ b/services/inputflinger/InputManager.cpp @@ -122,15 +122,24 @@ InputManager::InputManager(const sp<InputReaderPolicyInterface>& readerPolicy, mInputFlingerRust = createInputFlingerRust(); mDispatcher = createInputDispatcher(dispatcherPolicy); + mTracingStages.emplace_back( + std::make_unique<TracedInputListener>("InputDispatcher", *mDispatcher)); if (ENABLE_INPUT_DEVICE_USAGE_METRICS) { - mCollector = std::make_unique<InputDeviceMetricsCollector>(*mDispatcher); + mCollector = std::make_unique<InputDeviceMetricsCollector>(*mTracingStages.back()); + mTracingStages.emplace_back( + std::make_unique<TracedInputListener>("MetricsCollector", *mCollector)); } - mProcessor = ENABLE_INPUT_DEVICE_USAGE_METRICS ? std::make_unique<InputProcessor>(*mCollector) - : std::make_unique<InputProcessor>(*mDispatcher); - mBlocker = std::make_unique<UnwantedInteractionBlocker>(*mProcessor); - mReader = createInputReader(readerPolicy, *mBlocker); + mProcessor = std::make_unique<InputProcessor>(*mTracingStages.back()); + mTracingStages.emplace_back( + std::make_unique<TracedInputListener>("InputProcessor", *mProcessor)); + + mBlocker = std::make_unique<UnwantedInteractionBlocker>(*mTracingStages.back()); + mTracingStages.emplace_back( + std::make_unique<TracedInputListener>("UnwantedInteractionBlocker", *mBlocker)); + + mReader = createInputReader(readerPolicy, *mTracingStages.back()); } InputManager::~InputManager() { diff --git a/services/inputflinger/InputManager.h b/services/inputflinger/InputManager.h index 528d2aa5ca..51d582fba1 100644 --- a/services/inputflinger/InputManager.h +++ b/services/inputflinger/InputManager.h @@ -137,6 +137,8 @@ private: std::unique_ptr<InputDispatcherInterface> mDispatcher; std::shared_ptr<IInputFlingerRust> mInputFlingerRust; + + std::vector<std::unique_ptr<TracedInputListener>> mTracingStages; }; } // namespace android diff --git a/services/inputflinger/dispatcher/InputDispatcher.cpp b/services/inputflinger/dispatcher/InputDispatcher.cpp index 630542fe47..13dbe656dd 100644 --- a/services/inputflinger/dispatcher/InputDispatcher.cpp +++ b/services/inputflinger/dispatcher/InputDispatcher.cpp @@ -32,6 +32,7 @@ #endif #include <input/InputDevice.h> #include <input/PrintTools.h> +#include <input/TraceTools.h> #include <openssl/mem.h> #include <powermanager/PowerManager.h> #include <unistd.h> @@ -3161,12 +3162,10 @@ void InputDispatcher::prepareDispatchCycleLocked(nsecs_t currentTime, const std::shared_ptr<Connection>& connection, std::shared_ptr<EventEntry> eventEntry, const InputTarget& inputTarget) { - if (ATRACE_ENABLED()) { - std::string message = - StringPrintf("prepareDispatchCycleLocked(inputChannel=%s, id=0x%" PRIx32 ")", - connection->getInputChannelName().c_str(), eventEntry->id); - ATRACE_NAME(message.c_str()); - } + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("prepareDispatchCycleLocked(inputChannel=%s, id=0x%" PRIx32 ")", + connection->getInputChannelName().c_str(), eventEntry->id); + }); if (DEBUG_DISPATCH_CYCLE) { ALOGD("channel '%s' ~ prepareDispatchCycle - flags=%s, " "globalScaleFactor=%f, pointerIds=%s %s", @@ -3231,12 +3230,10 @@ void InputDispatcher::enqueueDispatchEntriesLocked(nsecs_t currentTime, const std::shared_ptr<Connection>& connection, std::shared_ptr<EventEntry> eventEntry, const InputTarget& inputTarget) { - if (ATRACE_ENABLED()) { - std::string message = - StringPrintf("enqueueDispatchEntriesLocked(inputChannel=%s, id=0x%" PRIx32 ")", - connection->getInputChannelName().c_str(), eventEntry->id); - ATRACE_NAME(message.c_str()); - } + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("enqueueDispatchEntriesLocked(inputChannel=%s, id=0x%" PRIx32 ")", + connection->getInputChannelName().c_str(), eventEntry->id); + }); LOG_ALWAYS_FATAL_IF(!inputTarget.flags.any(InputTarget::DISPATCH_MASK), "No dispatch flags are set for %s", eventEntry->getDescription().c_str()); @@ -3266,12 +3263,6 @@ void InputDispatcher::enqueueDispatchEntryLocked(const std::shared_ptr<Connectio std::shared_ptr<EventEntry> eventEntry, const InputTarget& inputTarget, ftl::Flags<InputTarget::Flags> dispatchMode) { - if (ATRACE_ENABLED()) { - std::string message = StringPrintf("enqueueDispatchEntry(inputChannel=%s, dispatchMode=%s)", - connection->getInputChannelName().c_str(), - dispatchMode.string().c_str()); - ATRACE_NAME(message.c_str()); - } ftl::Flags<InputTarget::Flags> inputTargetFlags = inputTarget.flags; if (!inputTargetFlags.any(dispatchMode)) { return; @@ -3558,11 +3549,10 @@ status_t InputDispatcher::publishMotionEvent(Connection& connection, void InputDispatcher::startDispatchCycleLocked(nsecs_t currentTime, const std::shared_ptr<Connection>& connection) { - if (ATRACE_ENABLED()) { - std::string message = StringPrintf("startDispatchCycleLocked(inputChannel=%s)", - connection->getInputChannelName().c_str()); - ATRACE_NAME(message.c_str()); - } + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("startDispatchCycleLocked(inputChannel=%s)", + connection->getInputChannelName().c_str()); + }); if (DEBUG_DISPATCH_CYCLE) { ALOGD("channel '%s' ~ startDispatchCycle", connection->getInputChannelName().c_str()); } @@ -4136,12 +4126,10 @@ std::unique_ptr<MotionEntry> InputDispatcher::splitMotionEvent( } int32_t newId = mIdGenerator.nextId(); - if (ATRACE_ENABLED()) { - std::string message = StringPrintf("Split MotionEvent(id=0x%" PRIx32 - ") to MotionEvent(id=0x%" PRIx32 ").", - originalMotionEntry.id, newId); - ATRACE_NAME(message.c_str()); - } + ATRACE_NAME_IF(ATRACE_ENABLED(), [&]() { + return StringPrintf("Split MotionEvent(id=0x%" PRIx32 ") to MotionEvent(id=0x%" PRIx32 ").", + originalMotionEntry.id, newId); + }); std::unique_ptr<MotionEntry> splitMotionEntry = std::make_unique<MotionEntry>(newId, originalMotionEntry.eventTime, originalMotionEntry.deviceId, originalMotionEntry.source, diff --git a/services/inputflinger/include/InputListener.h b/services/inputflinger/include/InputListener.h index 4f78f032c7..0b7f7c2831 100644 --- a/services/inputflinger/include/InputListener.h +++ b/services/inputflinger/include/InputListener.h @@ -76,4 +76,26 @@ private: std::vector<NotifyArgs> mArgsQueue; }; +/* + * An implementation of the listener interface that traces the calls to its inner listener. + */ +class TracedInputListener : public InputListenerInterface { +public: + explicit TracedInputListener(const char* name, InputListenerInterface& innerListener); + + virtual void notifyInputDevicesChanged(const NotifyInputDevicesChangedArgs& args) override; + virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs& args) override; + virtual void notifyKey(const NotifyKeyArgs& args) override; + virtual void notifyMotion(const NotifyMotionArgs& args) override; + virtual void notifySwitch(const NotifySwitchArgs& args) override; + virtual void notifySensor(const NotifySensorArgs& args) override; + virtual void notifyDeviceReset(const NotifyDeviceResetArgs& args) override; + void notifyVibratorState(const NotifyVibratorStateArgs& args) override; + void notifyPointerCaptureChanged(const NotifyPointerCaptureChangedArgs& args) override; + +private: + InputListenerInterface& mInnerListener; + const char* mName; +}; + } // namespace android |