鸿蒙 Flutter 性能调优分析之帧渲染跟踪
鸿蒙 Flutter 性能调优性能分析之帧渲染跟踪
Flutter 应用进行性能分析时,需利用分析工具捕获应用的 trace 数据,并对其进行分析。鉴于 Flutter 应用中可能会出现需要单独追踪某帧渲染的情况,如帧率卡顿或帧丢失,本文特介绍了一种针对单帧追踪的方法。
分析工具
常用的分析工具包括DevEco Studio Profiler及SmartPerf,建议选用 DevEco Studio Profiler 性能调优工具。性能调优工具 DevEco Studio Profiler 的使用方法可查看DevEco Profiler工具简介.
帧标识
一帧的渲染流程大致如下:
掌握帧渲染流程非常重要,同时也需要掌握帧渲染流程的每个单元的匹配。为每个单元寻找一个合适的标识符,能正确匹配渲染流程。
第一个标识 frame_number
1.ui 和 1.raster 之间联系的标识符是 frame_number。 收藏该两个线程,将这两个线程关联起来进行观察,会在 trace 上找到这个标识符,这是 Flutter 应用帧渲染的第一个标识符。
如果 frame_number 的标识符未在 1.ui 和 1.raster 中出现,表明当前帧不是 flutter 自渲染,需要重新定界性能问题。
第二个标识 ReuseBuffer/acquire buffer
1.raster 和 render_service 之间联系的标识符是 ReuseBuffer。 在 1.raster 线程"flutter::SkCanvas::Flush"的 trace 过程中,会向 RS 进程申请 buffer 内存,用于存储渲染的帧内容。点击"binder transaction"的 trace 可以跳转到另一个线程,查看对应的 ReuseBuffer 的 id。
在 render_service 线程"RSMainThread::DoComposition"的 trace 过程中,会获取 buffer 内存里的帧内存。"acquire buffer sequence"的 trace 里就能看到和 1.raster 线程申请的 ReuseBuffer 编号是一样的。
通过上面展示的两个标识,就能识别 flutter 应用到 RS 进程上的帧渲染。而 RS 进程上后面的单元是怎么识别的,目前还没有直观的 trace 可以看到,默认连续的线程 trace 是同一帧(即 render_service 到 RSUniRenderThread,再到 RSHardwareThread 是连续的)。
评论