博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS构建流畅的交互界面--卡顿产生的原因
阅读量:5967 次
发布时间:2019-06-19

本文共 1152 字,大约阅读时间需要 3 分钟。

[iOS 保持界面流畅的技巧 | Garan no dou](http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/)

确定好Vsync信号产生的时间点,由硬件或软件(某个线程)确定好时间点,然后通知各个模块,每个模块都以系统时间为基点。

 iOS设备双缓冲机制:

显示系统通常会引入两个帧缓冲区,双缓冲机制。

android设备的垂直同步机制:
[Vsync垂直同步信号分发和SurfaceFlinger响应执行渲染流程分析(一) - 红旺永福
- 博客频道 - CSDN.NET](http://blog.csdn.net/sinat_22657459/article/details/52733375)
先判断是否有硬件模块支持,没有硬件模块支持,就启动一个VSyncThread来执行产生垂直同步信号。

  •  由硬件产生:执行初始化时注册硬件回调
  • 由软件产生:
    获取当前时间点和产生信号的时间,计算中间要休眠的时间。
    休眠的时间小于0,说明上一个Vsync信号已经被错过,需要重新计算下一次的Vsync的产生时间:1. 采用定时回调 2. 采用休眠的形式主动等待

画面撕裂现象:

当视频控制器还未读取完成时,即屏幕内容刚显示一半时,GPU 将新的一帧内容提交到帧缓冲区并把两个缓冲区进行交换后,视频控制器就会把新的一帧数据的下半段显示到屏幕上,造成画面撕裂现象。
GPU 垂直同步机制 V-Sync:解决画面撕裂现象:
当开启垂直同步后,GPU 会等待显示器的 VSync 信号发出后,才进行新的一帧渲染和缓冲区更新。这样能解决画面撕裂现象,也增加了画面流畅度,但需要消费更多的计算资源,也会带来部分延迟。

 

界面卡顿的原因:

在Sync信号到来后,系统图形服务会通过CADisplayLink等机制通知App,App主线程开始在CPU中计算显示内容,比如视图的创建,布局计算,图片解码,文本绘制等。随后CPU会将计算好的内容提交到GPU去,由GPU进行交换,合成,渲染。随后GPU会把渲染结果提交到帧缓冲区,等待下一次VSync信号(垂直同步信号)到来时显示到屏幕上。由于垂直同步机制,如果在一个VSync时间内,CPU或者GPU没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏因为没有新的刷新,会保留之前的内容不变。这就造成了卡顿。
总结:掉帧导致了卡顿,而CPU和GPU只要有一个计算速度慢都会导致掉帧(没有在相邻的两个垂直同步信号之间完成计算)。
解决:分别对CPU和GPU压力进行评估和优化。

转载于:https://www.cnblogs.com/HackHer/p/6341675.html

你可能感兴趣的文章
IDE---Python IDE之Eric5在window下的安装
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>
telnet :No route to host
查看>>
基本安装lnmp环境
查看>>
yum源资料汇总
查看>>
7、MTC与MTV,http请求介绍
查看>>
logstash消费阿里云kafka消息
查看>>
第四节课作业
查看>>
EasyUI Calendar 日历
查看>>
unix 环境高级编程
查看>>
为数据库建立索引
查看>>
第二周作业-软件工作量的估计
查看>>
MAXIMO 快速查找实现
查看>>
Oracle——条件控制语句
查看>>
[Linux][Redis][05]Benchmark
查看>>
第一次作业-准备篇
查看>>
HDU1848 Fibonacci again and again
查看>>
HTML思维导图
查看>>
git改密码出现授权问题
查看>>
Hadoop IO 特性详解(2)
查看>>