我是靠谱客的博主 无情蛋挞,最近开发中收集的这篇文章主要介绍AndroidO 下图形显示框架变化介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 下图形显示框架变化介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部