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

  • 22
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值