1 相关知识点
- CPU:中央处理器,它集成了运算、缓冲、控制单元包括绘图功能等。CUP将对象处理为多维图形、纹理(Bitmaps,Drawables等都是一起打包到统一的纹理)。
- GPU:一个类似于CPU的专门用来处理图形的处理器,作用是用来帮助快速栅格化操作,GPU也有相应的缓存数据(例如缓存已经栅格化的bitmap等)机制。
- OpenGL ES:是手持嵌入式设备的3DAPI,跨平台的、功能完善的2D和3D图形应用程序接口API,有一套固定渲染管线流程。
- DisplayList:在Android设备上将XML布局文件转化成GPU能够识别并绘制的对象。这个操作是在DisplayList的帮助下完成的。DisplayList持有所有将要交给GPU绘制到屏幕上的数据信息。
- 栅格化:是将图片等矢量资源转化为一格格像素点的像素图,然后显示在屏幕上。过程如图1.1所示。
图1.1 栅格化过程 - 垂直同步Vsycn:Vsync是Vertical Synchronization的缩写,可以简单理解成一种定时中断。App在Vsync结束的时间点绘制画面,也是在这个时间点SurfaceFlinger进行画面合成,这种机制消除了卡顿,提高了图形的视觉表现。垂直同步机制下的绘制过程如下图1.2所示。
图1.2 Vsync机制下的绘制过程
每个Vsync的时间间隔大约是16.6ms,渲染操作通常依赖两个核心组件:CUP与GPU。CUP负责包括measure,layout,record,execute的计算操作,GPU负责Rasterization(栅格化)操作。栅格化就是解决XML布局文件和标记语言,使之转化为用户能看懂的图像,但是这不是直接转换的,XML布局文件需要在CPU中首先转化为多边形或者纹理,然后再传递给GPU进行栅格化,栅格化跟OpenGL有关,16ms的时间主要被两件事情占用,第一件:将UI对象转换为一系列多边形和纹理;第二件:CPU传递处理数据给GPU,然后GPU进行栅格化。
2 渲染机制
2.1 渲染流程
UI对象---->CPU处理为多维图形,纹理 -----通过OpeGL ES接口调用GPU----> GPU对图进行光栅化(Frame Rate ) ---->硬件时钟(Refresh Rate)----垂直同步---->投射到屏幕
参考文章
https://blog.csdn.net/houliang120/article/details/50908098
https://www.jianshu.com/p/1ef2a9e5aa91