QML 分析器可以看出程序的各个部分占用的时间,内存消耗等信息,可以找到占用延时多或者内存消耗多的部分,然后针对性的优化。
一,启动QML 分析器
debug运行-》QML 分析器-》运行一段时间后 点击stop停止运行
二,一共有三种分析方式。 TimeLine 为时间轴分析方式。表示随着时间推移左侧各类别占用的时间。
左侧详细信息:
Pixmap Cache
在QML中使用的Image,默认是开缓存的。而所有缓存的图片,都会在这里显示,包括用了多少像素的缓存,还包括了图片的加载耗时、文件名等信息。(没有缓存的图片也会显示,但不会记入到缓存的阶梯里)
Scene Graph
这里显示渲染时各个阶段的耗时,如果我们发现程序的动画有卡顿,除了一些函数的阻塞导致的卡顿外,还可以分析一下渲染的耗时开销,看看是不是渲染的量太大导致的卡顿。
这里我们主要关注Render Render这个数据,这个数据表示将OpenGL数据发送到GPU的过程。看到一个Render Render的结束,基本表示这一帧已经结束渲染,并且即将显示出来了。
另外还有Glyph Upload这个数据,这个数据表示字形纹路上传。如果你的程序是嵌入式,并且有很多的字,那么Glyph Upload有可能会带来一定的性能开销。减少这个开销的方式基本就是减少字,比如说用图片(Image)代替文字(Text或者Label)。
Memory Usage
显示内存使用情况,如果这里有大块的内存增长,看看是不是这里在初始化很多东西,或者是有很多不必要的组件被创建出来了。
Input Events
显示用户输入事件,例如鼠标和键盘事件
Debug Messages
显示调试输出的时间点,如果你需要对照Debug输出和对应的QML事件,那么这会很有帮助
Animations
显示是否有动画在执行,以及动画的FPS,在多线程渲染时还会显示多线程的信息。如果我们发现FPS低于18,那么视觉上可能就会有明显的卡顿了。而30到60的FPS,一般就可以认为是流畅的。
Compiling
显示编译的耗时。这里要说下,从Qt5.8开始,QtQuick引入了qmlc机制,让编译时间大幅度缩减,基本上是从几百毫秒,缩减到几十甚至十毫秒以内。之前在csdn发过文章讲这个,这里再放下链接:
Creating
显示创建的耗时,一般也是启动优化的主要部分
Binding
显示绑定的耗时
Hangling Signal
显示信号处理的耗时
Javascript
显示JS执行的耗时。如果在QML里调用了一个C++的槽,那么这里也会有计时,但是也只有槽函数的总耗时,C++那里的运行情况这里看不出来。
三,统计图展示
各文件所占用的百分比,这个看起来更直观
四,火焰图
参考:https://blog.csdn.net/wf19930209/article/details/79174249