新手区 利用 dumpsys 输出当前这个手机的某个应用动画帧的状态,某些应用输出值为空

张恩峻 · 2018年01月17日 · 最后由 张恩峻 回复于 2018年01月17日 · 1771 次阅读

我是用adb shell dumpsys window w |findstr \/ |findstr name=来获取我要测试的包名。
然后adb shell dumpsys gfxinfo 包名 > fps.txt获取数据。
昨天突然测到一个应用包名前面多了一个 SurfaceView,如:

C:\Users\xxxxx>adb shell dumpsys window w |findstr \/ |findstr name=
          mSurface=Surface<name=com.android.image/com.android.image.xxx.xxxxxx>
          mSurface=Surface<name=SurfaceView - com.android.image/com.android.image.xxx.xxxxxx>

这种应用获取的值就是空的,后来想了一下把 SurfaceView 所在包放进去,也不行。
有谁遇到过这种问题吗,要怎么解决啊。

共收到 2 条回复 时间 点赞

你需要搞清楚帧数据来源和原理,gfxinfo 的数据都是 UI 主进程绘制的数据,SurfaceView 的绘制帧数据是不包含在内的。还有一点是如果 app 使用了系统动效,系统动效这部分数据也不包含在内。
1、dumpsys gfxinfo 包名 framestats 命令只能获取除了 SurfaceView 和系统动效的帧数据;
2、获取 SurfaceView 和系统动效需要用到 dumpsys SurfaceFlinger --latency 包名;不加包名即是系统动效的帧数据

浮云 回复

感谢,我等下去试下。昨天突然被拉去做很懵逼,网上可用资料也不多。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册