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进行分解。

阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

没有更多推荐了,返回首页