Commit e35e4b33 authored by AJITH KUMAR V's avatar AJITH KUMAR V Committed by Commit Bot

[Android] Optimizing event offset operation during hover event processing

Currently, on every hover event we are creating a deep copy of the
event for offsetting purpose. Actually this is needed when any of the
(x,y) offset is updated prior to it. If not updated creating a deep copy
for a 0.0f offset is additional overhead for nothing. Hence doing offsetting
only when either x or y offset is non-zero.

Change-Id: I1f39b4058cad217769ea6ba02b7b87c222420fd9
Reviewed-on: https://chromium-review.googlesource.com/989595Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarJinsuk Kim <jinsukkim@chromium.org>
Commit-Queue: AJITH KUMAR V <ajith.v@samsung.com>
Cr-Commit-Position: refs/heads/master@{#547748}
parent 523c07e8
...@@ -106,10 +106,10 @@ public class EventForwarder { ...@@ -106,10 +106,10 @@ public class EventForwarder {
if (!isValidTouchEventActionForNative(eventAction)) return false; if (!isValidTouchEventActionForNative(eventAction)) return false;
// A zero offset is quite common, in which case the unnecessary copy should be avoided. // A zero offset is quite common, in which case the unnecessary copy should be avoided.
MotionEvent offset = null; boolean didOffsetEvent = false;
if (mCurrentTouchOffsetX != 0 || mCurrentTouchOffsetY != 0) { if (mCurrentTouchOffsetX != 0 || mCurrentTouchOffsetY != 0) {
offset = createOffsetMotionEvent(event); event = createOffsetMotionEvent(event);
event = offset; didOffsetEvent = true;
} }
final int pointerCount = event.getPointerCount(); final int pointerCount = event.getPointerCount();
...@@ -145,7 +145,7 @@ public class EventForwarder { ...@@ -145,7 +145,7 @@ public class EventForwarder {
pointerCount > 1 ? event.getToolType(1) : MotionEvent.TOOL_TYPE_UNKNOWN, pointerCount > 1 ? event.getToolType(1) : MotionEvent.TOOL_TYPE_UNKNOWN,
event.getButtonState(), event.getMetaState(), isTouchHandleEvent); event.getButtonState(), event.getMetaState(), isTouchHandleEvent);
if (offset != null) offset.recycle(); if (didOffsetEvent) event.recycle();
return consumed; return consumed;
} finally { } finally {
TraceEvent.end("sendTouchEvent"); TraceEvent.end("sendTouchEvent");
...@@ -212,7 +212,11 @@ public class EventForwarder { ...@@ -212,7 +212,11 @@ public class EventForwarder {
private boolean sendNativeMouseEvent(MotionEvent event) { private boolean sendNativeMouseEvent(MotionEvent event) {
assert mNativeEventForwarder != 0; assert mNativeEventForwarder != 0;
MotionEvent offsetEvent = createOffsetMotionEvent(event); boolean didOffsetEvent = false;
if (mCurrentTouchOffsetX != 0.0f || mCurrentTouchOffsetY != 0.0f) {
event = createOffsetMotionEvent(event);
didOffsetEvent = true;
}
try { try {
int eventAction = event.getActionMasked(); int eventAction = event.getActionMasked();
...@@ -229,8 +233,8 @@ public class EventForwarder { ...@@ -229,8 +233,8 @@ public class EventForwarder {
if (mLastMouseButtonState == MotionEvent.BUTTON_PRIMARY) { if (mLastMouseButtonState == MotionEvent.BUTTON_PRIMARY) {
float scale = getEventSourceScaling(); float scale = getEventSourceScaling();
nativeOnMouseEvent(mNativeEventForwarder, event.getEventTime(), nativeOnMouseEvent(mNativeEventForwarder, event.getEventTime(),
MotionEvent.ACTION_BUTTON_RELEASE, offsetEvent.getX() / scale, MotionEvent.ACTION_BUTTON_RELEASE, event.getX() / scale,
offsetEvent.getY() / scale, event.getPointerId(0), event.getPressure(0), event.getY() / scale, event.getPointerId(0), event.getPressure(0),
event.getOrientation(0), event.getAxisValue(MotionEvent.AXIS_TILT, 0), event.getOrientation(0), event.getAxisValue(MotionEvent.AXIS_TILT, 0),
MotionEvent.BUTTON_PRIMARY, event.getButtonState(), MotionEvent.BUTTON_PRIMARY, event.getButtonState(),
event.getMetaState(), event.getToolType(0)); event.getMetaState(), event.getToolType(0));
...@@ -259,13 +263,13 @@ public class EventForwarder { ...@@ -259,13 +263,13 @@ public class EventForwarder {
float scale = getEventSourceScaling(); float scale = getEventSourceScaling();
nativeOnMouseEvent(mNativeEventForwarder, event.getEventTime(), eventAction, nativeOnMouseEvent(mNativeEventForwarder, event.getEventTime(), eventAction,
offsetEvent.getX() / scale, offsetEvent.getY() / scale, event.getPointerId(0), event.getX() / scale, event.getY() / scale, event.getPointerId(0),
event.getPressure(0), event.getOrientation(0), event.getPressure(0), event.getOrientation(0),
event.getAxisValue(MotionEvent.AXIS_TILT, 0), getMouseEventActionButton(event), event.getAxisValue(MotionEvent.AXIS_TILT, 0), getMouseEventActionButton(event),
event.getButtonState(), event.getMetaState(), event.getToolType(0)); event.getButtonState(), event.getMetaState(), event.getToolType(0));
return true; return true;
} finally { } finally {
offsetEvent.recycle(); if (didOffsetEvent) event.recycle();
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment