和你一起终身学习,这里是程序员Android

经典好文推荐,通过阅读本文,您将收获以下知识点:

一、显示一帧流程概览
二、生产者,消费者 BufferQueue 流转图
三、App ,SF Buffer 交互图
四、SF 跟 HWC 交互图

一、显示一帧流程概览

显示一帧流程概览

Android 显示一帧大致分为下面 八步:

  1. App 接收到 vsync-app 信号后开始工作。

  2. App 主线程被Message唤醒,执行onVsync。

  3. App 执行 doFrame ,处理input、animation、traversal、draw等。

  4. App UIThread 跟RenderThread sync 数据。

  5. App 执行DrawFrame,从SurfaceFlinger(后续简称SF) 的 BufferQueue 中 Dequeue buffer,取出一个bufffer后,执行渲染绘制,接着将绘制好的Buffer 通过queuebuffer 放回到。BufferQueue中给 SF消费。

  6. App queuebuffer 后, SF 中对应的 app buffer 会增加 +1。

  7. Vsync-sf 到来后,SF 从BufferQueue 中 acquireBuffer一个Buffer 进行消费, 对应SF 中的 app buffer 会减 - 1 , SF 消费处理后,通过 releaseBuffer 将buffer 归还到BufferQueue 中。

  8. SF 通过 bind 跟 Hardware Composer HAL(简称HWC) 进行通信,通过一些处理后显示到手机屏幕上。

二、生产者,消费者 BufferQueue 流转图

生产者,消费者 BufferQueue 流转图

  1. dequeue(生产者发起) :
    当生产者需要缓冲区时,它会通过调用 dequeueBuffer() 从 BufferQueue 请求一个可用的缓冲区,并指定缓冲区的宽度、高度、像素格式和使用标记。

  2. queue(生产者发起):
    生产者填充缓冲区并通过调用 queueBuffer() 将缓冲区返回到队列。

  3. acquire(消费者发起) :
    消费者通过 acquireBuffer() 获取该缓冲区并使用该缓冲区的内容

  4. release(消费者发起) :
    当消费者操作完成后,它会通过调用 releaseBuffer() 将该缓冲区返回到队列

三、App ,SF Buffer 交互图

App ,SF Buffer 交互图

  1. App 通过bind 向SF dequeuebuffer 进行buffer申请

  2. SF 对端完成对bufferQueue 的dequeuebuffer的申请

  3. App 处理合成完后,通过binder向SF queuebuffer 申请buffer 入队。

  4. SF 对端通过queuebuffer 完成buffer 对BufferQueue的入队申请,供SF消费并显示到屏幕上

四、SF 跟 HWC 交互图

SurfaceFlinger 接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备。

SF 送显图

SF 跟 HWC 交互图

  1. vsync-sf 周期到来,SF 开始绘制准备工作

  2. SF 通过 acquirebuffer 从BufferQueue 中取出一帧进行消费

  3. App 对应的BufferQueue 在SF acquirebuffer 后对那个的值会 -1

  4. App 对应的buffer 值为 2

  5. App 对应的buffer值 在SF acquirebuffer 后变为 1

  6. SF 跟HWC 通过binder 通信处理完后,通过rleasebuffer将buffer 归还到BufferQueue中,紧接着一帧就可以显示出来

友情推荐:

Android 开发干货集锦

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点击阅读原文,为大佬点赞!

手机显示一帧的流程是如何实现?相关推荐

  1. h5 video 手机 显示第一帧_【图像处理二】HDMI显示(一)

    引言 做图像处理没有显示怎么能行,所以用两章来介绍HDMI的协议以及编码实现.HDMI的编码,仿真和调试会花费较长时间,特别是第一次在windows环境下部署UVM环境,对于刚刚入门UVM的我来说,这 ...

  2. h5 video 手机 显示第一帧_解决h5嵌入app后video标签poster不能显示视频第一帧(表现为空白)...

    这里我们先来描述一下问题,页面中使用了video标签,按照video标签的官方介绍下图介绍: 没有设置poster的情况下在浏览器中我们可以看到视频的第一帧,页面效果如下图左图所示:但是嵌入App后, ...

  3. 天籁obd接口针脚定义_典藏 | OBD接口位置大全及部分常用手机型号语音播报设置流程...

    OBD接口的位置 OBD接口的位置一般都在方向盘下方的内饰板中,靠近驾驶员膝盖附近的地方,不同车型的位置稍有区别,但基本位置都差不多. OBD接口统一采用梯形的16针DLC形式接插件,梯形接口是防误插 ...

  4. 51定时中断系统控制LED点阵屏显示逐帧动画

    写在前面 最近回头看之前写的文章感到一种很浓的公式感,我确实是提前写好了模板每次都套用,整篇看下来感觉就像是在交老师布置的实验报告,看起来很成熟但实际上背离了自己的初衷,接下来我会尽可能的复现自己在做 ...

  5. 手机经常提示找不到服务器,为什么我的手机显示无法连接到服务器

    lujb31612级分类:其他被浏览3227次2014.10.13 yaorong319 采纳率:50%6级2014.10.14 您好: 若手机显示已连接无线网络,但是依然无法上网,建议您: 1.把手 ...

  6. LED显示驱动(二):显示驱动FPGA验证流程与注意细节

    显示驱动FPGA验证流程与注意细节 验证流程 :                                                                             ...

  7. android系统方法裁剪图片 华为手机显示为圆

    在android调用系统方法对图片进行裁剪时,华为手机显示的图形会变成圆形,改为aspectX和aspectY不是1;1就好 if(android.os.Build.MODEL.contains(&q ...

  8. 裁剪图片 华为手机显示为圆

    在android调用系统方法对图片进行裁剪时,华为手机显示的图形会变成圆形,改为aspectX和aspectY不是1;1就好 if(android.os.Build.MODEL.contains(&q ...

  9. [Unity][插件]游戏中显示FPS帧数

    在Unity 的Asset Store 商店中搜索 FPS.这些插件用于显示 FPS帧数 FPS Counter,FPS Label,Fps Graph Analyzer

  10. 手机显示仅限紧急呼叫 无服务 以及无信号的解决教程

    手机显示仅限紧急呼叫 无服务 以及无信号的解决教程MTK,这个教程限于MTK类型的手机,手机显示无服务或显示"紧急呼叫",这两种情况是有区别的,如果是无服务,表示没有接收信号,先写 ...

最新文章

  1. .classpath文件
  2. springboot源码 红色J_通达信副图指标源码之,出手就赢
  3. 2022年美国大学生数学建模竞赛O奖流程图
  4. 微信公众平台两种消息处理流程对比
  5. python中forward_符合python风格的对象
  6. MMC无法创建管理单元
  7. 实现线段切割法_漫画:如何实现抢红包算法?
  8. linux 用户、群组及权限操作
  9. DAO层、ENTITY层、SERVICE层、CONTROLLER层
  10. 手写邮箱获取验证码注册登录功能
  11. 如何在小数点前补0,new DecimalFormat(##0.00);
  12. 数字权限管理(DRM)技术
  13. 全球第一开源ERP Odoo操作手册 数据库自动备份
  14. matlab NORM函数
  15. myeclipse创建web-project没有WebRoot文件夹
  16. 水滴动态IP:自动换IP软件哪个好用?换IP的原理是什
  17. D3 二维图表的绘制系列(二十三)旭日图
  18. 今天开始正式认认真真学习Python,以上!
  19. 常见的IM开源服务器
  20. 局域网、网段、子网的区别

热门文章

  1. Shel编程之条件语句 条件 if ,case语句
  2. OC中的分类与类扩展
  3. 课堂作业:评估手机输入法——讯飞
  4. NTFS,exFAT,FAT32最详细的评测
  5. C++/C输出素数,满某个数就换行
  6. background-color:transparent
  7. 当web应用包含了websocket长连接,如何在web应用前加一层nginx转发
  8. 数竞党必看!数学竞赛权威赛事大合集,先马后看
  9. apache网站漏洞修复解决办法
  10. AI后门检测论文翻译:Universal Litmus Patterns: Revealing Backdoor Attacks in CNNs