OC中的烘托 和 离屏烘托

一、相关根柢概念

1.帧缓存区(FrameBuffer)

帧缓冲存储器(FrameBuffer):简称帧缓存或显存,它是屏幕所闪现画面的一个直接映像,又称为位映像(Bit Map)或 光栅。帧缓存的每一个存储单元对应屏幕上的一个像素,整个帧缓存ios退款对应一帧图画。

2.上下文切换

上下文 是指某一时刻点CPU寄存器和程序计数器的内容。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。程序计数器是一个专数据处理是什么作业用的寄存器,用于标明指令序操作体系是什么的接口列中CPU正在实施的方位,存的值为正在实施的指令方位或许下一个即将实施的指令方位(详细依托于特定的体系)。
上下文切换 (有事也称做ios体系进程切换或许使命切换):是指CPU从一个 进程/线程/使命 切换到一个 进程/线操作体系期末考试试题及答案程/使命。略微详细点描绘便是:上下文切换能够认为是内核(操作体系的中心)在CPU上关于进程(包含线程)进行以下活动:
(1)挂起一个进程,将这个进程在CPU中的上下文状况存储到内存中的某处,
(2)在内操作体系期末考试试题及答案存中检索下一个进程的上下文内容并将其在CPU的寄存器中康复,
(3)缓存视频兼并app下载跳转到程序计缓存视频兼并数器所指向的方位(即跳转到进程被中止是数据处理是什么作业的代码行),以康复该进程。

留神:CPU是经过为每个操作体系有哪些进程(包含线程)分配CPU时刻片来完毕多线程机警。CPU经过时刻片分配算法来实施使命,其时ios体系使命实施一个时刻片opengl怎样晋级后会切换到下缓存视频兼并一个使命。可是,在切换前会保存上一个使命的上下文状况,以便下一次切回这个使命是,能够再加载这个使命的状况,以便继续实施上一个使命。所以使命从保存到在加载的进程便是一次上下文切换。
上下文切换通常是核算密集型的,意味着此操作会消耗许多的CPU时刻,故线程也不是越多越好。怎样减少体系中上下文切换的次数,是缓存视频变成本地视频前进多缓存和下载的差异线程的功用的一个关键课题。

3.画家算法

缓存家算法也叫做优先填充,它是核算机图形学中处理可见性问题的一种处理办法。”数据处理软件画家算法“标明一个脑筋简略的画家首要制作间opengles3.1扩展包隔较远的场景,然后制作间隔较近的场景掩盖较iOS远的部分。画家算法首要将场景中的多边形依据深度进行排序,然后依照ios14.4.1更新了什么次序进行描绘。这种办法通常会将不可见的opengl和directx部分掩盖,这样就能够处理可操作体系的基本特征见性问题。

opengl烘托gpu怎样设置ios中 首要的烘托操作是由 CoreAnimationRender Server模块经过调用显卡驱动供给接口OpenGL/Matal来实施的的

IOS关于每一层的Layer,RenderServer会操作体系有哪些依照深度排序顺次输出到FrameBuffer中,后一层会掩盖前一层,然后达到究竟作用。此进程是不可逆的,遮住部分的数据永数据处理的最小单位久丢掉无法批改。

4.光栅化(Rasterization)

光栅化(Rasterization)是吧极点数据转化为片元的进程,具有将图转化为一个个栅格组成的图操作体系的主要功用是像的作用,特征是每个元素对应帧缓冲区中的一个像素。操作体系有哪些

二、iOS Renderiios退款ng Process 概念

iOS R操作体系是一种endering Process 译为 iOS 烘托流程,本文特指 iOS 设备从设置即将闪现的图元数据到究竟在设备屏幕成像的整个进程。

在初步剖析 iOS Render缓存视频兼并ing Process 之前,咱们需求对 iOS 的烘托概念有一个根柢的认知:

1. 依据平铺的烘托

IOS 设备的屏幕分为N*N像素的图块,每个图块都适合于SoC缓存,几许图形在图块内被许多的opengl怎样晋级拆分,只要在全部几许体全部提交后操作体系是计算机体系的一种才调够进行光栅化(Rasterization)。
OC中的烘托  和 离屏烘托

留神: 这儿的光栅化值将屏幕上面被许多拆分ios14出来的几许体烘托为像素点的进程。

OC中的烘托  和 离屏烘托

2.iOS Rendering 技能结构

事实上 iOS 烘托相关的层级差异大约如下:
OC中的烘托  和 离屏烘托

图形烘托技能栈

下图所示为 iOios14.4.1更新了什么S App 的图形烘托技能栈,App 运用 Core Graphics、Core Animation、Core Image 等结构来制作可视化内容,这些软件结构相互之间也有着依托联络。这些结构都需求经过 OpenGL 来调用 GPU 进行制作,究竟将内容闪现到屏幕之上。

OC中的烘托  和 离屏烘托

各个结opengl版本过低构首要作用操作体系的主要功用是如下:

UIKit

咱们日常开发中运用的用户交互组件都来自于 UIKit Framework,咱们经过设置 UIKit 组件的 Layout 以及 Background数据处理的基本单位是Color 等特征来完毕日常的界面绘画作业。其实 UIKit Framework 本身并不具备在屏幕成像的才能,它首要担任对用户操作作业的照顾,缓存视频兼并app下载作业照顾的传递缓存视频怎样转入本地视频大体是经过逐层的视图树遍历完毕的。

Core Animation

CoreAnimation 源ios是什么意思自LayerKit,动画仅仅CoreAnimation特性的冰上一角。CoreAnimation是一个复合引擎,其责任是尽或许快的组合屏幕上不同的可视内容,这些可视内容被分解成独立的图层(即CALayer),这些图层会被存储在一个叫图层树的体系中。从实质上而言,CALayer是用户所能在屏幕上看见的仅有基础。

Core Graphic

Core Graphic 依据 Quartz 高级绘图引擎,首要用于运转时制作图画。开发者能够运用此结构处理依据途径的绘图、转化、色彩处理、离屏烘托、图画、渐变和暗影、图画数据处理、图画创立和图画遮罩缓存视频变成本地视频以及 PDF 文档创立,闪现和剖析。
当开发者需求在 运转时创立图画 时,能够运用 Core Graphics 去制作。与之相对的是 运转前创立图画数据处理的常用办法有,例如用 Photoshop 提前做好图片素材直接导入运用。相比之下,咱们更需求 Core Graphics 去在运转时实时核算、制作一系列图画帧来完毕动画。

Core Image

Core Image 与 Core Graphics 恰恰相反,Core Gios8备忘录raphics 用于在 运转时创立图画,而 Core Image 是用来处理 运转前创立opengl三重缓冲的图画 的。Core IOpenGLmage数据处理办法 结构具有一系列现成的图画过滤器,能对已存在的图画进行高效的处理。

大部分状况下,Core Imaios退款ge 会在 GPU 中完毕作业,但假缓存视频怎样转入相册设 GPU 忙,会运用 CPU 进行处理。

OpenGL ES

OpenGL ES(OpenGL for Embedded Systems,简称 GLES),是 Opopengl是什么意思enGL 的opengl怎样装置与装备子集。在前面的 图形烘托原理总述 一文中说到过 OpenGL 是一套数据处理的常用办法有第三方规范,函数的内部完毕由对应的 GPU 厂商开发完毕。

Matal

Metal 相似于 OpenGL ES,也是一套第三方规范,详细完毕由苹果完毕。大多数开发者都没有直接运用过 Metal,但其实全部开发者都在间接地运用 Metal。Core Animati数据处理on、Core Image、SceneKit、SpriteKit 等等烘托结构都是构操作体系期末考试试题及答案建于 Metal 之上的。

当在真机上调试 OpenGL 程序时,控制台会打印出启用 Metal 的日志。依据这一点能够猜想,Apple 现已完毕opengl是什么意思了一套机制将 OpenGL 指令无缝OpenGL桥接到 Metal 上,由 Metal 担任真正于硬件交互的作业。

UIView 与 CALayer 的联络

在前面的 Core Animation 简介中说到 CALayer 事实上是用户所能在屏幕上看见的全部的基础。为什么 UIKit 中的视图能够出现可视化内容?便是由于 UIKit 中的每一个 UI 视图控件其实内部都有一个相关的 CALayer,即 backing layer。

由于这种一一对opengl和directx应的联络,视图层级具有 视图树 的树形结构,对应 CALayer 层级也具有 图层树 的树形结构。
OC中的烘托  和 离屏烘托
其间,视图的责任是 创立并处理 图层,以确保当子视图在层级联络中 增加或被移除 时,其相关的图层在图opengl怎样装置与装备层树中也有相同的操作,即确保视图树和图层树在结构上的一致性。视图层还处理用户的交互照顾

Q:那么为什么 iOS 要依据 UIView 和 CALayer 供给两个平行的层级联络呢?

其原因在于要做 责任别离,这样也能避免许ios下载多重复代码。在 iOS缓存视频在手机哪里找 和 Mac OS X 两操作体系有哪些个平台上,作业和用户交互有许多当地的不同,根操作体系是一种据多点触控的用户界面和依据鼠标键盘的交互有着实质操作体系是一种什么软件的差异,这便是为什么 iOS 有 UIK数据处理的目的是什么it 和 UIView,对应 Mac OS X 有 AppKit 和 NSView 的原因。缓存视频兼并app下载它们在功用上很相似,可是数据处理的常用办法有在完毕上有着明opengl三重缓冲显的差异。

实践上,这ios卖肉直播不收费下载儿并不是两个层级联络,而是四个。每一个都扮演着不同的人物。除了 视图树图层树,还有 出现树烘托ios体系

1.CAL操作体系yaer

那么为什么 CALayer 能够出现可视化内容呢?由于 CALayerios是什么意思 根柢等同于一个 纹路。纹路是 GPU 进行图画烘托的重要依据。

在 图形烘托原理操作体系的五大功用 中说到纹路实质上便是一张图片,因而 CALayer 也包含一个 contents 特征指向一块缓存区,称为 backing store,能够寄存位图(Bitmap)。iOS 中将该缓存区保存的图片称为寄宿图
OC中的烘托  和 离屏烘托
图形烘托流水线支撑从极点初步进行制作(在流水线中,极点会被处理生成纹路),也支撑直接运用纹路(图片)进行烘托。相应地,在实践开发中,制作界面也有两种办法:一种是 手动制作;数据处理另一种是 运用图片。
对此,iOios体系S 中也有两种相应的完毕办法:

  • 运用图opengl是什么意思片:contents image
  • 手动制作:custom drawing
Contents Image

Content缓存视频怎样转入相册s Image 是指经过 CAopengl烘托gpu怎样设置Layer 的 contents 特征来配备图片。可是,contents 特征操作体系的主要功用是的类型为 id。在这种状况下,能够给缓存视频兼并app下载 contents 特征赋予任何值,app 仍能够编译经过。可是在实践中,假定 content 的值不是 CGImage ,得到的图层将是空白的。
既然如此,为什么要将 contents 的特征类型界说为 id 而非 CGImage。这是由于在 Mac OS 体系中,该特征对 CGImage 和 NSImage 类型的值都起作用,而在 iOS 系缓存的视频怎样保存到本地统中,该特征只对 CGImage 起作用。
实质上,contents 特征指向的一块缓存区域,称为 backin操作体系是计算机体系的一种g store,能够寄存 bitmap 数据。

Custom Drawing

Custom Drawing 是指运用 Core Graphics 直接制作寄宿图。实践开发中,一般经过继承 UIView 并完毕 -drawRect: 办法来自界说制作。
虽然 -drawRect: 是一个 UIVopengl形式iew 办法,但事实上都是底层的 CALayer 完毕了重绘作业并保存了产生的图片。下图所示为 -drawR数据处理的最小单位ecopengl怎样晋级t: 制作界说寄宿图的根柢原缓存和下载的差异理。
OC中的烘托  和 离屏烘托
UIView 有一个相关图层,即 CALayer。
CALayer 有一个可选的 delegate 特征,结ios退款束了 CALayerDe缓存视频怎样转入本地视频legate 协议。UIView 作为 CA数据处理是什么作业Layer 的署理完毕了 CALayerDelegae 协议。
当需求重绘时,即调用 -drawRect:,CALayer 恳求其署理给予一个寄宿图来闪现。
CALayer 首要会查验调用 -disp操作体系期末考试试题及答案la操作体系是一种yLayer: 办法,此时署理能够直接设置 contents 特征。

  • -(void)displayLayer:(CALayer *)layer;

假定署理没有完毕 -displayLayer: 办法,CALayer 则缓存文件在哪里会查验调用 -drawLayer:inContext: 办法。在调用该办法前,CALayer 会创立数据处理办法一个空的寄宿图(规范由 bounds 和 contentScale 决议)和一个 Corios卖肉直播不收费下载e Graphics 的制作上下文,缓存视频变成本地视频为制作寄宿图opengl烘托gpu怎样设置做准备,作为 ctx 参数传入。

  • -(void)drawLayer:ios退款(CALayer *)layer inContext:(CGContextRef)ctx;

终究,由 Core Graphics 制作生成的寄宿图opengles3.1扩展包会存入 backing store。

Core Animation 流水线

经过前面的介绍,咱们知道了 C数据处理技能的开展阅历了三个阶段ALayer 的实质,那么它是怎样调用 GP数据处理的常用办法有U 并闪现可视化内容的呢?下面咱们就需求介绍一下 Core Animation 流水线的作业原理。
OC中的烘托  和 离屏烘托
事实上数据处理的基本单位是,app 本身并不担任烘托,烘托则是由一个独立的进程担任,即 Render Server 进程。
App 经过 IPC(InterProcess-Coopengl形式mmunication进程间通讯) 将烘托使命及相关数据提交给 Render Server。Render Server 处理完数据后,再传递至 GPUios14桌面布局图片。终究由 GPU 调用 iOS 的图画设备进行闪现。

Core Animation 流水线的详细进程如下数据处理是什么作业

  • 首要,由 app 处理作业(Handle Events),如:用户的点击操作,在此进程中 app 或许需求更新 视图树,相应地,图层树 也会被更新。
  • 其次,app 经过 CPU 完毕对闪现内容的opengl三重缓冲核算,如:视图的创立、布局核算、图ios体系片解码、文本制作等。在完毕对闪现内容的核ios是什么意思算之后,app 对图层进行打包,并不才一次 RunLoop 时将其发送至 Render Server,即数据处理员是干什么的完毕了一次 Commit Transaction 操作。
  • Renopenglskiader Server 首要实施 Open GL、Core Graphics 相关程序,并调用 GPU
  • GPU 则在物理层上完毕了对图画的烘托。
  • 究竟,GPU 经过 Frame Buffer、视频控制器等相关部件,将图画闪现在屏幕上。

对上述过程进行串联,它们实施数据处理所消耗的时刻远远缓存视频怎样转入相册跨越 16.67 ms,因而为缓存视频在手机哪里找了满足对屏幕的 60 FPS 刷新率的支撑,需求将这些过程进行分解,经过流水线的办法进行并行实施,如下图所示。
OC中的烘托  和 离屏烘托
Commit Transaction
在 Core Animation 流水线中,app 调用 Reopengl三重缓冲nder Server 前缓存视频怎样转入本地视频的终究一步 Commit Transactiios体系on 其实能够细分为 4 个过程:

  • Layout

Layout 阶段首要进行视图构建,包含:LayoutSubviews 办法的重载,addSubOpenGLview: 办法填充子视图等。

  • Display

Display 阶段首要进行视图制作,这儿仅仅是设置最要成像的图元数据。重载视图操作体系是计算机体系的一种的 drawRect: 办法能够自界说 UIView 的闪现,其原理是在 drawRect: 办法内部制作寄宿图,该进程运用 CPU 和内存。

  • Prepare

Prepare 阶段归于附操作体系当时的装备不能运转此应用程序加过程,一般处理图画的解码和转化等操作。

  • Commit

Commit 阶段首要将图层进行打包,并将它们发送至 Render Se数据处理办法rver。该进程会递归实施,由于图层和视图都是以树形结构存在。

动画烘托原理

iOSios体系 动画的烘托也是依据上述 Core Animation 流水线完毕的。这儿咱们关键重视 app 与 Render Server 的实施流程
日常开发中,假定不是操作体系是一种什么软件操作体系是计算机体系的一种别杂乱的动画,一般运用 UIView Animation 完毕,iOS 将其处理进程分为如下三部阶段:

  • Stios体系ep 1:调用 animati操作体系的主要功用是onWithDur数据处理的最小单位ation:opengl怎样装置与装备animations: 办法
  • Step缓存的视频怎样保存到本地 2:在 Animation Block 中进行 Layout,Display,Prepare,Commit 等过程。
  • Sios8备忘录tep 3:Render Server 依据 Animation 逐帧进行烘托。

OC中的烘托  和 离屏烘托

离屏烘托(off-Screen操作体系是一种什么软件 Rendering)

离屏烘托的界说

在OpenGLios卖肉直播不收费下载中,GPU屏幕烘托有以下两种办法:
1.其时屏幕烘托(On-Screen Rendering):正常状况下,咱们直接在帧缓冲区中(FrameBuf操作体系的基本特征ffer)烘托好数据,然后读取数据闪现在屏幕上。
OC中的烘托  和 离屏烘托
2.离屏烘托(Off-Screen Renderin数据处理的目的是什么g):假定有事由于一些束缚,无法把烘托的作用写入到帧缓存操作体系的五大功用区,而是先暂存在其他的内存区域,之后再写入帧缓冲去,这个进程称为离屏烘托。
OC中的烘托  和 离屏烘托

在上面的CoreAnimation流水线暗示图中,咱们能够得知首要的烘托操作是由CoreAn操作体系的基本特征imation的Render Server模块,经过调用显卡驱动供给的OpenGL或Metal接口实施,关于每一层layer,Render Server会遵从“画家算法”(由远及近),按次序输出到frame buffer,然后按缓存视频变成本地视频照次序制作到屏幕,当制作完一层,就会将该层从帧缓存区中移ios下载除(以节省空间)数据处理是什么作业如下图,从左至右顺次输出,得到终究的闪现作用。
OC中的烘托  和 离屏烘托
但在某些场景下缓存视频在手机哪里找“画家算法”虽然能够逐层输出,可是无法在某一层烘ios卖肉直播不收费下载托完毕后,在回过头来擦除/修缓存视频正某一部分,由于这一层之前的layer像素数据现已被永久掩盖了。这就意味着关于每一层的layer要么能够经过单次遍历就能完毕烘托,要么就数据处理的最小单位只能令拓荒一块内存作为暂时中转区来完毕杂乱的批改/裁剪等操作。

举例说明:对图3进行圆角和裁剪:imageVieios卖肉直播不收费下载w.clipsToBounds = YES,imageView.laye缓存视频兼并r.cornerRadius=10时,这就不是简略的图层叠加了,图1,图2,图3烘托完毕后,还要进行减少,而且子视图layer由于父视图有圆角,也需求被裁剪,无法在某一层烘托完毕之后,再回过头来擦除/改动其间的某个部分。所以不能依照正常的流程,因而苹果会先烘托好每一层,存入一个缓冲区中,即离屏缓冲opengl怎样装置与装备区,然后经过层叠加和处理后,再存OpenGL储到帧缓存opengl是什么意思去中,然后制作到屏幕上,这种处理办法叫做离屏烘托

关于剪切触发离屏烘托剖析

ios体系于常见的设置圆角触发离屏烘托示例说明:
OC中的烘托  和 离屏烘托

  • btn1设置了图片,设置了圆角,翻开了clip数据处理员是干什么的sToBounds = YES,触发了离屏烘托opengl怎样装置与装备.
  • btn2设置操作体系的五大功用了布景色彩,设置了圆角,翻开了clipsToBounds = YE缓存视频在手机哪里找S,没有触发离屏烘托。
  • img1设置了图片,设置了圆角,翻开了masksToBounds = YES,触发了离屏烘托。
  • img2设置了布景ios退款色彩,设置了圆角,翻开了masksToBounds = YES,没有触发离屏烘托

关于每一层ios体系layer,要么能找到一种经过单次遍历就能完毕烘托的算法,要么就不得不另开一块内存,凭借这个暂时中转区域来完毕一些更杂乱的、多次的批改/取舍操作。关于btn1 由于其包含了子视图(image是它的子视图),在缓存和下载的差异剪切btn1时需求去除子视图超出的部分所以会触发离线烘托。而img1 应为设置了布风光,画家算法也会先制作backgroundColor 然后制作 content中的内容,也是不能单次遍历完毕烘托所以也会触发离屏操作体系当时的装备不能运转此应用程序。可是btn2 和 img2 都是能够单次遍历烘托完毕所数据处理办法以不会触发离屏烘托

常见离屏烘托场景剖析

  • coios体系rnerRadius+clipsToBounds,原因就如同上面说到的,不得已只能另开一块内存来操作。而假定仅仅设置cornerRadius(如不需求剪切内容,数据处理软件只需求一个带圆角操作体系的基本特征的边框),或许仅仅需求裁掉矩形区域以外的内容(虽然也是剪切,可是略微想一下就能够发现,关于ios下载纯矩形而言,完毕这个算法好像并不需求另开内存),并不会数据处理办法触发离屏烘托。关于剪切圆角的功用优化,依据场景不同有几个计划可供选择,十分举荐阅缓存视频怎样转入本地视频览AsyncDisplayKit中的一篇文档点我。

  • shadow ,原因在于,虽然layer本身是一ios模拟器块矩形区域,可是暗影默许是作用在其间”非通明区域”的,而且需求闪操作体系的基本特征现在全部layer内容的下方,由于此时暗影的本体(layer和其子layer)都还没有被组合到一同,所以不能在第一步就画出只要完毕终究一步之后才调知道的opengles3.1扩展包形状

这样一来又只能其他恳求一块内存,把本体内容都先画好,再依据烘操作体系期末考试试题及答案ios是什么意思作用的形状,增加暗影到frame buffer,终究把内容画上去(这仅仅我的猜想,实践状况或许更杂乱)。不过假ios下载数据处理技能的开展阅历了三个阶段咱们能够预先奉告CoreAnimation(经过shadowPath特opengl形式色)暗影的几许形状,opengl三重缓冲那么暗影当然能够先被独立烘托出来,不需求依托layer本体,也就不再需求离屏烘托了。

  • group opacity,其实从姓名就能够猜到,alpha并不是分别运用在ios是什么意思每一层之上,而是只要到整个layer树画完之后,再一致加上alpha,终究和底下其他layer的操作体系是计算机体系的一种像素进行组合。显着也无法经过一次遍历就得到究竟作用。将一对蓝色和赤色layer叠在一同,然后在父layer上设置opacity=0.5,并仿制一份在旁边作比照。左面关闭opengl是什么意思group opacity,右边坚持默许(从iOS7初步,假定没有显式指定,group opacity会数据处理办法默许翻开),然后翻开offscreen renderinopengles3.1扩展包g的调试,咱们会发现右边的那一组确实是离屏烘托了。

  • mask,咱们知道miOSask是运用在layer和其全部子layerios体系的组合之ios退款上的,而且或许带有通明度,那么其实和group opacity的opengl怎样装置与装备原理相似,不得不在离屏烘托中完毕。

  • 其他还有一些,相似allows缓存视频兼并EdgeAntialiasing等等也或许会触发离屏烘托,原理也缓存视频兼并缓存视频怎样转入相册是相似:假定你无法仅仅运用缓存文件在哪里frame buffer来画出究竟作用,那就只能另开一块内存空间来储存中心作用。这些原理并不奥秘。

GPU离屏烘托的功用影响

离屏烘托对功用的影响,不单单只表现在额外离屏烘托的内存,相关于内存的影响其最首要的影响opengl三重缓冲上下文切换
GP缓存视频怎样转入相册U的操作是高度流水线化的。本来全部核算作业都在有条不紊地正在向frame buffer输出,此时遽然收到指令,需求输出到另一块内存,那么流水线中正在进行的全部都不得不被丢掉,opengl和directx切换到只能服务于咱们其时opengles3.1扩展包的“切圆角”操作。等到完毕往后再次清空,再回到向fr缓存视频在手机哪里找ame buffer输出的正常流程。

在table缓存视频兼并app下载View或OpenGL许collectionView中,翻滚的每一帧改动都会触发每个cell的从头制作,因而一旦存在离屏烘托,上面说到的上下文切换就会每秒产生60次,而且很或许每一帧有几十张的图片要求这么做,关于GPU的功用冲击可想而知(GPU十分拿手大规模并行核算,可是我想再三的上下文切换显着不在其规划考量之中)操作体系是计算机体系的一种

善用离屏烘托,前进功用

CALayer为这个计划供给了对应的解法:shouldRasterizeios14一旦被设置为true,Render Server就会强制把layer的烘托作用(包含其子layer,以及圆角、暗影、group opacity等等)保存在一块内存中,这样一来不才一帧依然能够被复用,而不会再次触发离屏烘托。有几个需求留神的点:数据处理的目的是什么

  • shouldRasterize的宗旨在于下降功opengl怎样晋级用丢失,但总是至少会触发一次离屏烘托。假定你的layer本来并不杂乱,也没有圆角暗影等等,翻开这个开关反而会增加一次不必要的离屏烘托

  • 离屏烘托缓存有空间上限,最多不跨越屏幕总像素的2.5倍巨细

  • 一旦缓存跨越100ms没有被运用,会主动被缓存视频变成本地视频丢掉

  • layer的内容(包含子layer)有必要是静态的,由于一旦产生改动(如resize缓存视频兼并app下载,动ios退款画),之前辛苦处理得到的缓存就失效了。假定这件事再三产生,咱们就又回到了“每一帧都需求离屏烘托”的情形,而这正是开发者需求极力避免的。针对这种状况,Xcode供给了“Color Hits Green and Misses缓存视频 Red”的选项,协助咱们检查缓存的运用是否符合预期

  • 其实除了处理多次离屏烘托的开销,shouldRasterize在另一个场景中也能够运用:假定layer的子结构十分杂乱,烘托一次所需时刻较长,相同能够翻开这个开关,把layer制作到一块缓存,然后在接下来复用这个作用,这样就不需求每次都从头制作整个layer树了

什么时候需求CPU烘托

烘托功用的调优,其实始终是在做一件事:平衡CPU和GPU的负载,让他们尽量做各自最拿手的作业。
绝大多数状况下,得益于GPU针ios体系对图形处理的优化,咱们都会倾向于ios卖肉直播不收费下载让GPU来完毕烘托使命,而给CPU留出满足时刻处理各种各样杂乱的App逻辑。为此Core Ani缓存视频变成本地视频mation做了许多的作操作体系是什么的接口业,尽量把烘托作业转化成适合GPU处理的形式(也便是所谓的硬件加速缓存文件在哪里,如layer composition,设置backgroundCol缓存视频兼并app下载or等等)。

可是关于一些状况,如文字(CoreText运用CoreGraphics烘操作体系托)和图片(ImageIO)烘托,由于GPU并不拿手做这些作业,不得不先由CPU来处理好往后,再把作用作为textu操作体系的基本特征re传给GPU。除此以外,有时候也会遇到GPU实在忙不过来的状况,而CPU相对闲暇(GPU瓶颈),这时能够让CPU分管一部分作业,前进整体功率。

参考

chuq数据处理技能的开展阅历了三个阶段uan.me/2018/09/25/…
/post/684490…
www.缓存视频兼并jianshu.com/p/39b91ecaa…
www.jianshu.c缓存和下载的差异om/p/c778c数据处理的基本单位是f2a1…