欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

浅谈AndroidGPU过度绘制、GPU呈现模式分析及相关优化

程序员文章站 2022-07-06 11:56:33
在真机设备下有一个开发者选项,这个大家都知道,我们最常用的就打开'USB调试'功能,方便真机调试。 在这开发者选项中还有个选项,'调试GPU过度绘制' 这里选择第二个选项'显示过度绘制区域' 可以看到针对该界面 每一个控件周边都有一块颜色区域 颜色对应: 原色:没有过度绘制 蓝色:1 次过度绘制 绿 ......

在真机设备下有一个开发者选项,这个大家都知道,我们最常用的就打开'usb调试'功能,方便真机调试。

在这开发者选项中还有个选项,'调试gpu过度绘制'

 浅谈AndroidGPU过度绘制、GPU呈现模式分析及相关优化

这里选择第二个选项'显示过度绘制区域'
浅谈AndroidGPU过度绘制、GPU呈现模式分析及相关优化

可以看到针对该界面 每一个控件周边都有一块颜色区域

 

颜色对应:

浅谈AndroidGPU过度绘制、GPU呈现模式分析及相关优化

 

  • 原色:没有过度绘制
  • 蓝色:1 次过度绘制
  • 绿色:2 次过度绘制
  • 粉色:3 次过度绘制
  • 红色:4 次及以上过度绘制

 

 

测试发现大多数手机app都存在过度绘制的问题,这也因为产品设计的时候没有这种布局嵌套的概念,导致程序员开发出产品想要的效果就容易造成过度绘制的情况。

 

过度绘制造成的结果是在部分性能差的设备,会出现卡顿的问题,不过一般对于当年出的设备不会造成影响。

 

--------------------------------------------------------------------------------------------------------------------------------------------

此外,开发者选项中还有一个选项‘gpu呈现模式分析’,选择'在屏幕上显示为条形图'就会发现界面底部出现条形图

浅谈AndroidGPU过度绘制、GPU呈现模式分析及相关优化

每一条柱状线都包含三部分, 
蓝色代表测量绘制display list的时间, 
红色代表opengl渲染display list所需要的时间, 
黄色代表cpu等待gpu处理的时间。 

中间有一根绿色的横线,代表16ms,我们需要确保每一帧花费的总时间都低于这条横线,这样才能够避免出现卡顿的问题。

当频繁超过绿线的时候对于性能不好的时候就会出现卡顿的情况。

 

相关知识:

cpu: *处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.cpu将对象处理为多维图形,纹理(bitmaps、drawables等都是一起打包到统一的纹理).

gpu:一个类似于cpu的专门用来处理graphics的处理器, 作用用来帮助加快格栅化操作,当然,也有相应的缓存数据(例如缓存已经光栅化过的bitmap等)机制。

opengl es是手持嵌入式设备的3dapi,跨平台的、功能完善的2d和3d图形应用程序接口api,有一套固定渲染管线流程. 附相关opengl渲染流程资料

displaylist 在android把xml布局文件转换成gpu能够识别并绘制的对象。这个操作是在displaylist的帮助下完成的。displaylist持有所有将要交给gpu绘制到屏幕上的数据信息。

格栅化 是 将图片等矢量资源,转化为一格格像素点的像素图,显示到屏幕上,过程图如下.

 

------------------------------------------------------------------------------------------------------------------------------------

 

优化

android对于界面渲染流畅的要求为 1秒钟60帧  即每一帧都在16.6ms内

 

优化点:

1、icon图片尽量使用 png格式  , 照片等大型图片用jpg

2、减少多余的嵌套层数

3、外层设置背景颜色之后,内部view可以不再设置背景颜色值

4、自定义view的优化