请选择 进入手机版 | 继续访问电脑版

Android回炉系列之Surfaceflinger

[复制链接]
为你演绎 发表于 2021-1-3 11:54:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
Android回炉系列之Surfaceflinger


文章目次



前言

很早开始就有想写写博客的想法,究竟好记心不如烂笔头,这段时间公司业务要求,对音视频、渲染等要有深度明确,突然之间发现自己脑壳是空空的,没办法就只有系统性的回炉一遍,同时也做好存档,以便于后期的复习、升华做铺垫!好了废话不多说了。我们首先从界面绘制渲染开始,竟然是绘制那么针对我们Android系统而言我们是怎么把视图出现给用户的呢?带着这个疑惑,我们就从surfaceflinger开始一一剖析。
  2. Surfaceflinger

在学习之前给出其总结的五个特点。以便反面的细则明确和设计结构的明确。
2.1 特点一

surfaceflinger在Android系统中并不是继续渲染脚色,而是一个工具(“传输呆板”),把每个应用传输过来的图元数据处置惩罚后交给CPU||GPU做绘制处置惩罚。
2.2 特点二

由于针对每个应用而言都是以Surface做为一个图元为传输单位,向surfaceflinger传输图元数据。如下图:

2.3 特点三

通过阅读发现Surfaceflinger设计核心思想就是以生产者和消费者的模式,会把每一个应用的Surface图元生存到SufaceflingerQueue队列中,Surfaceflinger作为消费者会根据一定的逻辑规则把生产者放入Surface一一处置惩罚。如下图:

2.4 特点四

由于应用历程和Surfaceflinger是两个独立的历程,那么图元数据是怎么实现传输的呢?这里就需要跨历程通信,这里就会连锁反应想到socket和binder但是由于socket需要拷贝两次在效率上不可取,binder又有巨细限制似乎是1M不到还要包罗别的的通信也不可取,所以为了办理这个问题,Android系统使用了共享内存(匿名共享内存ion),匿名共享内存也只需要拷贝一次的历程通信方式,听大神说比力靠近Linux共享内存。详细实现方式后期在学习~如下图:

2.5 特点五

Surfaceflinger底层有一个时间钟在不停循环,从硬件中发出大概从软件模仿发出记时唤起,每个一段时间(16ms)都会获取Surfaceflinger中的图元队列通过CPU/GPU绘制到屏幕上。这个特点有点绕,因为此特点应用有办法通知Surfaceflinger渲染模式,Surfaceflinger绘制屏幕有自身回调自身特点等。如下图:

PS:对于相位和Vsync(垂直信号)的先容我们会在后续同步。
3. 小结

上述五点就是Surfaceflinger的设计核心特点,按照这五个特点阅读可以低落其复杂性。那么Surfaceflinger和skia有什么关系呢?和顶层View的绘制又有什么关系呢?
我们通过层级区分如下:

  • framework面向应用开发者的View是便于开发的控件,内里提供了当前控制的属性以及功能。
  • Skia是Android对于屏幕的画笔,颠末View的onDraw方法回调,把需要绘制的东西通过Skia绘制成像素图元生存起来。
  • Surfaceflinger是最后吸收Skia的绘制效果,最后同步到屏幕上。
所以,Skia是Android渲染的核心,最终Skia和系统团结起来才是一个完整的渲染体系。如下图:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )