summaryrefslogtreecommitdiff
path: root/services/inputflinger
diff options
context:
space:
mode:
Diffstat (limited to 'services/inputflinger')
-rw-r--r--services/inputflinger/InputListener.cpp95
-rw-r--r--services/inputflinger/InputManager.cpp19
-rw-r--r--services/inputflinger/InputManager.h2
-rw-r--r--services/inputflinger/dispatcher/InputDispatcher.cpp46
-rw-r--r--services/inputflinger/include/InputListener.h22
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