关于performance

来源:6-6 性能面板的使用技巧及Dart内存调优

demonCry

2022-09-12

问题1:

图片描述

1.1 上面这个柱状图的横纵坐标都是指什么
1.2 鼠标移上去的 UI 和 Raster 又是撒意思
1.3 Jank 和 Shader Compilation 又是撒…

总之就是没看懂…(-_-||)

问题2

图片描述

2.1 选中上面的一块柱状图后, 线面的timeline会随之联动, 会出现蓝色的[],这和上面的柱状图有什么关系呢
2.2 这里也出现了UI和Raster ,显示的是不一样的东西,都是撒图片描述


意外往下拉了一拉, Timeline 下面还有很多…

图片描述

问题3 Performance Ovelay 显示在手机上的两个图又是怎么看的

图片描述

emmm… 很懵逼

希望老师写个demo然后根据这个demo具体展开讲讲,该怎么看这个东西 (文章视频皆可,但希望能有一个真实一点的可调试的那种demo来举例)

money is not problem O.O!

写回答

3回答

马超老师

2022-10-07

最后来看看Performance Overlay。

其实看懂了前面两段,这个就不难理解了,其实就是把数据更直接的展示到了屏幕上。

整体分为两个柱状图表:Raster和UI,分别表示Raster Thread(GPU Thread)和UI Thread(具体含义可回顾2.7小节讲的Flutter线程模型)

当你在App上进行一些操作触发页面刷新,就会出现针对每一帧的数据统计,其中蓝色表示正常的帧,超过了16ms的会用红色的柱体表示,绿色表示当前的帧。

然后柱状图的底部会有一个“max”和“avg”,分别表示最大值和平均值。



以上针对Performance工具作了简短的解释,如果大家有需求,可以留言。需求大的话我后面用文章或者视频的形式做一个系统的讲解

0
0

马超老师

2022-10-07

我们继续来看第二部分,TimeLine Event,它展示了App渲染所经历的所有事件时常。

  1. TimeLine Event表示的是更详细的事件,所以当你点击一个柱状图的时候,它会联动的跳转到对应帧的具体事件时常,但是由于左右都有上一帧和下一帧的数据,所以用一个大括号把你选中的帧数据给框起来,目的就是方便你查阅你指定的帧数据;

  2. 这里的UI和Raster和上面的含义是一样的,只不过把具体的事件都展开来列举了,并且统计了每个事件的时常,实际工作中可以根据时常来做优化;

往下拉会有很多,应该看起来只有几毫秒的事情,Flutter的渲染实则经历了很多的流程,这里会把所有的流程都列举出来。往左右拉是时间线,和上面的帧是对应的

0
0

马超老师

2022-10-07

如果大家感兴趣的话,后面我出个文章来展开讲讲。这里我先简单说明一下你的问题

performance是用来监控卡顿,优化性能的工具。

首先聊一下柱状图相关的问题

  1. 柱状图表示就是每一帧的渲染时长。横坐标表示帧序号,纵坐标就是时长,单位ms;

  2. UI是指“UI Thread”,raster表示“Raster Thread”(也就是GPU Thread)。这两个概念在课程的前面讲Flutter线程模型的时候有讲解过,具体可以回顾一下视频内容;

  3. 红色的柱状图表示Jank,也就是slow frame,直译就是慢帧。devTool把大于16ms的帧归为慢帧,用红色柱状图表示。(16ms的计算是按照FPS为60来算的,大于60被认为视觉卡顿)

  4. 剩下一种叫Shader Complilation,着色器编译。它发生在App第一次渲染某一种动画的时候,需要做着色器编译。Flutter为了优化App动画性能,在渲染好一次之后就会在本地生成一个缓存文件,下次在需要渲染这个动画的时候就可以直接使用解析好的文件,就不会重新做着色器编译了。

    同时官方也提供了一种叫SKSL 预热的方案可以避免在第一次渲染的时候由于Shader Complilation导致卡顿。这里就不展开讲了,如果感兴趣的话可以在下方留言,我再展开讲讲这个东西的用法和原理。

0
0

基于Flutter 3.x 实战跨平台仿抖音App混合开发

以短视频APP为例,快速上手原生/Flutter 混合开发

481 学习 · 120 问题

查看课程