IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> android多媒体框架介绍(五)显示图形系统之SurfaceFlinger初步介绍 -> 正文阅读

[移动开发]android多媒体框架介绍(五)显示图形系统之SurfaceFlinger初步介绍

前面介绍了比较直观的framebuffer模块(负责把有一个内存地址ADDR的内容显示到屏上),hwc模块(叠加器,负责把surfaceFlinger送来的各种输入layer叠加到显存上),接下来开始介绍surfaceFLinger这个android显示相关最核心的系统服务。

一、SurfaceFlinger定义与概念

Surface定义—供生产方与消耗方交换图形buf缓冲区

要理解SurfaceFlinger,当然先要理解surface这一基础概念。应用的每个 Window 会关联一个 Surface,Surface会关联真正的Graphic Buffer缓冲队列。android绘图的API很多,比如2D的绘图skia;3D的绘图OpenGL,Vulkan等,绘制到surface上。

SurfaceFlinger定义—统一管理surface的显示系统服务

SurfaceFlinger是一个系统服务,要实现了Surface的建立、控制、管理,创建display显示通道,控制GraphicBuffer申请轮转,基于Vsync事件同步 管理需要参与显示的surface给HWComposer硬件叠加器叠加显示到屏幕上。
在这里插入图片描述

SurfaceFlinger的基础框架client&&service(待更新)

二、SurfaceFlinger关键设计分析

BufferQueue—基础buffer轮转组件

BufferQueues 是 Android 图形组件之间的粘合剂。它们是一对队列,可以管理buffer从生产方到消耗方的固定周期。BufferQueue 是将缓冲区池与队列相结合的数据结构,用 Binder IPC 在进程之间传递buffer(生产者消费者可在不同进程)。图像生产方的一些示例包括由相机 HAL 或 OpenGL ES 游戏生成的相机预览。图像消耗方的一些示例包括 SurfaceFlinger 或显示 OpenGL ES 流的另一个应用,如显示相机取景器的相机应用。
在这里插入图片描述

Vsync—基于显示刷新事件的过程同步控制

基于Vsync信号(垂直时序刷新信号,可以简单理解为屏幕每刷新一帧上报一个事件,比如60HZ刷新的屏幕,vsync上报就是每秒均衡的60次) 同步显示buffer处理流水线(包括 渲染绘制、合成、显示),让绘制叠加显示更有序匹配
SurfaceFlinger 通过调用 setVsyncEnabled 来控制 HWC 是否生成 VSYNC 事件。在 VSYNC 事件中,屏幕开始显示帧 N,而 SurfaceFlinger 开始为帧 N+1 合成,应用处理等待的输入并绘制生成帧 N+2
CPU开始处理第1帧的纹理,处理完成之后GPU进行合成,在第1帧到来时候,显示屏显示第1帧,接着同步的CPU可以开始处理第2帧的纹理,GPU在CPU处理完成之后栅格化合成,在第2个垂直同步信号到来的时候,显示屏可以展示第2帧。如下图为 不基于vsync和基于vsync的两种方式;
在这里插入图片描述在这里插入图片描述

Triple Buffer—三重缓存机制 提高对性能波动的容忍度

除了Vsync的机制,Android还使用了多级缓冲的手段以优化UI流程度。下图分别为 双buffer和三buffer缓存面临 性能波动的情况下 平滑处理情况。
在这里插入图片描述
在这里插入图片描述
可见 由于资源抢占等性能问题导致某一帧GPU掉链子,vsync信号到来时buffer B的数据还没准备好,而此时Display又在显示buffer A的数据,双buffer条件下 导致 后面CPU/GPU没有新的buffer着手准备数据,空白时间无事可做,后面Jank频出,如果三buffer情况,CPU/GPU可以用C buffer开始准备数据。

fence机制—提前送帧设计降低buffer轮转延时

fence:android4.4开始引入的一种资源同步机制,主要用于处理跨硬件场景,如CPU、GPU、HWC之间的buffer资源同步。简单来说,就是 生产者 把buffer 在生产完成之前 带上一个fence节点 提前送出去(常叫aquire fence),消费者需要使用的时候 通过fence去查看是否生产完 来决定使用。或者 消费者 收到buffer后准备使用前就 把buffer 带上一个fence(常叫release fence)还给生产者,生产者需要再绘制时 通过fence去查看 是否消费完成。核心就是省去buffer中间调度传递的时间; android中基本fence是使用图如下:在这里插入图片描述
参考博文:https://blog.csdn.net/runafterhit/article/details/89293013

hwcomposer—多图层硬件叠加器封装

为了解放GPU的绘制能力,很多芯片厂家会提供硬件叠加合成,如果硬件叠加器支持的场景都可以走硬件叠加,解放GPU的绘制能力专心绘制,提升的渲染性能同时还能大幅度的降低功耗(GPU强绘制,叠加搬移并不擅长,高功耗)。
在这里插入图片描述
参考博文:https://blog.csdn.net/runafterhit/article/details/118884165

overlay—独立与主图层的单独显示层(依赖硬件,常作视频显示)

Overlay(覆盖)是一种数字视频的显示技术,它允许数字信号不经过显示芯片(GPU)处理,而直接通过显存输出到显示器屏幕上。Overlay显示模式最大的用途在于优化视频播放。很多芯片厂商在适配底层显示系统的时候,都会针对 播放视频内容做效果优化的视频独立通路得到更好的效果。
这个很好理解,视频的采集-编码-压缩传输-解码-调优显示 和 图形 和 绘制渲染 本身可以说是两个领域,各自有各自的技术衍生发展方向。一般基于android的TV和机顶盒都会支持overlay显示这种方式。
在这里插入图片描述

三、SurfaceFlinger关键流程分析(待更新)

1、应用创建surface

2、应用程序对窗口的控制和画图渲染surface

3、SurfaceFlinger按事件触发surface合并显示

四、SurfaceFlinger的典型android通路(待更新)

五、dumpsys SurfaceFlinger调试命令

通过dumpsys SurfaceFlinger可以查看surfaceFlinger相关系统信息,比如 系统中的layer信息,hwc合成信息,buffer信息 等等;
参考博文:https://blog.csdn.net/feifei_csdn/article/details/81703778

参考

官方文档:https://source.android.google.cn/devices/graphics
老罗:https://blog.csdn.net/luoshengyang/article/details/7846923
https://gitee.com/ldkxingzhe/ldk/blob/master/Android_Service_SurfaceFlinger.org
https://blog.csdn.net/freekiteyu/article/details/79483406
http://www.wowotech.net/graphic_subsystem/graphic_subsystem_overview.html
https://blog.csdn.net/haigand/article/details/90489336
https://zhuanlan.zhihu.com/p/62813895
https://blog.csdn.net/rabbyheathy/article/details/103748551
http://www.kokojia.com/article/18618.html
https://blog.csdn.net/feifei_csdn/article/details/81703778

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 23:28:47  更:2021-07-29 23:29:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 3:25:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码