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

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

屏幕刷新機制(二):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.pswp.cn/diannao/74457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74457.shtml
英文地址,請注明出處:http://en.pswp.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集:特征工程:特征選擇與降維技術 摘要 特征工程是機器學習和數據科學中不可或缺的一環,其核心目標是通過選擇重要特征和降低維度來提升模型性能并減少計算復雜度。本集聚焦于特征選擇與降維技術,涵蓋過濾法、包裹法、嵌入法等…