通过log中的坐标转成折线图¶
背景¶
经常有用户报一些滑动卡顿、抖动的问题;如果sf分析下来发现没有掉帧,应用接下来往往都会怀疑input有问题。而input遇到这种问题最难分析的原因是: - input log非常少 - input 坐标log即使有打印,也不直观
所以,我们就想办法从log中获取到x,y数据,并转换成折线图。
InputDispatcher::logOutboundMotionDetails¶
在logOutboundMotionDetails()里会打印出 x,y 坐标,但前提是打开了 DEBUG_OUTBOUND_EVENT_DETAILS
打印的log如下:
11-24 15:54:55.297 2690 3885 D InputDispatcher: Pointer 0: id=0, toolType=FINGER, x=1159.152710, y=1975.381226, pressure=1.000000, size=0.486275, touchMajor=123.935303, touchMinor=123.935303, toolMajor=123.935303, toolMinor=123.935303, orientation=0.000000
那我们通过脚本去过滤掉 x,y 坐标,放到 excel 中就可以生成折线图了。
file = "/home/solo/bug/log/InputDispatcher.txt"
with open(file, 'r') as f:
for line in f.readlines():
if "InputDispatcher" in line and "x=" in line and "y=" in line:
array = line.split(",")
x_str = array[2]
y_str = array[3]
x = x_str.replace("x=", "").strip()
y = y_str.replace("y=", "").strip()
print(x, y)
根据打印出来的 x,y 放到 excel 中即可。
input 命令模拟 swipe¶
如脚本,模拟左右滑动:(y坐标不变)
while (true)
do
adb shell input swipe 800 1000 200 1000 1000;
sleep 1.5;
adb shell input swipe 200 1000 800 1000 1000;
sleep 1.5;
done
win系统脚本如下:
:loop
adb shell input swipe 800 1000 200 1000 1000;
TIMEOUT /T 1 /NOBREAK
adb shell input swipe 200 1000 800 1000 1000;
TIMEOUT /T 1 /NOBREAK
goto loop
:end
然后得出的折线图:
人为滑动¶
人为在屏幕上滑动也是通过脚本获取到x,y 坐标放到 excel 中,得到的折线图:
这样对比下来有很明显的不平滑,则可以说明 inputflinger 本身并没问题。 而是bsp报点可能有问题了,需要bsp分析。