屏幕刷新机制(一):机制

屏幕刷新机制(一):机制

屏幕刷新机制(二):Choreographer、SurfaceFlinger


综述

  • 屏幕整体刷新机制:就是通过Choreographer、SurfaceFlinger,以垂直同步技术(VSYNC)加三重缓冲技术(Triple Buffer)的方案,保证CPU计算/GPU渲染(MainThread RenderThread)与屏幕刷新率(HWComposer)的平衡与稳定。通过软件技术连通计算硬件与显示硬件,维持稳定的固定频率刷新。
  • 每一帧处理的流程:接收到 Vsync 信号回调-> UI Thread –> RenderThread –> Choreographer –> SurfaceFlinger –> HardwareComposer
  • UI Thread 和 RenderThread 完成 App 一帧的渲染Buffer,SurfaceFlinger负责合成,HardwareComposer负责合成与显示。Choreographer 负责调度。
  • MainThread:我们的各种操作,包括每一帧的渲染操作 ,都是通过 Message 的形式发给主线程的 MessageQueue ,MessageQueue 处理完消息继续等下一个消息。主要负责生产 SurfaceFlinger 合成所需要的 Surface
  • Choreographer 是线程单例的,而且必须要和一个 Looper 绑定,因为其内部有一个 Handler 需要和 Looper 绑定,一般是 App 主线程的 Looper 绑定
  • 渲染层(App)与 Vsync 打交道的是 Choreographer,而合成层与 Vsync 打交道的,则是 SurfaceFlinger。

概念

  • 硬件
    • CPU:三大绘制流程中Surface的计算。
    • GPU:以SurfaceFlinger服务的形式工作,将CPU计算好的Surface数据合成后放到buffer中,让显示器进行读取
    • 屏幕刷新率:屏幕在1s内去buffer中取数据的次数,单位为HZ。主流屏幕刷新频率是每秒60次,高的有90,120等。
  • 软件
    • 60 fps 的意思是说,画面每秒更新 60 次,也就是 16.67 ms 刷新一次
    • 协调计算硬件计算频率,与屏幕能做到的刷新率一致

用户感知

  • 卡顿:如果主线程 + 渲染线程每一帧的执行都超过 16.6ms(60fps 的情况下),那么就可能会出现掉帧、丢帧。如果是APP端没有及时渲染,而BufferQueue中还有未消费的缓冲,可能就不会有掉帧现象。
  • 画面撕裂:帧率和屏幕刷新率的不一致导致的,不会丢失。
  • ANR:如果界面线程被阻塞超过几秒钟时间(根据组件不同 , 这里的阈值也不同),用户会看到 “应用无响应” (ANR) 对话框(部分厂商屏蔽了这个弹框,会直接 Crash 到桌面)

系统刷新机制

  • Android 4.1加入垂直同步技术(VSYNC),以及三重缓冲技术(Triple Buffer)
  • VSync(垂直同步信号)(Vsync-App Vsync-SF lockAsync)
    • 硬件屏幕保持固定频率会发出的一个脉冲信号
    • 提醒CPU立即进入屏幕绘制过程;提醒GPU进行buffer的交换
    • Vsync-SF:将所有准备好的 Buffer 取出进行合成
  • Triple Buffer
    • 一个用于GPU的合成,一个用于屏幕的刷新,一个在Jank时最大限度避免CPU空闲
    • 会有前后交换buffer,没有准备好的情况Jank。此时,需要第三个buffer最大限度避免CPU空闲的情况。

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

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

相关文章

VSCODE上ckg_server_linux进程占用CPU过多

现象描述 每次一打开VSCODE,ckg_server_linux进程就启动了,并且一直运行,且占用CPU过高; 推测应该是某个插件的问题导致的; 问题处理 本地搜索了一下,发现是 marscode插件影响的; 禁用marsc…

【大模型理论篇】CogVLM:多模态预训练语言模型

1. 模型背景 前两天我们在《Skywork R1V: Pioneering Multimodal Reasoning with Chain-of-Thought》中介绍了将ViT与推理模型结合构造多模态推理模型的案例,其中提到了VLM的应用。追溯起来就是两篇前期工作:Vision LLM以及CogVLM。 今天准备回顾一下Cog…

Vue 项目编译错误:These dependencies were not found,To install them, you can run...

问题与处理策略 问题描述 运行一个 Vue 项目时,报如下错误 ERROR Failed to compile with 47 errors …

python 模拟登录

在Python中模拟登录通常涉及到发送HTTP请求到服务器,并处理响应。这可以通过多种方式实现,最常见的方法之一是使用requests库。下面是一个简单的示例,展示了如何使用requests库来模拟登录一个网站(以一个假想的登录表单为例&#…

优化 Docker 镜像 技巧

优化 Docker 镜像可以提高构建速度、减少镜像大小、提高安全性和效率。以下是一些优化 Docker 镜像的方法: 使用适当的基础镜像 选择合适的基础镜像可以减小镜像大小,并确保基础镜像的安全性和更新性。Alpine、Ubuntu Minimal 等轻量级基础镜像是常用选…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A:空间(填空5分_单位转换) 2B:卡片(填空5分_模拟) 3C:直线(填空10分_数学排序) 4D:货物摆放(填空10分_质因数) 5E&#xf…

Python入门基础

python基础类型转换 str()与int()类型转换 name 张三 age 20 print(type(name),type(age))print(我叫name 今年, str(age)岁 )a10 b198.8 cFalse print(type(a),type(b),type(c)) print(str(a),str(b),str(c))s1 128 f198.7 s276.77 ffTrue s3hello print(type(s…

HTTP/HTTPS 中 GET 请求和 POST 请求的区别与联系

一、基础概念 HTTP (HyperText Transfer Protocol, 超文本传输协议) 是一种用于浏览器与服务器之间进行数据交互的协议。HTTPS (加密的 HTTP) 则通过 SSL/TLS 协议实现通信加密与数据安全性。 二、GET 和 POST 概述 GET 请求: 用于从服务器获取资源。 POST 请求: 用于将数据…

OPENCV数字识别(非手写数字/采用模板匹配)

这篇文章的重点在于 模板匹配 的使用。模板匹配是计算机视觉中的一项基本技术,它通过比对输入图像与模板图像的相似度,来进行目标识别。对于数字识别,特别是标准数字的识别,模板匹配非常有效。 请看效果: 文章结构 …

在 Kubernetes 中部署 Trivy 漏洞扫描服务

创建专用 Namespace # trivy-ns.yaml apiVersion: v1 kind: Namespace metadata: name: trivy-system配置持久化存储(缓存数据库) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: trivy-db-cache namespace: trivy-system spec: acc…

Cursor安装注册+基础配置+入门实操

一、安装注册 官网地址:https://www.cursor.com/ 下载按钮会根据电脑系统来匹配,点击对应「Download」按钮进行下载。完成后,按步骤安装即可。 安装完成后,即可点击图标打开软件。 基础设置完成后,就需要选择注册账号…

秒杀业务优化之从分布式锁到基于消息队列的异步秒杀

一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中,这样的业务一般为了引流宣传而降低利润,所以一旦出现问题将造成较大损失,那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单&#xff0c…

MiniMax GenAI 可观测性分析:基于阿里云 SelectDB 构建 PB 级别日志系统

“阿里云SelectDB作为MiniMax日志存储服务的核心支撑,为在线和离线业务提供了高效、稳定的查询与聚合分析能力。其支持实时物化视图、租户资源隔离、冷热分离等企业级特性,不仅有效解决了日志场景下PB级别数据查询的性能瓶颈,还通过智能化的资…

【YOLO V3】目标检测 Darknet 训练自定义模型

【YOLO V3】目标检测 Darknet 训练自定义模型 前言整体思路环境检查与依赖配置克隆 YOLOv3 Darknet 并编译Clone Darknet 项目文件修改 Makefile 文件修改模型保存频率项目编译 准备数据集配置训练文件数据集:datasets (自制)权重文件 yolov3…

Kafka分区分配策略详解

Kafka分区分配策略详解 Kafka作为当前最流行的分布式消息队列系统,其分区分配策略直接影响着系统的性能、可靠性和可扩展性。合理的分区分配不仅能够提高数据处理的效率,还能确保系统负载的均衡。 Kafka提供了多种内置的分区分配策略,包括R…

C#中 String类API(函数)

字符串属性 string str "打工人";Console.WriteLine(str);char s str[0];Console.WriteLine(s); 字符串内置API(函数) 1. Concat 拼接字符串 string s1 "打";string s2 "工";string s3 "人";string sthstring.Concat(s1, s2, s…

JavaScript性能优化实战手册:从V8引擎到React的毫秒级性能革命

目录 一、性能优化的本质挑战1.1 浏览器渲染管线的性能瓶颈2.1 内存管理优化2.2 执行效率优化2.3 网络传输优化 三、React框架深度调优3.1 渲染性能优化3.2 性能监控体系 四、企业级优化案例4.1 电商平台首页优化4.2 数据可视化大屏优化 五、新一代性能优化技术5.1 WASM性能突破…

【PostgreSQL】pg各版本选用取舍逻辑与docker安装postgres:15

企业常用 PostgreSQL 版本推荐 1. PostgreSQL 14(最常见,稳定) 目前许多企业仍在使用 PostgreSQL 14,因为它在性能、并发处理、JSON 支持等方面做了较多优化,同时又非常稳定。官方支持时间:2026 年 11 月…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加导出数据功能📚页面效果📚指令输入�…

《Python实战进阶》第31集:特征工程:特征选择与降维技术

第31集:特征工程:特征选择与降维技术 摘要 特征工程是机器学习和数据科学中不可或缺的一环,其核心目标是通过选择重要特征和降低维度来提升模型性能并减少计算复杂度。本集聚焦于特征选择与降维技术,涵盖过滤法、包裹法、嵌入法等…