性能分析-帧渲染跟踪

性能分析-帧渲染跟踪 Flutter OH 应用进行性能分析时需利用分析工具捕获应用的trace数据并对其进行分析。鉴于Flutter应用中可能会出现需要单独追踪某帧渲染的情况如帧率卡顿或帧丢失本文特介绍了一种针对单帧追踪的方法。分析工具常用的分析工具包括DevEco Studio Profiler及SmartPerf建议选用DevEco Studio Profiler性能调优工具。性能调优工具DevEco Studio Profiler的使用方法可查看DevEco Profiler工具简介.帧标识一帧的渲染流程大致如下掌握帧渲染流程非常重要同时也需要掌握帧渲染流程的每个单元的匹配。为每个单元寻找一个合适的标识符能正确匹配渲染流程。第一个标识 frame_number1.ui和1.raster之间联系的标识符是frame_number。收藏该两个线程将这两个线程关联起来进行观察会在trace上找到这个标识符这是Flutter应用帧渲染的第一个标识符。如果frame_number的标识符未在1.ui和1.raster中出现表明当前帧不是flutter自渲染需要重新定界性能问题。第二个标识 ReuseBuffer/acquire buffer1.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是连续的。