鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案

往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)

✏️ 鸿蒙(HarmonyOS)北向开发知识点记录~

✏️ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

✏️ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

✏️ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

✏️ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

✏️ 记录一场鸿蒙开发岗位面试经历~

✏️ 持续更新中……


屏幕显示原理:

屏幕显示是通过类似逐行扫描而把图像显示到屏幕上,而其在底层则是通过一个帧缓存区映射到屏幕显示器上的。也就是通过CPU对图像的数据进行处理,交给显示处理器,显示处理器再处理成图像数据存储到帧缓冲区等待视频控制器的信号,将帧缓冲区的内容同步到显示器。

异常场景:

  • 图像撕裂:

假设显示器的刷新率是60Hz,但是显卡每秒能够画120张图片。显卡每一秒往帧缓存器放120张图片,但是显示器每秒只能拿走60张,两者之间又没有沟通,显示器不知道显卡很强,显卡也不知道显示器速度太慢,一直往帧缓存器里写,等它写满了帧缓存器,就用新的图片从头覆盖,于是,显示器还没来得及拿走的图片,就被显卡重新覆盖掉了。结果就是,画面呈现到一半,下面的跟上面的画面完全对不上。

  • 跳帧:

如果显卡速度更快那么下一帧的图像还没来得及显示,下下一帧的数据就覆盖上来了,中间这帧就跳过了。

  • 图像缺失:

如果显卡帧率小于显示器刷新率,那每次在屏幕上看到的可能不是完整的图形,每次看到的图形比上次更完整一些。

  • 掉帧:

当GPU渲染速度小于屏幕刷新速度时,则屏幕将会继续绘制上一帧画面,这样就会导致画面掉帧(也就是卡顿)的现象。

优化方案:

针对图像撕裂,跳帧问题HarmonyOS采用与业界对标的垂直同步信号(Vsync信号)解决,原理是让显卡适应显示器的刷新率,如果显示器刷新来不及,就让显卡等一等。

针对图像缺失,画面闪烁问题,又在Vsync信号的基础上,增加了双缓冲机制。 但是双缓冲机制会导致频繁掉帧,CPU资源浪费等问题。

针对频繁掉帧现象又引进了三缓冲机制,大大降低掉帧概率并提高CPU效率。

  • Vsync 信号:

Vsync 信号一般是由硬件(屏幕)产生的,每个 Vsync 信号之间的时间,就是每一帧生产 / 消费的间隙。

为了把显示器的显示和系统视频控制器同步,显示器会用硬件时钟产生一系列定时信号。当扫描到换行时,显示器会发出一个水平同步信号HSync。当一帧画面绘制完成后,扫描回复到原位,再准备绘制下一帧前,显示器会发出一个垂直同步信号VSync。显示器通常以VSync信号的频率来刷新。此时CPU计算好画面数据并提交到GPU,GPU渲染完成后将渲染结果放入帧缓冲区,随后视频控制器就会按照VSync信号逐行读取帧缓冲区的数据,然后在显示器上显示。

  • 双缓冲机制:

GPU 开辟A、B两个缓冲区,并对缓冲区进行同步加锁处理,执行流程就是当A缓冲区拿到第一帧数据,就给A缓冲区加上一把锁,屏幕控制器从A拿到数据并逐行扫描完成,A帧缓冲区解锁,并把屏幕控制器指向B缓冲区,B缓冲区加锁并逐行扫描显示,在屏幕控制器扫描B缓冲区的时候,A缓冲区拿到GPU传过来的新数据,以此类推。

通过上述图片可以看出,双缓冲区+垂直同步会解决图像显示不全的问题,但是A图像本来应该显示一帧,但是由于GPU与CPU处理速度太慢导致了A的这一帧显示了两次,从而导致B晚一帧显示出来,这就导致了新问题掉帧,掉帧并不是丢失图片,而是屏幕重复渲染了同一帧数据。

另外也可以看出来期间存在CPU资源浪费,双缓冲只会提供两个Buffer,B被GPU处理占用,A正在用显示,那么在第二个16ms里面,CPU就无法获取到Buffer处理UI更新,在Jank的阶段空空等待。而且,一般出现这种场景都是连续的:比如复杂视觉效果,那么GPU可能会一直超负荷,CPU一直跟GPU抢Buffer,这样带来的问题就是滚雪球似的掉帧,一直浪费,完全没有利用CPU与GPU并行处理的效率,成了串行处理。为了解决该问题提出了三缓冲概念。

  • 三缓冲机制:

多增加一个Buffer给CPU用,让它提前忙起来,这样就能做到三方都有Buffer可用,CPU不用跟GPU争一个Buffer,真正实现并行处理。

如上图所示,虽然即使每帧需要的时间都超出了预期,但是由于多加了一个Buffer,实现了CPU跟GPU并行,便可以做到了只在开始掉一帧,后续却不掉帧,双缓冲充分利用16.67ms(一般60hz的刷新率,对应每隔16.667ms就会刷新一次)做到低延时,并保障了其稳定性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说,ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风,我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

用 Biome 替代 ESLint 和 Prettier

简介 ESLint 和 Prettier ESLint:代码质量检查工具,确保代码风格一致与无错误 Prettier:代码格式化工具,自动美化代码布局 所以:ESLint Prettier 能自动美化代码、自动检查代码错误的工具 Biome Biome:…

cluster-smi 命令详解

cluster-smi 是一个用于管理和监控集群中 GPU 的命令行工具,通常用于显示集群中每个节点(如 GPU 服务器)上的 GPU 使用情况。该命令是类似于 nvidia-smi 的工具,但它支持在集群环境中对多个节点进行管理和监控。 使用 cluster-sm…

Cursor使用及搭建网络环境

一、Cursor使用 1、注册、登录、下载 【CursorClaude】 2、登录后 3、破解方式 第一种方式: 14天到期后用其他邮箱重新注册,网易邮箱可以无限注册,把cursor中之前登录的账号退出,再登录新的账号。 第二种方式: 因为…

聚焦地灾防治,助力城市地质安全风险防控

城市是人类社会发展的重要载体,承载着经济繁荣、文化交流和人口聚集等重要功能。然而,由于城市建设过程中地质条件复杂,地质灾害风险隐患存在,城市地质安全等问题日益突出,引起人们的广泛关注。为保障城市发展的安全和…

VsCode美化 Json

1.扩展中输入:pretty json 2. (CtrlA)选择Json文本 示例:{ "name" : "runoob" , "alexa" :10000, "site" : null , "sites" :[ "Google" , "Runoob" , "T…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师,会一点浅薄的前端三大件&#xf…

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层?传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…

Git是什么

简单介绍: Git是一个分布式版本控制系统,用于跟踪文件的更改,特别是在多人协作开发的环境中。 Key: 分布式 版本控制 系统 最常用于软件开发,但也可以用于管理任何类型的文件和文件夹。 Git帮助团队跟踪和管理文件的历史版本&a…

蓝星旋钮烧录底座组装说明

烧录底座pcb为群内清秋设计,感谢大佬开源 效果展示 指示灯明亮 可安装60mm硅胶防滑垫 话不多说,演示组装过程

Comsol 双层带穿孔多孔材料背衬的穿孔板的吸声:亥姆霍兹共振腔的能量耗散

提出了一种新型的低频吸声赫尔姆霍兹共振器,它由两个带孔的刚性面板和一个逐渐带孔的多孔材料背衬组成。通过使用双重孔隙理论将结构划分为多层系统,开发了一个理论模型,该模型通过有限元模拟和实验测量得到验证。研究了所提出的声学超材料的…

前OpenAI CTO Mira Murati创办AI新公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成

文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台(已集成 DeepSeek 大模型)1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…

侯捷 C++ 课程学习笔记:STL 标准库与泛型编程的实战指南

在侯捷老师的 C 系列课程中,《STL 标准库与泛型编程》这门课程让我对 C 的强大工具——标准模板库(STL)有了全新的认识。STL 是现代 C 编程的核心,它提供了丰富的数据结构、算法和迭代器,极大地简化了开发工作。侯捷老…

【数据结构初阶第十二节】设计循环队列

云边有个稻草人-CSDN博客 必须有为成功付出代价的决心,然后想办法付出这个代价。 还有最后一道关于队列的习题,这题有点难,准备好迎接挑战吧! 目录 1.【题目】 2.实现循环队列推荐用数组,Why? 3.Q1:如…

Git使用[同一电脑多个账户ssh-key的管理]

同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用:https://cloud…

Ubuntu:20.04更新cmake到更高版本

从输出信息可以看出,您当前的系统中已经安装了 cmake,但版本是 3.16.3,而您的项目需要 CMake 3.18 或更高版本。默认情况下,Ubuntu 20.04 的官方软件仓库中提供的 CMake 版本较低(如 3.16.3),因…

解锁 AIoT 无限可能,乐鑫邀您共赴 Embedded World 2025

2025 年 3 月 11-13 日,全球规模最大的嵌入式展览会——Embedded World 2025 将在德国纽伦堡盛大开幕。作为物联网和嵌入式技术领域的领先企业,乐鑫信息科技 (688018.SH) 将展示在 AI LLM、HMI、双频 Wi-Fi 6、低功耗 MCU 和 Matter 等领域的最新技术及解…

《[含文档+PPT+源码等]精品基于Python实现的Django中药材在线学习系统的设计与实现

基于Python实现的Django中药材在线学习系统的设计与实现背景,可以从以下几个方面进行阐述: 一、行业背景 随着中医药在全球范围内的不断推广和普及,中药材的知识普及和在线学习需求日益增长。传统的中药材学习方式往往受限于地域、时间和资…

EXCEL解决IF函数“您已为此函数输入太多个参数”的报错

IF函数的基本结构是IF(条件, 值为真时的结果, 值为假时的结果),所以标准的IF函数最多只能有三个参数。当用户输入的参数超过三个时,Excel就会报这个错误。比如多个IF语句叠加,但可能在嵌套的过程中没有正确关闭每个IF函数的括号,导…