From 7157f6fe13ab7e2fef44cc33c95d1c531418220f Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Wed, 6 Apr 2011 17:19:48 -0700 Subject: [PATCH] Allow batching samples onto the pending motion event. (DO NOT MERGE) This enlarges the window of opportunity for batching to encompass time spent for the window to become ready (while it is busy processing the last event). Change-Id: I8870cc3081d27a4de659fb4e375f888fe966460b --- services/input/InputDispatcher.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/services/input/InputDispatcher.cpp b/services/input/InputDispatcher.cpp index 7ac2f13440880..5e6f241923212 100644 --- a/services/input/InputDispatcher.cpp +++ b/services/input/InputDispatcher.cpp @@ -2403,6 +2403,34 @@ void InputDispatcher::notifyMotion(nsecs_t eventTime, int32_t deviceId, uint32_t return; // done! } + // BATCHING ONTO PENDING EVENT CASE + // + // Try to append a move sample to the currently pending event, if there is one. + // We can do this as long as we are still waiting to find the targets for the + // event. Once the targets are locked-in we can only do streaming. + if (mPendingEvent + && (!mPendingEvent->dispatchInProgress || !mCurrentInputTargetsValid) + && mPendingEvent->type == EventEntry::TYPE_MOTION) { + MotionEntry* motionEntry = static_cast(mPendingEvent); + if (motionEntry->deviceId == deviceId && motionEntry->source == source) { + if (motionEntry->action != action + || motionEntry->pointerCount != pointerCount + || motionEntry->isInjected()) { + // Pending event is not compatible for appending new samples. Stop here. + goto NoBatchingOrStreaming; + } + + // The pending motion event is a move and is compatible for appending. + // Do the batching magic. + mAllocator.appendMotionSample(motionEntry, eventTime, pointerCoords); +#if DEBUG_BATCHING + LOGD("Appended motion sample onto batch for the pending motion event."); +#endif + mLock.unlock(); + return; // done! + } + } + // STREAMING CASE // // There is no pending motion event (of any kind) for this device in the inbound queue.