Understanding VSYNC - 1501130353

video_screenshot

视频发布时间

2015年1月6日

视频介绍

Unbeknown to most developers, there’s a simple hardware design that defines everything about how fast your application can draw things to the screen.

视频推介语

暂无,待补充。

译者信息

翻译

润稿

终审

原始链接

中文字幕

翻译流水号

加入字幕组

高洁

高洁、Kesen

——

1501130353

解说词中文版:

想要开发一个高性能的应用程序

首先你得了解它的硬件工作原理

那么 最好的办法就是去使用它

应用程序运行速度的快慢

很容易被人误解为是硬件进程的控制问题

然而这最主要根源都应归于渲染性能

我的名字是Colt McAnlis

如果你想要提高你的应用程序的渲染性能

就必须理解什么是VSYNC

但首先 让我们退一步

在讲解VSYNC之前

我们需要了解两个相关的概念

第一个是刷新率

它代表屏幕在一秒内刷新屏幕的次数

这个值被规定在赫兹里 取决于硬件的固定参数

第二个是帧速率

代表了GPU在一秒内绘制操作的帧数

例如30fps 60fps

在这种情况下 高点总是好的

现在 刷新频率和帧率需要一起合作

才能让你的内容呈现到屏幕上

GPU会获取图形数据进行绘制

然后硬件负责把内容呈现到屏幕上

这将在您应用程序的生命周期中

一遍又一遍的发生

不幸的是 刷新频率和帧率

并不是总能够保持相同的节奏

如果你的帧速率实际上比刷新率快

那么将会出现一些视觉问题

举个栗子 你先拍了一张照片

然后旋转相机大约5度再拍了第二张张照片

现在 将第二张照片剪切一半

并把它粘在第一张的上半部分

两个图片是相似的

但是在沿切缝的地方上半部分

和下半部分有明显的区别

这称为撕裂 是应用程序中

帧率与刷新频率不一致的情况导致

问题是 当你的显卡正在使用

一个内存区域写入帧数据

从顶部开始 新一帧覆盖前一帧

并立刻输出一行内容

现在 当你屏幕刷新时

实际上并不知道缓冲区是什么状态

因此 它从GPU中抓住的帧并不是完全完整的

这也就是说它有一半的前一帧和一半当前帧

这种解决方案被称为双缓冲

这是非常有效的 当GPU将帧写进存储器

被称为后缓冲

而存储器中的次级区域被称为帧缓冲

当写入下一帧时 它会开始填充后缓冲

而帧缓冲保持不变

现在 我们刷新屏幕

它将使用帧缓冲

而不是在绘制操作过程中

这就是VSYNC用武之地

如果屏幕在刷新中 VSYNC 垂直同步

将会在后缓冲到帧缓冲

这里基本上保持同样的复制操作

帧速率比刷新率高是合理的

因为你的GPU刷新会比屏幕读取快

在这种情况下 当屏幕刷新成功

你的GPU将等待垂直同步 直到下一次屏幕刷新

这时 你的帧速率将有效的

达到设备的刷新率上限

但是如果你的屏幕刷新比GPU写录快两倍

会发生什么呢

例如 当GPU以每秒30帧的速度输出

而屏幕实际上以每秒60帧的速度刷新

这意味着 每次刷新都将从相同的帧采样

或者更确切地说

屏幕会在一排显示两次相同的GPU帧

当这种断断续续的情况发生 你就遇到麻烦了

例如 当你的帧速率比刷新率高时

突然骤降

那么用户将会看到一个顺畅的动画卡住了

然后剩余部分又能顺畅播出

这种不流畅的用户观赏体验

这通常被描述为闪屏 跳顿 延迟或者卡屏

相信我 这些你肯定都不想遇到

您的应用程序应避免这些帧速率突降的情况

确保GPU迅速获取数据

并在屏幕再次刷新之前写录内容

这才是你对VSYNC理解开始

当你开发高性能的应用程序时

你需要知道Android设备的底层工作原理

并确保在Android Performance Patterns页面中

查看其它的视频

哦 别忘了加入我们的Google+社区

开启神奇之旅

代码分析 你值得拥有 性能问题 永不能忘

Last updated

Was this helpful?