系列文章请扫关注公众号!
本文主要包括部分:
1、背景介绍
2、Display Common Trace Tag
3、VSYNC与Fence
VSYNC & Fence Tag
HW_VSYNC异常
4、Surfacefligner相关tag
Surfaceflinger Tag
GPU Compose Tag
1、背景介绍
Display性能问题分析指导手册系列文章,旨在帮助读者了解如何从display的角度分析性能类问题,基于Android S编写和举例。
Overview
● 卡顿问题是系统性的复杂问题,其成因及影响此类问题的因素众多
● 显示系统作为手机系统中的重要组成部分,系统是否流畅通常都是通过显示投射到人眼产生的感知
● 所以显示系统成为卡顿问题经常涉及的模块,常常也需要作为问题切入点或问题方向判断的主力模块
适用对象
● 使用者必须能熟练使用systrace这类性能分析工具
● 使用者对Android系统的运行的主要组件需要有基本了解
● 使用者对Android显示系统的运行,及其涉及组件要有基本了解
2、Display Common Trace Tag
2.1 显示系统组成要点概括
两大组成部分: 绘制(DrawFrame) + 合成 (SurfaceFlinger + HWC)
绘制(DrawFrame): Surface中的空GraphicBuffer -> CPU或GPU通过Canvas -> 将数据Draw到Surface
合成 (Compose): 几块有数据的Buffer -> 叠合成一张Buffer-> 送到panel显示
BufferQueue: 在Android系统中每一张显示图片,都是GraphicBuffer,通过BufferQueue在不同进程间流动
VSYNC: 控制系统绘制与合成的节律
2.2 Display Trace Tag介绍
VSYNC
● 控制Display按什么样的间隔出帧,也就是帧率的基准,VSYNC Tag中颜色发生转换的分界竖线,就代表一次VSYNC信号
● VSYNC-app/sf这两个Tag是软件信号,是在HW VSYNC信号基础上重新计算以后发出的Event
● VSYNC-app 是控制绘制过程帧率的,VSYNC-sf 是控制合成过程的帧率的
● VSYNC-app/sf 通常这两者之间不会同时开始,会有一些offset先后开始
绘制(DrawFrame)
Choregrapher ----- 直接响应VSYNC-app,与VSYNC-app应该对齐
RenderThread ----- 真正执行绘图的进程
● DrawFrame过程: 从BQ dequeueBuffer > Draw绘制 > queueBuffer到BQ
● dequeueBuffer最后 ->Trace HWC release fence: 表示已经dequeue到了一块Buffer,但这块Buffer还在被底HWC合成使用中,
● queueBuffer最后->Trace GPU completion: 表示Buffer已经queue还给了BQ,但没有GPU还没有画完,
● HWC release: waiting for HWC release表示上一次拿这个Buffer显示的帧还在使用,需等待
● GPU completion: waiting for GPU completion出现表示GPU还没有绘制完成,需等待
2.3 合成(SurfaceFlinger+HWC)
Surfaceflinger ----- 直接响应VSYNC-sf,合成的发起者,system_server的service之一
BufferTx ----- 看合成重要辅助Tag,DrawFrame里queueBuffer以后BufferTx会增加,SF起来响应拿走Buffer合成时会减少
BufferTx内有可用Buffer,SF才会真正去合成
● SurfaceFlinger在有的trace里也显示为UI Thread
● SF主进程结束点附近有Tag数字对应到waiting for presentFence
● presentFence: 其结束点代表SF送下来的这一帧被显示到了屏幕上,并signal前一帧的Fence
● OverlayEngine: HWC的主要进程,Trigger display driver做显示相关的动作
2.4 Driver显示Trace
driver的Trace是专门添加的,需先执行这个cmd并抓取systrace才会看到:
adb shell "echo trace:on > /d/mtkfb"
主要是driver的layer_fence/present_fence release情况以及driver的HW_VSync的Tag
文章剩余部分请关注公众号查看。。。。。。
Android Display Graphics系列文章-汇总
========================================================================================================Welcome============================================================================================================