java撕裂_屏幕撕裂与卡顿分析
显示器原理
首先我们先要了解一下屏幕的刷新原理,目前显示器大体分为CRT显示器和液晶显示器这两个种类。
屏幕图像的刷新通过扫描帧缓存位图的方式进行刷新,扫描分为随机扫描方式和光栅扫描方式。
1.随机扫描方式(如下图)电子束的移动方式是随机的,按照显示命令用画线的方式绘出图形。
图1
2.光栅扫描方式(如下图)是从上至下逐行扫描整个屏幕的
图2
3.显示器刷新屏幕原理(如下图),以CRT 的电子枪为例子
图3
如图所示,CRT 的电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次扫描。就是这样子不听的扫面,实现屏幕图像的刷新,而这样子的刷新操作就会出现本文说的撕裂现象,请往下了解。
图像显示到屏幕原理
图4
好明显可以知道图像显示是需要CPU与GPU协同合作完成的。那么他们的分工是如何呢?
· CPU:计算视图frame,图片解码,需要绘制纹理图片通过数据总线(bus)交给GPU。
· GPU:纹理混合,顶点变换计算,像素点的填充计算,然后得到的位图渲染到帧缓冲区中。
· 时钟信号:垂直同步信号V-Sync/水平同步信号H-Sync。(结合图3)
HSync:当电子枪换到新的一行,准备进行扫描时,显示器会发出一个水平同步信号,简称 HSync (horizonal synchronization)。
VSync:当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信 号,简称VSync(vertical synchronization)。
屏幕撕裂的现象与原因
图5
为什么出现这种现象呢?
因为扫面显示缓冲区位图的时候,图片发生了切换,导致上半部分是旧的图片下半部分是新的图片。且由于各种原因(耗时,性能,计算复杂度),CPU与GPU的操作本身是好难实现同步的。
图6
那么解决撕裂现象,iOS这边引入了垂直同步-V-Sync + 双缓存-DoubleBuffering。
垂直同步信号其实就是给帧缓存加锁,确保在扫描原始位图时不会切换到新的位图,防止出现撕裂的情况。而双帧缓冲区的出现,就能够保证显示完原始图片时候在切换到新的位图进行显示。如图所示
图7
GPU 会预先渲染好一帧放入一个缓存区内(前帧缓存)。
在显示器发出VSync后,视频控制器的指针会指向前帧缓存区并开始读取,GPU开始渲染下一帧,并将渲染结果放入另一个缓存区(后帧缓存)。
在显示器发出新的VSync后,视频控制器的指针会指向后帧缓存区并开始读取,GPU开始渲染下一帧,并将渲染结果放入前帧缓存区。
双缓存和VSync造成的问题--掉帧(卡顿)
由于每一帧画面都要先经过CPU的计算然后交给GPU进行渲染,得出的位图放进缓冲区供视频控制器读取。由于垂直同步的机制,如果在一个VSync时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,而这时显示屏会保留之前的内容不变,也就造成界面卡顿。如下图所示,A、B代表两个缓存区。
图8
三缓冲区的出现
由于垂直信号+双缓冲区会出现掉帧的问题,所以有些设备就引入了三缓冲区+垂直信号,但iOS设备一直都是双缓存+垂直同步机制。
图9
三缓冲区的原理其实与双缓冲区原理差不多,只是多了一个可用的buffer,目的就是为了减少掉帧的机率,不能完全解决掉帧的问题。
参考
java撕裂_屏幕撕裂与卡顿分析相关推荐
- iOS基础:【屏幕成像与卡顿】屏幕撕裂 Screen Tearing、 掉帧 Jank、三缓冲 Triple Buffering
文章目录 前言 I.屏幕成像与卡顿完整的流程 1.1 扫描的流程 1.2 屏幕撕裂 Screen Tearing 1.2.1 采用[垂直同步 Vsync + 双缓冲机制 Double Bufferin ...
- android 动画卡顿分析工具
android 动画卡顿分析工具 Android应用性能优化之分析工具 上一次记录了解决过度绘制的过程,这一次,想先弄清个概念性的东西,就是如何判断顺不顺畅? 这东西其实最初我自己也觉得有点废话,用起 ...
- Systrace 流畅性实战 2 :案例分析: MIUI 桌面滑动卡顿分析
当我们说 流畅度 的时候,我们说的是什么?不同的人对流畅性(卡顿掉帧)有不同的理解,对卡顿阈值也有不同的感知,所以有必要在开始这个系列文章之前,先把涉及到的内容说清楚,防止出现不同的理解,也方便大家带 ...
- Impala-shell卡顿分析——记一次曲折的Debug经历
Impala-shell卡顿分析--记一次曲折的Debug经历 问题发现 最近准备在Impala中增加对UTF-8的支持,以修正跟Hive.Spark等基于Java的系统在UTF-8字符串上的不兼容表 ...
- 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl
Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...
- Android列表滑动卡顿分析与优化
一 目标 尝试解决首页 HomeFragment 在低端机型上滑动存在卡顿的问题. 二 测试设备 华为荣耀 9i Android 8.0 内存 4G CPU 麒麟659 三 数据采样 刚进应用存在 M ...
- java线程太多卡顿_性能优化之卡顿延迟
和你一起终身学习,这里是程序员 Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.UI 渲染简介 2.识别延迟 3.Visual insp ...
- 我的世界java版特别卡怎么办_我的世界卡顿延迟怎么办
首先要保证你的java版本与你的系统要匹配,然后确认下载的是纯净版本的我的世界,如果mod过多建议重新下载.以上两步确认后在启动器设置里将游戏最大内存减小:默认为1024M,可改为512M.改完之后进 ...
- Android—屏幕适配和卡顿优化
各自的定义: px:pixel,像素,屏幕上实际的像素点单位 dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻 dp: dip,Density-independent pixe ...
最新文章
- 原始样式增加标题_好看又实用! 10个标题字体设计技巧
- python中if语句中可用break_【第四篇】Python的if语句/for..in循环/while循环/break和continue...
- r型聚类典型指标_文献解读 | 缺陷和非缺陷型精神分裂症脑网络功能紊乱的共性和异性...
- VUE自学日志02-应用与组件实例
- [Azure] 使用 Visual Studio 2013 管理中国版 Azure 订阅
- python keystone_keystone命令与client接口学习
- Android修改kernel logo和开机动画(android)
- DZ先生怪谈视图库GA/T1400之人脸对象
- 2021华为软挑赛复盘
- java面试笔试大全
- c语言程序中文复制到word变乱码,怎么复制C程序代码到Word不会有乱码,不会有乱字等情况...
- 有了这个列表,程序员不愁没练手的小项目了
- 怎么样用计算机计算三角函数,怎样在科学计算器上计算三角函数
- 计算机实验原理word,完整word版计算机组成原理实验报告 微控制器
- 调制解调器 已删除 不可使用的设备
- matlab论文致谢,大学毕业论文致谢信3篇
- android 谷歌定位demo,android实现定位与目的地的导航示例代码
- tableau各种精典示例经验总结01
- 58同城和赶集网要合并了!
- 小程序导航栏颜色设置
热门文章
- 计算机小白可以学python吗_非计算机专业小白如何系统学Python语言
- mysql使用中文报错,hibernate mysql 插入中文错误
- java中id name_关于DOM对象中的id与name的区别
- java通道 硬件通道 如何联系_Java NIO5:通道和文件通道
- Halcon数据类型
- C++ static、const和static const类型成员变量声明及其初始化
- python发邮件图片太长显示不出来_Python电子邮件图像太长,无法显示,为什么Python在发送多图表电子邮件时只显示第一个图像?,python,发邮件,图片,不,出来,第一张...
- logrotate 命令切换linux系统日志
- access数据库窗体设计实验报告_access计算机实验报告:窗体
- access抓取数据_十年数据库流行度,哪款是你的最爱