1、 CPU 和 GPU 的设计目的分别是什么?
cpu是用于复杂逻辑计算和控制
拥有四个部分 control cache alu dram
其中cache占比比较大 串行计算 低延时设计。
dram 是动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体记忆体
gpu 图形处理中心
可以进行多线程 高并发
简单计算 大吞吐量
2、 CPU 和 GPU 哪个的 Cache、ALU、Control 单元 unit 的比例更高?
cpu cache高
gpu alu 比例高
计算单元 Arithmetic Logic Unit
3、 计算机图像渲染流水线的大致流程是什么?
图元-顶点着色器-线条着色器
-几何着色器-光栅化-片段着色器
-测试与混合
图像在应用中被处理的阶段,此时还处于 CPU 负责的时期。在这个阶段应用可能会对图像进行一系列的操作或者改变,最终将新的图像信息传给下一阶段。这部分信息被叫做图元(primitives),通常是三角形、线段、顶点等
4、 Framebuffer 帧缓冲器的作用是什么?
存储通过gpu处理后的bitmap
5、 Screen Tearing 屏幕撕裂是怎么造成的?
当显示器电子束重新开始下一帧的扫描时
帧缓冲器里的bitmap还没有ready
此时扫描出来的是上一帧的内容
然后帧处理器的bitmap被替换
也就是扫了一半就变成了新的bitmap
这样展示的内容就是上一帧和当前帧的拼接
6、 如何解决屏幕撕裂的问题?
为了解决这个问题,GPU 通常有一个机制叫做垂直同步(简写也是 V-Sync),当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。
vsync 垂直同步信号,
每次电子束结束屏幕的扫描,
显示器会发送一个vsync给frame buffer,
然后frame buffer才会读取新的frame
7、 掉帧是怎么产生的?
电子束结束当前frame的display
但是 gpu还没有处理完
没有新的bitmap
所以还会展示之前的frame
8、 CoreAnimation 的职责是什么?
Render, compose, and animate visual elements
9、 UIView 和 CALayer 是什么关系?有什么区别?
uiview负责交互 管理子视图 还有展示;
calayer负责存储bitmap
10、 为什么会同时有 UIView 和 CALayer,能否合成一个?
职责分明 便于复用
11、 渲染流水线中,CPU 会负责哪些任务?
handle event
commit transaction
decode
draw calls
12、 离屏渲染为什么会有效率问题?
新开辟一块新的内存空间
offscreen buffer和frame buffer内容交换代价
13、 什么时候应该使用离屏渲染?
需要保存中间渲染过程;效率考虑可以将屏幕外的内容预先渲染好保存,达到复用
14、 shouldRasterize 光栅化是什么?
光栅化:光,颜色与亮度,就是显示。栅,屏幕就是栅格
是layer 的一个离屏渲染属性,如果存在切圆角、阴影、组透明度这些系统会默认开。该属性开启后在renderer server中会将生成的bitmap进行保存
15、 有哪些常见的触发离屏渲染的情况?
圆角,阴影,组透明度
16、 cornerRadius 设置圆角会触发离屏渲染吗?
不会
这个之后在background和border上生效
content不会切圆角
需要设置masktobounds或者cliptobounds为yes
才会触发
17、 圆角触发的离屏渲染有哪些解决方案?
图片自带圆角、
增加mask在最上层、
贝塞尔曲线、
drawrect重写
18、 重写 drawRect 方法会触发离屏渲染吗?
不会
会将gpu工作转移到cpu
所以存在效率问题