当前位置: 首页 > news >正文

Android与IOS渲染流程对比

目录

Android

CPU计算图元信息

GPU干预 几何阶段等后处理


Android

APP通过WindowManager统一提供所有Surface的缓冲区【不管是SurfaceView还是普通的布局流程都会将数据提交到Surface的BufferQuene中】 Java中的Surface是null,最终都是由Native层的Surface处理。

Native中的Surface持有的一个接口用于和bufferQuene交互,渲染到Surface上,其实是渲染到了BufferQuene中的GraphicBuffer,通过接口将GraphicBuffer提交到BufferQuene中

通过canvas的操作之前的版本渲染是在主线程执行会耗时卡死主线程,后续通过RenderThrad(FM层)单独处理渲染,主线程耗时操作不影响渲染处理,渲染过程中会使用到OPENGl 系统进程接收到BufferQuene之后SurfaceFlinger统一合成多个Surface也就是Layer

SurfaceFliger通过OpenGl生成图层放到缓冲区frameBuffer中,hwcomposer取出frameBuffer进行再次处理并放置到frameBuffer中。

Graph Core用于分配图形缓冲区,Display用于取出缓冲区数据进行展示

CPU计算图元信息

IOS的UIView对应一个CaLayer,Android的一个Window对应一个Surface(Surface也可由SurfaceView申请创建)

IOS的CALayer中有content属性存储要显示的bitmap数据(可由纹理2D图片直接使用),数据来源是由视图树的测量布局,渲染提交后将数据打包发送给RenderServer进程处理,RenderServer进程解析包,将其提交到缓冲区中,GPU进行读取进行几何阶段后面的处理

GPU干预 几何阶段等后处理

Android的是WindowManager将计算出所有的Window(Surface),也是通过CPU计算图元信息【测量布局绘制】,Surface中有一个BufferQuene类似于CALayer的content属性。

CPU计算图元信息的时侯只记录操作指令,具体的渲染操作由FM层维护的RenderServer线程去渲染通过openGl比较耗时 。

WindwoManager将所有信息给到SurfaceFlnger后,SurfaceFlinger先自己通过opengl操作一部分数据放到frameBuffer中,再通过hwComposer具体的合成策略去合成图层(本质也是几何阶段后面的处理),GraphCore用于分配图形缓冲区 Andrid和ios原理大致一样 都是CPU计算图元信息,IOS通过RenderServer进程去处理渲染,Android是FM层的RenderServer线程去处理渲染操作。 图元计算完成后都是GPU去取数据进行几何阶段后面的处理 。 Android除了用canvas设置Surface内容也可以使用OPENGL设置Surface。

http://www.lryc.cn/news/215965.html

相关文章:

  • 正则表达式以及 pattern 的撰写方式
  • K8s Error: ImagePullBackOff 故障排除
  • 爬虫之爬虫介绍、requests模块、携带请求参数、url 编码和解码、携带请求头
  • pytorch笔记:split
  • K8S运维 解决openjdk:8-jdk-alpine镜像时区和字体问题
  • Kubectl详解(陈述式、声明式)
  • 使用HttpClient库的爬虫程序
  • VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)
  • 【CSDN 每日一练 ★★☆】【动态规划】最小路径和
  • 前端学习之webpack的使用
  • 【java学习—十一】泛型(1)
  • CN考研真题知识点二轮归纳(4)
  • ROS学习笔记(4):ROS架构和通讯机制
  • 深度新闻稿件怎么写?新闻稿怎么写得有深度?
  • 百度智能云千帆大模型平台黑客马拉松报名开启!
  • 数据库 | 看这一篇就够了!最全MySQL数据库知识框架!
  • Android 控件背景实现发光效果
  • 安全狗亮相厦门市工信领域数据安全宣贯培训会
  • 最长回文子串
  • 从瀑布模式到水母模式:ChatGPT引领软件研发的革新之路
  • 一种使用wireshark快速分析抓包文件amr音频流的思路方法
  • 银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit
  • InnoDB - 双写机制
  • 【蓝桥杯选拔赛真题08】C++最大值最小值平均值 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析
  • 软考高级系统架构设计师系列之:系统开发基础知识、项目管理、信息安全和网络安全、计算机网络章节选择题详解
  • 0基础学习PyFlink——时间滑动窗口(Sliding Time Windows)
  • API安全之《大话:API的前世今生》
  • H5或者Vue实现二维码识别
  • stm32整理(三)ADC
  • Redis-持久化+主从架构