diff options
Diffstat (limited to 'core/jni/android_view_InputEventSender.cpp')
-rw-r--r-- | core/jni/android_view_InputEventSender.cpp | 84 |
1 files changed, 38 insertions, 46 deletions
diff --git a/core/jni/android_view_InputEventSender.cpp b/core/jni/android_view_InputEventSender.cpp index f156b9a..e7388cf 100644 --- a/core/jni/android_view_InputEventSender.cpp +++ b/core/jni/android_view_InputEventSender.cpp @@ -18,10 +18,6 @@ //#define LOG_NDEBUG 0 -// Log debug messages about the dispatch cycle. -#define DEBUG_DISPATCH_CYCLE 0 - - #include "JNIHelp.h" #include <android_runtime/AndroidRuntime.h> @@ -37,8 +33,13 @@ #include <ScopedLocalRef.h> +#include "core_jni_helpers.h" + namespace android { +// Log debug messages about the dispatch cycle. +static const bool kDebugDispatchCycle = false; + static struct { jclass clazz; @@ -82,9 +83,9 @@ NativeInputEventSender::NativeInputEventSender(JNIEnv* env, mSenderWeakGlobal(env->NewGlobalRef(senderWeak)), mInputPublisher(inputChannel), mMessageQueue(messageQueue), mNextPublishedSeq(1) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Initializing input event sender.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Initializing input event sender.", getInputChannelName()); + } } NativeInputEventSender::~NativeInputEventSender() { @@ -99,17 +100,17 @@ status_t NativeInputEventSender::initialize() { } void NativeInputEventSender::dispose() { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Disposing input event sender.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Disposing input event sender.", getInputChannelName()); + } mMessageQueue->getLooper()->removeFd(mInputPublisher.getChannel()->getFd()); } status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* event) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sending key event, seq=%u.", getInputChannelName(), seq); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sending key event, seq=%u.", getInputChannelName(), seq); + } uint32_t publishedSeq = mNextPublishedSeq++; status_t status = mInputPublisher.publishKeyEvent(publishedSeq, @@ -126,9 +127,9 @@ status_t NativeInputEventSender::sendKeyEvent(uint32_t seq, const KeyEvent* even } status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent* event) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Sending motion event, seq=%u.", getInputChannelName(), seq); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Sending motion event, seq=%u.", getInputChannelName(), seq); + } uint32_t publishedSeq; for (size_t i = 0; i <= event->getHistorySize(); i++) { @@ -153,13 +154,14 @@ status_t NativeInputEventSender::sendMotionEvent(uint32_t seq, const MotionEvent int NativeInputEventSender::handleEvent(int receiveFd, int events, void* data) { if (events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP)) { -#if DEBUG_DISPATCH_CYCLE // This error typically occurs when the consumer has closed the input channel // as part of finishing an IME session, in which case the publisher will // soon be disposed as well. - ALOGD("channel '%s' ~ Consumer closed input channel or an error occurred. " - "events=0x%x", getInputChannelName(), events); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Consumer closed input channel or an error occurred. " + "events=0x%x", getInputChannelName(), events); + } + return 0; // remove the callback } @@ -176,9 +178,9 @@ int NativeInputEventSender::handleEvent(int receiveFd, int events, void* data) { } status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) { -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Receiving finished signals.", getInputChannelName()); + } ScopedLocalRef<jobject> senderObj(env, NULL); bool skipCallbacks = false; @@ -200,12 +202,12 @@ status_t NativeInputEventSender::receiveFinishedSignals(JNIEnv* env) { uint32_t seq = mPublishedSeqMap.valueAt(index); mPublishedSeqMap.removeItemsAt(index); -#if DEBUG_DISPATCH_CYCLE - ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, " - "pendingEvents=%u.", - getInputChannelName(), seq, handled ? "true" : "false", - mPublishedSeqMap.size()); -#endif + if (kDebugDispatchCycle) { + ALOGD("channel '%s' ~ Received finished signal, seq=%u, handled=%s, " + "pendingEvents=%u.", + getInputChannelName(), seq, handled ? "true" : "false", + mPublishedSeqMap.size()); + } if (!skipCallbacks) { if (!senderObj.get()) { @@ -299,26 +301,16 @@ static JNINativeMethod gMethods[] = { (void*)nativeSendMotionEvent }, }; -#define FIND_CLASS(var, className) \ - var = env->FindClass(className); \ - LOG_FATAL_IF(! var, "Unable to find class " className); \ - var = jclass(env->NewGlobalRef(var)); - -#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \ - var = env->GetMethodID(clazz, methodName, methodDescriptor); \ - LOG_FATAL_IF(! var, "Unable to find method " methodName); - int register_android_view_InputEventSender(JNIEnv* env) { - int res = jniRegisterNativeMethods(env, "android/view/InputEventSender", - gMethods, NELEM(gMethods)); - LOG_FATAL_IF(res < 0, "Unable to register native methods."); + int res = RegisterMethodsOrDie(env, "android/view/InputEventSender", gMethods, NELEM(gMethods)); + + jclass clazz = FindClassOrDie(env, "android/view/InputEventSender"); + gInputEventSenderClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); - FIND_CLASS(gInputEventSenderClassInfo.clazz, "android/view/InputEventSender"); + gInputEventSenderClassInfo.dispatchInputEventFinished = GetMethodIDOrDie( + env, gInputEventSenderClassInfo.clazz, "dispatchInputEventFinished", "(IZ)V"); - GET_METHOD_ID(gInputEventSenderClassInfo.dispatchInputEventFinished, - gInputEventSenderClassInfo.clazz, - "dispatchInputEventFinished", "(IZ)V"); - return 0; + return res; } } // namespace android |