当前位置: 首页 > news >正文

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

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

屏幕刷新机制(二):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空闲的情况。

相关文章:

  • 用tensorboard支持pytorch训练可视化
  • JAVA学习*Object类
  • gbase8s cdc协议解析
  • 多源最短路径算法(竞赛)
  • 第45章:配置更新与应用热重载策略
  • VMware上对CentOS7虚拟机进行磁盘扩容、缩容
  • Uthana,AI 3D角色动画生成平台
  • Python第六章08:元组操作练习题
  • C++ 学习笔记(四)—— 类和对象
  • 【计算机操作系统】深入剖析操作系统中的存储器管理:从基础到高级
  • 如何高效参与 GitHub 知名项目开发并成为核心贡献者
  • Ubuntu Debian 系统下挂载 Samba 共享目录的完整指南
  • 用java写一个简易的本地聊天室
  • 使用vscode搭建pywebview集成vue项目示例
  • bonding技术
  • span与span之间的空白如何解决?
  • Shopify Checkout UI Extensions
  • 电阻的阻值识别
  • 数据结构5(初):排序
  • 【跟着灵神刷力扣】定长滑动窗口
  • 长期吃太饱,身体会发生什么变化?
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • 外企聊营商|武田制药:知识产权保护助创新药研发
  • 多地举办演唱会等吸引游客刺激消费,经济日报:引导粉丝经济理性健康发展
  • 不是10点!乌克兰官员称尚未就俄乌谈判开始时间达成一致
  • 向猫学习禅修之后,你会发现将生活降格为劳作是多么愚蠢