为什么GPU渲染显卡gpu利用率低掉帧,游戏掉帧

  首先贴上我的电脑配置
  需要注意的是··这个是检测的显卡是集成显卡···实际的独显型号是ATI的HD7670M
  有些人问:为什么我玩FIFA打一会就一卡一卡的?
  有些人问:为什么我打起来跟幻灯片一样?
  有些人问:为什么我打联赛的时候球员跑得一会快一会慢?
  甚至还有人说这是对面开了挂···当然我也怀疑排位有人开挂···
  但是其实··这些大部分都可以归结为一个问题··那就是掉帧
什么是掉帧?
  掉帧:一般指由于硬件不足以负荷显示器画面动态显示刷新的频率,从而帧率过低所造成的画面出现停滞(或短时间或长时间)现象。
  掉帧在游戏中就是玩游戏过程中,出现卡这种情况,图像未及时刷新造成,画面粘滞。
  这是百度搜索的结果··当然我们不是每个人都是土豪··肯定电脑硬件有高有低···但是至少从我个人而言··我玩渲染做动画这电脑都没问题··玩个FIFA开最低效果总应该不卡吧···所以·还是我们的软件上出了问题
  告诉大家一个最傻的解决办法··我最开始也是这么干的····由于软件或者显卡驱动所引起的掉帧··就是画面和数据不同步··所以如果你一旦在游戏过程中感觉到有一点开始卡顿了·那么马上ESC··再取消回到游戏界面··你会发现就不卡了···但是这只是表面现象·这样的流畅游戏只能维持1-3分钟不等
那么怎么解决这种掉帧?
  我从那天开放公测开始玩··就一直卡···这么多天到处找解决的办法··也看了很多说法和解决方案····楼主作为一个设计狗并不是程序猿出身··所以不能完美的帮助大家判断你们各自的问题··所以我就把我知道的解决方案全部写出来··如果有条件的话··你可以按照这些方案一个一个的来尝试···我相信能解决80%的A卡朋友掉帧的问题了
第一:电脑温度过高
  现在是夏天·气温较高··电脑温度过高是常见的问题·也导致了散热器这种东西的大卖特卖
  但是作为现在的电脑··外部气温对机器硬件的温度的影响其实非常小了··我就不懂那个风扇对着电脑吹有什么用······
  所以··我们的电脑温度过高··很可能是由于机器内部长时间累积的灰尘所导致的
  CPU或显卡的温度过高··就会触发系统对于保护硬件的判定··那么系统就会自动对CPU进行降频处理··也就是说系统会自动减小CPU的运算效率来保护你的电脑
  那么第一个解决的方案··各位朋友可以把电脑拿到维修店去除尘··几十块钱应该可以搞定了··台式机或者拆卸简易的电脑·你可以自己拿螺丝刀把它拆开···用吹风机对着机器内部和风扇吹一下··这样才是我们屌丝的本色~
第二:显卡驱动
  楼上已经讲了··我是设计狗不是程序猿··所以显卡驱动程序对显卡的影响的原理我也不太清楚···但是··有这么一些朋友很可能就是因为显卡驱动的问题而导致了掉帧··所以这里我简单总结一下解决显卡驱动的办法
  第二种解决方案就是···下载一个驱动精灵··让它自动检测你电脑里面的所有驱动程序··然后找到你自己显卡的驱动进行更新··一般来说下载安装以后重启··基本上就能解决了··
  但是我更新驱动以后并没有解决··所以这里给各位朋友提供另外一个具体的驱动程序··它就是“AMD Catalyst 14.4 WHQL”·在百度搜索后下载安装····当然这个程序我没有具体的安装试验过··所以各位吧友谨慎操作·
第三:ATI显卡设置
  楼主亲测·今天自己摸索调试以后·联赛和世界杯模式都不卡·
  为了给大家讲清楚·我分成两楼来上贴图·大家按步骤尝试
  首先·打开显卡的设置面板·楼主是WIN7·所以在桌面空白位置右键·第一项“显示卡属性”就是了·WIN8的话请各位吧友自己找找·
  按上图·右上角的首选项点开·选择高级视图·这个时候整个面板样式就会改变·以前的一些隐藏设置也都能看到·
  如上图·切换到高级视图以后的面板
  由于楼主的电脑是华硕·而华硕有一个非常华而不实的技术叫做显卡集火·意思就是我电脑里面有2块显卡·一块集成显卡一块独立显卡·华硕的技术就是让他们一起工作·从而效率更高·
  如果吧友同样用华硕笔记本·请在左边游戏选项下第三项·把显卡集火禁用了·
  然后··同样是游戏这一栏·选择你自己的显卡
  右边会出现很多选项··其他的不要动·如图上帧速率控制这一栏·等待垂直更新改成“始终开启”·OPENGL三重缓冲改成“开”·然后应用·
  以上三种方案·到这里就讲完了·楼主除了没有安装AMD那个显卡驱动·其他都操作了·在更改了设置以后可能等了一会·然后玩FIFA联赛和世界杯就完全没有了卡顿和掉帧的现象·
更多相关内容请关注:
分享次数:
游戏名称:FIFA Online3
游戏制作:EA
游戏发行:EA
游戏平台:PC
上市时间:
游民指数:--
特色属性: 
······························
热门游戏攻略推荐
最新下载推荐
近期游戏大作推荐
热点内容图文推荐
近期热点内容回顾
精彩视频推荐
Copyright&2003- All rights reserved. 游民星空 版权所有
冀ICP证B2-后使用快捷导航没有帐号?
平板/笔记本
云服务专区
解决游戏卡顿掉帧,流畅如飞~
90%你都不会知道!!!!
&自成一派&
来自:浏览器
本帖最后由 manipulav 于
15:56 编辑
IMG_453_副本.jpg (55.06 KB, 下载次数: 14)
11:34 上传
这个暑假真的很闲很无聊,没事的时候只能跟小伙伴在家刷刷LOL,守望屁股什么的,然后晚上就懒得玩电脑了,都是开着空调躲被窝里面玩什么“王者荣耀”什么的,跟室友一起开黑还是很开心的。进来总结2招解决游戏卡顿的小技巧分享给大家。
网络卡顿不稳定,简单提速,So Easy!!
现在市场上很多游戏都是需要联网的,小伙伴在玩网游的情况下肯定有过网络不稳定的情况,特别是玩网络对战类的游戏,卡ping延迟什么的好烦人。
下面的方法大家可以试试,效果还不错哦~
33.jpg (37.69 KB, 下载次数: 7)
17:43 上传
▲ 进入设置 - WLAN - WLAN+ - 开启
&&前方高能,各位小伙伴做好准备&&
解决游戏硬件卡顿,提速快到不敢相信。 So Fast!!
和网络情况一样,我们玩游戏还吃手机硬件,硬件跟不上的话,手机玩游戏会出现很明显的卡顿,掉帧,这时候小伙伴第一思考的解决方法肯定是换手机吧,其实不用换手机下面2个方法应该都可以帮到你。
▲ 1:按“口”功能键把手机的后台全部清空后再测试游戏;
22.jpg (74.29 KB, 下载次数: 8)
17:43 上传
▲ 2:进入手机设置 - 开发者选项 - 开启强制GPU渲染即可。这样保证你应用或者游戏的流畅度的同时会增加手机耗电哦~
11.jpg (58.59 KB, 下载次数: 6)
17:43 上传
小结:“麻麻再也不担心我玩游戏卡顿了”,通过上面的学习小伙伴是不是都学会了把手机游戏变流畅的技巧呢,保证手机游戏流畅度就这么简单,是不是觉得很有用呢,不会的小伙伴一定要记得看下哦~
好赞~鼓掌~
width:100%">
&新学乍练&
来自:浏览器
width:100%">
&神功盖世&
来自:浏览器
感谢楼主分享的实用经验,这样玩游戏的时候才不会坑了
width:100%">
&独步江湖&
来自:m2 note
width:100%">
&登堂入室&
来自:华为Mate S CRR-UL00
看看。。。。
width:100%">
&登堂入室&
来自:华为Mate S CRR-UL00
width:100%">
&略有小成&
来自:浏览器
支持华为&&支持国产
width:100%">
&炉火纯青&
来自:华为Mate S CRR-UL00
看看,学习学习
width:100%">
&登堂入室&
来自:华为Mate S CRR-UL00
看看………
width:100%">
&略有小成&
来自:华为Mate S CRR-UL00
哈哈哈哈哈哈哈哈
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
评测骑士团
荣耀评测骑士团
大富翁勋章
达到1万花瓣后可申请获得大富翁勋章
主题分享新星
主题资源合集不得少于1个(合集内资源量不得少于10个);主题资源帖不得少于15个;每个主帖不少于30张壁纸
主题分享达人
主题资源合集不得少于3个(合集内资源量不得少于10个);主题资源帖不得少于30个;每个主帖不少于30张壁纸
主题分享狂人
主题资源合集不得少于8个(合集内资源量不得少于10个);主题资源帖不得少于80个;每个主帖不少于30张壁纸
好基友勋章
花粉好机友,注册时间大于99天
关注华为花粉俱乐部微信公众平台——“华为花粉俱乐部”
在职斑竹的身份勋章,感谢斑竹的辛勤劳动
老茶馆众生随拍:黑煤球的业余生活红枫《川西高原》潜伏墨荷墨荷
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
举报邮箱:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案
先讲一下离屏渲染的一个概念吧:
中国有一篇文章专门提到了离屏渲染的问题,文章中提到⎡直接将图层合成到当前显示屏幕的帧缓冲区中,比先在屏幕外面创建新的缓冲区,然后渲染到纹理中,最后将结果渲染到当前显示屏幕的帧缓冲区中,性能要好的多⎦
主要原因是环境切换 * 转换环境到屏幕外缓冲区*
转换屏幕到帧缓冲区*
触发屏幕渲染后 这种情况发生在 每一帧
,界面如果在滚动过程中 有大量的离屏渲染发生会严重影响帧率
影响离屏渲染的原因
GPU版本的离屏渲染 -& 更改
mask,shadow,Group opacity,edge antialiasing
CPU 版本的离屏渲染 -&&
使用 Core Graphic 里面的绘制 API 也会触发离屏渲染 ,比如 drawRect:
系统圆角的离屏渲染
view.layer.cornerRadius = aR
view.layer.maskToBounds = true
接《iOS的像素绘制》,上篇主要指摘录了原文章中自己觉得重要的部分。接下来,我们来真正从性能方面看看离屏渲染对性能的影响(hiahia)。
先建一个空的项目,Single View
Application就好。注意在开始进行应用程序性能分析的时候,一定要使用真机,模拟器运行在mac上,mac上的CPU运行性能远高于iOS设备。硬件上mac的GPU也和iOS的完全不一样。
另外在性能分析的时候,最好是release模式,而不是debug模式。发release模式打包模式下,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码,另外iOS也引入了Watch
Dog机制,它会检测应用的性能,如果场景出现异常,“看门狗”会强制终止这个应用的进程。开发者可以通过crashlog看到设备上对应的日志。但是Xocde在调试配置下会禁用“Watch
Dog”(以前不知道,有时候测试机直接run后怎么都拿不到crashlog,是因为run默认是debug模式,禁用了Watch
我们想用Time
Profile测试下启动时间。Time
profile时间分析工具用来检测APP的CPU使用情况。可以看到APP各个方法消耗的CPU时间,使用大量的CPU不一定是个问题,但是CPU某个时刻超负荷后,APP会发出内存警告,有可能终止APP运行,在页面交互上也影响用户体验。新建项目以release模式run在真机上(iphone6
plus),发现纯净的项目启动时间是10ms。
这里简单介绍下Time profile
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/a4aa549bcf335ec.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
Time profile的Recording Setting
Interval :样本周期,设置堆栈跟踪的频率。系统默认10ms
Profiling:控制哪些线程进行采样,默认为正在运行的线程。打对勾后对所有的线程采样
Callstacks:控制被采样的堆栈跟踪的类型。选择用户,内核或用户的核心单选按钮
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/d3.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
time profile的display Setting
Separate By
Thread:线程分离,只有这样才能在调用路径中能够清晰看到占用CPU最大的线程.
Invert Call
Tree:从上到下跟踪堆栈信息.这个选项可以快捷的看到方法调用路径最深方法占用CPU耗时,比如FuncA{FunB{FunC}},勾选后堆栈以C-&B-&A把调用层级最深的C显示最外面.
Hide Missing
Symbols:如果dSYM无法找到你的APP或者调用系统框架的话,那么表中将看到调用方法名只能看到16进制的数值,勾选这个选项则可以隐藏这些符号,便于简化分析数据.
Hide System
Libraries:这个就更有用了,勾选后耗时调用路径只会显示app耗时的代码,性能分析普遍我们都比较关系自己代码的耗时而不是系统的.基本是必选项.注意有些代码耗时也会纳入系统层级,可以进行勾选前后前后对执行路径进行比对会非常有用.
圆角的秘密
接下来,我们有两组demo
第一组,添加三个圆角,一个UILabel
,一个UIButton,一个UIimage,一个UIView在打开Time
profile发现时间有增加但是影响不大,平均在15ms。给每一个控件的仅仅设置layer.cornerRadius=10,发现只有Button有了圆角(思考为什么)。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/fecaf3b4eaa0fb.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
UIView,UIButton,UIimageView,UIlabel
这里发现UIButton有点例外,所以有了我们的第二组:分别是无标题无图片的Button、仅有标题的Button,仅有backgroundImage的Button、仅有前景图image的Button。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/113501ceab5e6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
UIButton的四种情况
上面两组Demo对比我们发现在不设置ClipToBounds/maskToBounds,仅仅对控件的layer设置圆角cornerRadius的话只有UIButton在没有设置图片的时候(前景图/后景图)设置圆角才会有效,仔细看Apple对cornerRadius的描述:
the radius to a value greater than0.0causes the layer to begin
drawing rounded corners on its background. By default, the corner
radius does not apply to the image in the layer’s contents
it applies only to the background color and border of the
layer. However, setting the masksToBounds property to YES causes
the content to be clipped to the rounded corners.
也就是说默认情况下cornerRadius仅仅适用于背景色和边框,如果控件内部有内容(貌似不包括Button的Title)的话就要设置masksToBounds为YES才可以(其实也可以配合ClipToBounds)。
所以重要的要说三遍、说三遍、说三遍:UIView、UILable、有图片的UIButton设置cornerRadius是没有用的,必须配合ClipToBounds/maskToBounds一起使用才生效。
ClipToBounds & &VS
maskToBounds
咦,这两个属性配合cornerRadius都可以达到裁剪的的作用?那他们之间有什么区别么?
文档是这么解释的
masksToBounds
indicating whether sublayers are clipped to the layer’s bounds.
Animatable.
Discussion
value of this property isYES, Core Animation creates an implicit
clipping mask that matches the bounds of the layer and includes any
corner radius effects. If a value for the mask property is also
specified, the two masks are multiplied to get the final mask
default value of this property is NO.
clipsToBounds
value that determines whether subviews are confined to the bounds
of the view.
Discussion
property is inherited from the UIView parent class. This class
changes the default value of this property toYES.
大意是masksToBounds是作用在layer上,clipsToBounds是作用在UIView上,masksToBounds/clipsToBounds要求子layer/view不可以超过父layer/view的边界。这个裁剪动作是是可以做动画的。所以这两个本质上是一样的效果,但是masksToBounds作用在layer上可以对于动画可以有更多的选择。
但是遗憾的是,如果设置了masksToBounds=YES之后确实可以显示图片圆角效果,但却无法设置阴影效果。因为masksToBounds=YES就意味着外边框不能显示,而阴影恰恰作为外边框绘制的,这样两个设置就产生了矛盾。要解决这个问题不妨换个思路:使用两个大小一样的图层,下面的图层负责绘制阴影,上面的图层用来显示图片。这个问题我们放在下一节讲。
profile 和 CoreAnimation
看添加一个两个对性能的损耗还是比较小,掉帧也不明显。现在我们以Tableview为例子。设置大量圆角会是什么效果(tableView100行)。
view.clipsToBounds = YES;
view.layer.cornerRadius = 10;
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/262558-bed517b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
prifile 检测到的启动时间如下图,启动时间竟然到了惊人的1492ms。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/b984f8ae6cd9def.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
检测滑动table的时候除了UIView(惊掉了下巴,UIView即使设置了clipsToBounds,竟然不发生离屏渲染,可惜我身边没有iOS9以下的设备无法验证9一下的状态,可能Apple做了优化),其他的包括UIBUtton,UIlabel都掉帧极其严重,平均都不到30帧,基本是卡出翔的感觉。另外我勾选了Color
Offscreen -Rendered
Yellow复选框,可以清楚的看见最左侧的UIView以外,其余的圆角无一例外,都发生了离屏渲染。造成了性能的下降。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/5db1fd19c4b79.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
怎样高效的设置圆角
第一种重写drawRect方法,事实上这是一种错的离谱的方法。大量的绘制在drawRect里实现的时候,导致内存的暴增。drawRect会开辟一个后备存储空间。这个空间是有限制的,苹果暗示大概有屏幕大小两倍的空间来存储
rasterized layer。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/c067c9b30c60c5.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
滑动tableView后,掉帧降到了10帧,已经逆天了!!!忘掉这种写法吧,下面介绍正确的高效设置圆角的姿势。
为 UIView 添加圆角
这里为了避免离屏渲染(iOS9下UIView设置圆角并不发生离屏渲染,我们还是介绍一种通用的方式化圆角,兼容低版本),我们不用masksToBounds,我们可以通过Core
Graphics/贝塞尔曲线来画一个UIView。核心代码如下:
(UIImage*)lc_drawRectWithRoundedCorner:(CGFloat)radius
borderWidth:(CGFloat)borderWidth
backgroundColor:(UIColor*)backgroundColor
borderColor:(UIColor*)borderColor{
CGSizesizeToFit
=CGSizeMake(self.bounds.size.width,self.bounds.size.height);
CGFloathalfBorderWidth = borderWidth
UIGraphicsBeginImageContextWithOptions(sizeToFit,false,
[UIScreenmainScreen].scale);
CGContextRefcontext
=UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context,
borderWidth);
CGContextSetStrokeColorWithColor(context,
borderColor.CGColor);
CGContextSetFillColorWithColor(context,
backgroundColor.CGColor);
CGFloatwidth = sizeToFit.
CGFloatheight = sizeToFit.
CGContextMoveToPoint(context, width -
halfBorderWidth, radius + halfBorderWidth);//开始坐标右边开始
CGContextAddArcToPoint(context, width -
halfBorderWidth, height - halfBorderWidth, width - radius -
halfBorderWidth, height - halfBorderWidth,
radius);//右下角角度
CGContextAddArcToPoint(context, halfBorderWidth,
height - halfBorderWidth, halfBorderWidth, height - radius -
halfBorderWidth, radius);//左下角角度
CGContextAddArcToPoint(context, halfBorderWidth,
halfBorderWidth, width - halfBorderWidth, halfBorderWidth,
radius);//左上角
CGContextAddArcToPoint(context, width -
halfBorderWidth, halfBorderWidth, width - halfBorderWidth, radius +
halfBorderWidth, radius);//右上角
CGContextDrawPath(UIGraphicsGetCurrentContext(),kCGPathFillStroke);
UIImage*output
=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
得到画出的UIImage后,我们创建一个UIimageView插入到视图的最上层:
(void)lc_addCorner:(CGFloat)radius borderWidth:(CGFloat)borderWidth
backgroundColor:(UIColor*)backgroundColor
borderColor:(UIColor*)borderColor{
UIImageView*imageView= [[UIImageView
alloc]initWithImage:[self lc_drawRectWithRoundedCorner:radius
borderWidth:borderWidth backgroundColor:backgroundColor
borderColor:borderColor]];
insertSubview:imageView atIndex:0];
就可以得到圆角view
UIImageView 添加圆角
与UIView不同的是这里需要对image进行截图,而且由于绘制先后问题,这句话在layoutSubviews/updateConstraints里绘制才会生效(暂时还不知道为什么,谁知道告诉我一下啦)
[imageView
&lc_cornerRadiusWithImage:[UIImage
imageNamed:@"test"]cornerRadius:10rectCornerType:UIRectCornerAllCorners];并不会生效
而UIView并不会这样,直接调用和写在layoutSubviews/updateConstraints都会生效
lc_cornerRadiusWithCornerRadius:100]可以画出圆角,在layoutSubviews/updateConstraints也可以画出圆角。
(void)lc_cornerRadiusWithImage:(UIImage*)image
cornerRadius:(CGFloat)cornerRadius
rectCornerType:(UIRectCorner)rectCornerType {
CGSizesize
=self.bounds.
scale = [UIScreen mainScreen].
CGSizecornerRadii =CGSizeMake(cornerRadius,
cornerRadius);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),
UIGraphicsBeginImageContextWithOptions(size,NO,
if(nil==UIGraphicsGetCurrentContext())
UIBezierPath*cornerPath = [UIBezierPath
bezierPathWithRoundedRect:self.bounds
byRoundingCorners:rectCornerType
cornerRadii:cornerRadii];
[cornerPath addClip];
drawInRect:self.bounds];
UIImage*processedImage
=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(),
objc_setAssociatedObject(processedImage,
&kZYProcessedImage,@(1),OBJC_ASSOCIATION_RETAIN_NONATOMIC);
self.image= processedI
最后,我们用新的方式绘制圆角,看看最终的效果,这里我们添加了圆角,对性能几乎没造成什么影响,掉帧几乎可以忽略。顺带我看了Time
profile在整个启动时间的消耗,对CPU几乎没什么影响。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/1e5da7d905c55.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
Animation 勾选上Color Offscreen-Rendered Yellow的选项和Color
Hits Green and Misses
Red选项。黄色表示已经被渲染到屏幕外缓冲区的区域标注为,绿色代表无论何时一个屏幕外缓冲区被复用,而红色代表当缓冲区被重新创建。可以看到现在的圆角周围已经没有黄色区域了。
如果我们迫不得已用了离屏渲染的话,如果图层没发生变化,设置shouldRasterize为YES,可以将屏幕外缓冲区缓存起来,避免重复渲染造成GPU性能的浪费。
<img src="/blog7style/images/common/sg_trans.gif" real_src ="http://upload-images.jianshu.io/upload_images/ab5bdf45cbf26c9.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240" ALT="" STYLE="border-width: border-style: max-width: 100%;"
TITLE="【iOS&Learning】GPU离屏渲染的原因和性能损耗避免方案" />
参考文献:http://zyden.vicp.cc/zycornerradius/
Demo地址:/Monkshae/LCPixelDemo
欢迎您提出宝贵的意见。
著作权归作者所有
文/轰炸机上调鸡尾酒(简书作者)
原文链接:/p/27f2552fdb6b
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 仁王最低画质掉帧 的文章

 

随机推荐