Android Display性能问题分析指导手册I

系列文章请扫关注公众号!

本文主要包括部分:

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显示系统的运行,及其涉及组件要有基本了解 

2Display 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============================================================================================================

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值