Flutter OH 性能分析-滑动响应时延

张开发
2026/4/11 3:07:29 15 分钟阅读

分享文章

Flutter OH 性能分析-滑动响应时延
本篇文章针对 Flutter OH 应用的滑动场景进行响应时延的trace分析。请务必先看完这篇指南 Flutter OH 性能分析第一步-梳理线程顺序再继续。准备条件了解并能使用性能分析工具DevEco Studio Profiler了解线程渲染顺序Flutter OH 性能分析第一步-梳理线程顺序1. 手指按下手指按下是所有点击或滑动事件的大前提可以知道手指坐标的初始位置和触摸哪个控件等重要信息。mmi_service线程负责触发多模交互事件由Flutter应用监听和响应触摸事件。手指按下的触摸事件会立即转发给Flutter应用。在mmi_service线程的package touchEvent的trace后面的下一个trace可以看到service report touchId:编号, type: down的tracetype为down说明是手指按下的触摸事件。而在应用主线程有DispatchTouchEvent的trace上面有详细坐标打印和触摸事件类型type数值为0说明是手指按下的触摸事件。这两个线程上的trace是对应的。2.手指滑动手指滑动的触摸事件不会立即转发给Flutter应用而是由vsync-app信号来控制发送。和手指按下的trace一样mmi_service线程和应用主线程都有一样的trace可以对应只是type类型不一样。type为move数值为2。手指滑动的触摸事件需通过flutterSyncName的vsync-app信号触发之后才能传递到flutter应用主线程。因此时间顺序是mmi_service到VSyncGennerator再到DVSync-app最后到应用主线程。trace顺序如下图注意第一个手指滑动的触摸事件的坐标点和手指按下的触摸事件的坐标点是一样的。3.滑动阈值 TouchSlopTouchSlop是系统所能识别的滑动的最小距离,是一个阈值称为滑动阈值。用户可以自定义设置控件的滑动阈值系统默认值是18。那么通过查看应用主线程的触摸事件trace的坐标可以自行计算坐标偏移量是否达到滑动阈值。4.滑动首帧当手指滑动的触摸事件的滑动距离超过设定的滑动阈值时Flutter应用会触发update操作。但是实际的绘制操作需要等待下一帧的到来才能执行。所以滑动开始的第一帧渲染会在触摸事件满足滑动条件后还需等待一帧的延迟。trace如下图5.首帧渲染渲染的大致过程看Flutter OH性能分析-帧渲染跟踪需要准确找到对应的trace。帧渲染的结束是在RS进程的RSHardwareThread线程上但是在自动化测试的时候帧渲染的结束标识是dpu_gfx_primary线程。dpu_gfx_primary只是一个硬件信号不详细讲解trace如下图所以从mmi_service线程的手指按下的trace开始到滑动首帧渲染结束这花费的时间就是滑动响应时延。

更多文章