fw-input和fw-view模块分析如下:
>>> fw-input从节点中读取到move事件
M0268D6 02-13 18:36:47.749 707 816 D InputDispatcher: notifyMotion - eventTime=628962363000, deviceId=3, source=0x1002, policyFlags=0x0, action=0x2, actionButton=0x0, flags=0x0, metaState=0x0, buttonState=0x0,edgeFlags=0x0, xPrecision=1.002083, yPrecision=1.001171, downTime=622238160000
>>> fw-input分发move事件
M0268FA 02-13 18:36:47.751 707 815 D InputDispatcher: dispatchMotion - eventTime=628270067000, deviceId=3, source=0x1002, policyFlags=0x62000000, action=0x2, actionButton=0x0, flags=0x0, metaState=0x0, buttonState=0x0,edgeFlags=0x0, xPrecision=1.002083, yPrecision=1.001171, downTime=622238160000
>>> View接收到move事件
M026913 02-13 18:36:47.752 916 916 D SPRD_InputEventReceiver: dispatchInputEvent: event = MotionEvent { action=ACTION_MOVE, actionButton=0, id[0]=0, x[0]=173.63824, y[0]=459.462, toolType[0]=TOOL_TYPE_FINGER, buttonState=0, metaState=0, flags=0x3, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=628270, downTime=622238, deviceId=3, source=0x1002 }, displayId: 0
./core/java/android/view/InputEventReceiver.java
// Clled from native code.
@SuppressWarnings("unused")
private void dispatchInputEvent(int seq, InputEvent event, int displayId) {
mSeqMap.put(event.getSequenceNumber(), seq);
Log.d("SPRD_InputEventReceiver","dispatchInputEvent: event = "+event+ ", displayId: " + displayId);
onInputEvent(event, displayId);
if (sDebugDispatchInput) {
Log.d(TAG, "dispatchInputEvent event: " + event + ", displayId: " + displayId);
}
}
>>> View分发move事件给应用
M026964 02-13 18:36:47.756 1359 1359 D SPRD_View: dispatchTouchEvent: getAction = 2; getEventTime = 628284; getDownTime = 622238
frameworks/base/core/java/android/view/View.java
/**
* Pass the touch screen motion event down to the target view, or this
* view if it is the target.
*
* @param event The motion event to be dispatched.
* @return True if the event was handled by the view, false otherwise.
*/
public boolean dispatchTouchEvent(MotionEvent event) {
Log.d("SPRD_View","dispatchTouchEvent: getAction = "+event.getAction()+"; getEventTime = "+event.getEventTime()+"; getDownTime = "+event.getDownTime());
// If the event should be handled by accessibility focus first.
if (event.isTargetAccessibilityFocus()) {
// We don't have focus or no virtual descendant has it, do not handle the event.
if (!isAccessibilityFocusedViewOrHost()) {
Log.d("SPRD_View","dispatchTouchEvent: 1.getAction = "+event.getAction()+"; getDownTime = "+event.getDownTime()
+"; ***return false***");
return false;
}
// We have focus and got the event, then use normal event dispatch.
event.setTargetAccessibilityFocus(false);
FW部分从事件的接收到分发 18:36:47.749 ---> 18:36:47.756 耗时7ms从FW部分看是没有优化的空间了。
user版本:
python systrace.py am wm view res ss database freq gfx rs hal bionic pm sched idle load binder_driver binder_lock memreclaim dalvik input -t 8 -o test.html -b 10240
debug版本:
python systrace.py -t 8 am wm view res ss database freq sched gfx input idle binder_driver binder_lock dalvik -o 8.1_sharkle_apk.html