Android 屏幕刷新机制 VSync+Choreographer

news2024/12/23 11:07:32

1.显示系统基础知识

一个典型的显示系统一般包括CPU、GPU、Display三部分,其中CPU负责计算帧数据,并把计算好的数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到图像缓冲区buffet里存起来,然后Display(屏幕或显示器)负责把buffer里的数据呈现到屏幕上。如下图:

09178793e4e04578be24ef7d36ce2811.webp

这里涉及几个基础概念:

①屏幕刷新频率

指一秒内屏幕刷新的次数,即一秒内显示了多少帧图像,单位是赫兹Hz。常见的屏幕刷新频率是60Hz。

注:刷新频率取决于硬件的固定参数,不会变的。

②逐行扫描

显示器并不是一次性将画面显示到屏幕上,而是从左到右边,从上到下逐行扫描,顺序显示整屏的一个个像素点,这一过程快到人眼无法察觉到变化。

比如常见的刷新率为60 Hz的屏幕,这一过程只需要1000 / 60 ≈ 16ms。

③帧率Frame Rate

指GPU在一秒内绘制操作的帧数,单位fps。例如在电影界采用24帧的速度足够使画面运行的非常流畅。而Android系统则采用更加流程的60fps,即每秒钟GPU最多绘制60帧画面。

帧率是动态变化的,例如当画面静止时,GPU是没有绘制操作的,屏幕刷新的还是buffer中的数据,即GPU最后操作的帧数据。

④画面撕裂tearing

指一个屏幕内的数据来自2个不同的帧,导致画面会

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm发布封装的公共组件

一.新建vue项目项目目录结构如下:二.修改项目文件夹1.创建一个packages文件夹(用于存放编写的组件)2.把src修改为examples3.新建一个vue.config.js文件,并修改由于修改了src文件夹,启动vue项目后,找不到入口(main.js)会报错,所以需要重新指定启动入口module.exports {// 将 ex…

大数据实时多维OLAP分析数据库Apache Druid入门分享-下

文章目录架构核心架构外部依赖核心内容roll-up预聚合列式存储Datasource和Segments位图索引数据摄取查询集群部署部署规划前置条件MySQL配置HDFS配置Zookeeper配置启动集群导入HDFS示例架构 核心架构 Druid servers建议将它们组织为三种服务器类型:Master主服务器、Query查询服…

word高效技巧:这几个表格操作让工作更快速

说到表格,都说Excel制表功能更强大。但是,表格在Word排版中的应用同样非常广泛。比如,在制作简历表、求职表和登记表等一些不规则且不需要做复杂统计分析、有大量文字的表格,我们都会用Word文档来制作。因此,熟练掌握W…

ERR_CONNECTION_REFUSED 解决方法

解决对部分网站请求ERR_CONNECTION_REFUSED问题问题描述可能一:在项目中设置了接口的代理可能二:接口a所在的服务器确实是拒绝了我的ip请求可能三:电脑设置了对其的代理为127.0.0.1由此,接口不再行不通了,问题得到进一…

VisualStudio—Remote Debug

主要用来解决本地调试没问题发布到远端后却报错的项目。一、Windows Debug Windows本文叙述采用的VS2022。①远端(windows服务器)安装远程调试器远端(windows服务器)安装过程省略,详见官方参考链接中设置远程调试器。②…

LightningChart .NET 10.3.2.3 2023-01-20 Crack

GPU 加速图表控件 LightningChart .NET 和 JavaScript 解决方案旨在通过彻底的图表优化、最小的延迟和流畅的呈现来满足行业最苛刻的数据可视化要求。 最佳渲染性能 LightningChart for .NET 具有超过 1,000,000,000,000(超过 1 万亿)个数据点的出色渲染…

2023牛客寒假算法基础集训营5(通过A,B,C,D,H,I,K,L) I题有详解

其他题待补中…… 链接:2023牛客寒假算法基础集训营5 简单题 A 小沙の好客(贪心,前缀和,二分) 题意思路 给定nnn个商品的价值,qqq次询问,每次询问k,xk, xk,x即价值不超过xxx的商品最多可以拿…

DolphinScheduler 3.1.0 海豚集群部署配置

文章目录DolphinScheduler 3.1.0 部署过程1. JDK1.8环境准备2. 下载安装包3. 上传安装包并解压4. Dolphinscheduler用户要sudo权限,免密配置创建海豚用户并且给予sudo权限免密配置:服务器各台节点之间要互相免密5. 修改配置文件6. 修改元数据配置文件7. …

设计模式第6式:命令模式

前言 命令模式关注这样一种场景:指令发布者无需关注指令是怎么执行的,只需要指定具体的执行者,具体的指令由执行者来完成。命令模式将指令发布动作和指令执行动作解耦。 我在刚开始学习命令模式的时候,比较困惑它的使用场景。它…

【JavaGuide面试总结】高性能篇

【JavaGuide面试总结】高性能篇1.静态资源是如何被缓存到 CDN 节点中的?2.如何找到最合适的 CDN 节点?3.如何防止资源被盗刷?1.静态资源是如何被缓存到 CDN 节点中的? 你可以通过预热的方式将源站的资源同步到 CDN 的节点中。这样…

docker安装达梦8,并且远程连接数据库

官方技术文档地址:https://eco.dameng.com/document/dm/zh-cn/start/index.html 不能直接拉取达梦数据库的镜像,需要去官方提供的下载地址下载镜像,上传到服务器 下载地址:https://eco.dameng.com/download/ 下载完成之后确认下…

【黑马SpringCloud(3)】Docker镜像容器操作Docker-Compose的使用

Docker初识DockerDocker与虚拟机的区别Docker架构DockerHubDocker镜像操作Docker容器操作数据卷自定义镜像镜像结构Dockerfile构建Java项目基于java:8-alpine镜像,构建java项目集群部署微服务Docker-Compose镜像仓库搭建私有镜像仓库Docker安装:https://…

Windows Server 2008 系统加固(2)

实验简介 实验所属系列: 系统安全 实验对象: 本科/专科信息安全专业 相关课程及专业: 服务器安全 实验时数(学分):2学时 实验类别: 实践实验类预备知识 Windows server 2008 是微软公司的…

4 -【Faster R-CNN】之 RPN Head 代码精读

【Faster R-CNN】之 RPN Head 代码精读1、前言2、RPN Head 网络结构3、代码4、相关问题1、前言 在上一篇文章 【Faster R-CNN】之 backbone 代码精读 中,我们学习了创建 backbone,并将 batch 中的图片通过backbone 获得了 feature maps。 batch 的 feat…

linux的shell命令中grep命令返回值问题

linux的shell命令中grep命令返回值问题如何查看上一个命令退出状态?$?的作用set -e的作用一个代码例子shell脚本中的错误示例如何查看上一个命令退出状态? $?的作用 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一…

【C语言练习】杨氏矩阵、杨辉三角

目录一:杨氏矩阵🐻何为杨氏矩阵?🐻题目描述:🐻思路一:🐻思路二:二:杨辉三角🐻何为杨辉三角?🐻题目描述:&#…

python数据结构(四):dict(字典)

一、定义字典 1、使用花括号,可以直接定义字典 使用一对大括号{},数据是成对存在的,每一行冒号左边的是键(key),右边的是值(value),称作键值对,以逗号分隔开。键是不能重…

Fennec:针对类Unix操作系统的多功能事件应急响应工具箱

关于Fennec Fennec是一个针对类Unix操作系统的多功能事件应急响应工具箱,Fennec基于Rust开发,可以帮助广大研究人员在类Unix操作系统上实现网络安全事件应急响应。除此之外,Fennec还支持广大研究人员自行开发相关的配置文件,并增…

第一章.感知机

第一章.感知机 1.感知机的简介 1).简介 感知机接收多个输入信号,输出一个信号。感知机的信号只有"流/不流"(1/0)两种取值[0:对应不传递信号,1:对应传递信号] 2).感知机图像描述的两种方式 ①.第一种方式: …

css3 transform(变形) 实战示例

1--利用transform实现居中效果 <div class"center">.... </div> .center{text-align: center;background-color: #fff;border-radius: 20px;width: 300px;height: 350px;position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%); } 让…