概述
Android显示框架随着Android版本的不断升级,也在不断变化修改,但主体框架未变,依然保持Android4.0上定制的实现结构,只是类命名更加清晰,实现方式更加明了,同时随着HAL版本的不断升级,增加了一些额外的接口,随着AndroidO引入Treble架构,显示框架也作了必要的调整。AndroidO之前版本下的显示实现框架如下图所示:
整个显示过程由App,system_server和surfaceflinger三个进程一起配合完成:
APP负责画图,system_server负责控制图层,Surfaceflinger负责混合图层并显示。这里涉及画图和合图过程,那么谁需要画图呢?
1. 应用程序:画应用程序界面图
2. Surfaceflinger:合成所有图层进行显示
既然需要画图,那么有什么画笔可以画图呢?
1. Skia:CPU绘制2D图形;
2. OpenGL: GPU绘制3D图形;
那么我们又可以通过什么来混合图层呢?
1. GPU: 使用OpenGL来合成图层;
2. HWC: 使用显示控制器来合成图层;
有了画笔,就需要在画纸上画图,那么画纸又是什么呢?画纸根据画图对象而不同:
1. Surface: 用于应用程序画图,在Android4.4版本之后,也用于Surfaceflinger画图;
2. FramebufferNativeWindow: Android4.4版本之前,用于Surfaceflinger画图;
到此我们就知道了在Android系统中,谁需要画图以及如何画图。那么在AndroidO及以后版本,随着HAL进程独立化,显示系统实现框架也有所变化,如下图所示:
也就是说,在Android4.4之后版本,所有的图形都是绘制在Surface上,不管是应用程序画图还是SurfaceFlinger混合图层。
应用程序可以通过Skia来绘制2D图形,也可以用OpenGL来绘制3D图形,SurfaceFlinger通过OpenGL来混合图形到指定的Surface上,然后这个Surface与其他没有被SurfaceFlinger合成的图层一起送往HWC进行合成。
有人可能会问,既然SurfaceFlinger可以通过OpenGL来合成图层,那么为什么还需要HWC来合成呢?其实这样做的原因还是性能和功耗方面的考量。
到此就介绍完了显示框架的变化,后续将分别从App侧,WMS,SurfaceFlinger,HWC进行分解。
最后
以上就是无情蛋挞为你收集整理的AndroidO 下图形显示框架变化介绍的全部内容,希望文章能够帮你解决AndroidO 下图形显示框架变化介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复