0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

VSync的虛擬化與同步

麥辣雞腿堡 ? 來源:OPPO內(nèi)核工匠 ? 作者:Phil ? 2023-11-21 16:23 ? 次閱讀

VSync的虛擬化

由上面的介紹可以知道,VSync其實(shí)起源于顯示屏,但是想想如果每個(gè)App和SurfaceFlinger都去從硬件驅(qū)動(dòng)中直接監(jiān)聽VSync,那未免有點(diǎn)太復(fù)雜了,而且耦合性太高,不行。那怎么辦呢?

因此,最好是有一個(gè)模塊去專門跟驅(qū)動(dòng)溝通,再由它將VSync信號(hào)廣播給大家,就像一個(gè)hub一樣。但是VSync頻率這么高,每次從kernel到userspace的消耗也不少,而且VSync是周期性的,很容易猜,所以沒必要一直從kernel監(jiān)聽,但是系統(tǒng)是一直需要VSync來控制繪制合成的,所以有必要搞一個(gè)虛擬的VSync來模擬硬件VSync了。大概架構(gòu)如下圖:

圖片

其中SurfaceFlinger中的DisplayVSync(Android S后改名為VsyncController)就是虛擬的VSync源,其需要兩個(gè)參數(shù)來保證與硬件VSync的同步性,第一是參考點(diǎn),第二就是周期。這些都可以開啟硬件VSync同步解決。

VSync的同步

VSync虛擬化的實(shí)質(zhì)就是在軟件層面模擬硬件VSync,既然是軟件模擬,那么就會(huì)存在誤差,如果誤差比較大,那么就需要開啟硬件VSync同步來進(jìn)行校準(zhǔn)。那么就存在兩個(gè)問題,怎么發(fā)現(xiàn)自己誤差比較大?以及怎么來同步?

首先是如何發(fā)現(xiàn)誤差比較大?答案是通過fence機(jī)制。SurfaceFlinger在每一幀交給HWC的時(shí)候,同時(shí)都會(huì)從HWC那里得到此幀的PresentFence,它是在此幀開始刷新至屏幕的時(shí)候signal的。那驅(qū)動(dòng)什么時(shí)候開始刷新一幀至屏幕呢,答案是屏幕VSync來的時(shí)候。所以這下就能串起來了。根據(jù)PresentFence的signal時(shí)間就可以知道真實(shí)的VSync時(shí)間,那么之后的事情就簡(jiǎn)單了。

在HWComposer::presentAndGetReleaseFences中獲取PresentFence,

圖片

獲取到fence之后就會(huì)對(duì)齊進(jìn)行監(jiān)測(cè)

圖片

一旦不準(zhǔn)就開硬件VSync來進(jìn)行校準(zhǔn),通常情況下接收六次硬件VSync就可以完成校準(zhǔn)動(dòng)作。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3909

    瀏覽量

    126933
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3181

    瀏覽量

    66018
  • 監(jiān)測(cè)
    +關(guān)注

    關(guān)注

    2

    文章

    3469

    瀏覽量

    44363
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是虛擬同步發(fā)電機(jī)?虛擬同步發(fā)電機(jī)有什么作用?

    究竟什么是虛擬同步發(fā)電機(jī)?虛擬同步發(fā)電機(jī)有什么作用?主要應(yīng)用于哪些領(lǐng)域?
    發(fā)表于 06-30 08:02

    【資料分享】究竟什么是虛擬同步發(fā)電機(jī)??

    儲(chǔ)能虛擬同步發(fā)電機(jī)主要用于大規(guī)模新能源的集中并網(wǎng),提供虛擬慣量,進(jìn)行需求側(cè)的調(diào)頻、提升系統(tǒng)抗擾動(dòng)能力;亦可作為儲(chǔ)能變流器使用,消納電網(wǎng)中多余的可再生并網(wǎng)能源實(shí)現(xiàn)平滑輸出或平抑尖峰、低谷負(fù)荷,優(yōu)化
    發(fā)表于 06-30 07:39

    什么是虛擬同步機(jī)

    虛擬同步機(jī)是基于微網(wǎng)技術(shù)提出的一種電力電子技術(shù),傳統(tǒng)的電力電子發(fā)電設(shè)備多采用PQ控制,動(dòng)態(tài)響應(yīng)快,缺少類似同步電機(jī)的阻尼特性,從而引起電網(wǎng)波動(dòng)等問題。故為了迎合電網(wǎng)特性,使得逆變器具有同步
    發(fā)表于 06-30 06:43

    虛擬機(jī)及虛擬技術(shù)

    虛擬機(jī)及虛擬技術(shù)給計(jì)算機(jī)應(yīng)用注入了新的研究與開發(fā)點(diǎn),同時(shí)也存在諸多不利因素。本文綜述了虛擬機(jī)及虛擬
    發(fā)表于 09-07 10:15 ?13次下載

    淺談云計(jì)算與虛擬的關(guān)系及虛擬的類型

    說到虛擬,一般是指將物理的實(shí)體,通過軟件模式,形成若干虛擬存在的系統(tǒng),其實(shí)真是運(yùn)作還是在實(shí)體上,只是劃分了若干區(qū)域或者時(shí)域劃分。而云計(jì)算的基礎(chǔ)是虛擬
    發(fā)表于 11-09 16:18 ?1740次閱讀

    虛擬技術(shù)有哪些

    本視頻主要詳細(xì)介紹了虛擬技術(shù)有哪些,分別有CPU虛擬、網(wǎng)絡(luò)虛擬、服務(wù)器
    的頭像 發(fā)表于 01-02 16:25 ?3.8w次閱讀

    華為宣布開源數(shù)據(jù)虛擬openLooKeng

    日前,記者從華為官網(wǎng)了解到,華為正式宣布開源數(shù)據(jù)虛擬引擎openLooKeng,其開源社區(qū)官網(wǎng)也同步上線。
    的頭像 發(fā)表于 07-03 11:25 ?1752次閱讀

    I/O軟件模擬虛擬和類虛擬

    I/O虛擬是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是從I/O硬件虛擬化開始,逐漸開啟了DPU這個(gè)新處理器類型的創(chuàng)新。而Virtio接口,已經(jīng)是事實(shí)上的云計(jì)算虛擬
    的頭像 發(fā)表于 10-13 11:09 ?2538次閱讀

    簡(jiǎn)述Vsync信號(hào)和View繪制流程之間的關(guān)系

    vsync是有兩個(gè)信號(hào)的, 一個(gè)是vsync-app用于生成當(dāng)前幀的數(shù)據(jù);(CPU計(jì)算和GPU渲染) 一個(gè)用于消費(fèi)數(shù)據(jù)(合成圖像到Display上,vsync-surface) 。
    的頭像 發(fā)表于 02-02 11:18 ?803次閱讀

    并網(wǎng)逆變器學(xué)習(xí)筆記之虛擬同步機(jī)控制(VSG)

    參考博士論文《基于虛擬同步機(jī)的微網(wǎng)逆變器控制策略研究_劉芳》 虛擬同步機(jī)控制綜述 ?1 歐洲VSYNC方案 根據(jù)頻率偏差和頻率變化率生成一次
    發(fā)表于 03-02 15:32 ?5次下載
    并網(wǎng)逆變器學(xué)習(xí)筆記之<b class='flag-5'>虛擬</b><b class='flag-5'>同步</b>機(jī)控制(VSG)

    虛擬技術(shù)是什么 虛擬技術(shù)介紹

      虛擬(Virtualization)是一個(gè)廣義的術(shù)語(yǔ),簡(jiǎn)單來說,是指計(jì)算機(jī)相關(guān)模塊在虛擬的基礎(chǔ)上而不是真實(shí)的獨(dú)立的物理硬件基礎(chǔ)上運(yùn)行,這種把有限的固定的資源根據(jù)不同需求進(jìn)行重新規(guī)劃以達(dá)到最大
    發(fā)表于 07-19 11:26 ?1次下載

    VSync的起源是什么

    問題最初是在PC上被重視和解決的,GPU廠商開發(fā)出了一種防止屏幕被撕裂的技術(shù)方案,全稱Vertical Synchronization(中文名垂直同步,簡(jiǎn)稱VSync)。基本思路就是在屏幕刷新之前向外提供一個(gè)信號(hào),主機(jī)端根據(jù)此信號(hào)選擇合適的策略完成畫面的刷新,避免數(shù)據(jù)
    的頭像 發(fā)表于 11-21 16:01 ?1058次閱讀
    <b class='flag-5'>VSync</b>的起源是什么

    Andriod中Vsync的背景

    Android的顯示系統(tǒng)一直使用雙緩沖和VSync來防止屏幕畫面發(fā)生撕裂現(xiàn)象,這也是其他系統(tǒng)的常規(guī)操作。Android的不同之處是將VSync運(yùn)用到繪制系統(tǒng)中,作為黃油計(jì)劃(Project
    的頭像 發(fā)表于 11-21 16:13 ?294次閱讀
    Andriod中<b class='flag-5'>Vsync</b>的背景

    Andriod中VSync的分發(fā)

    App與SurfaceFlinger是不同的進(jìn)程,它們之間傳遞VSync的話涉及到進(jìn)程間通信,而且VSync頻率很高,App很多,所以VSync的分發(fā)效率要很高才行。Linux進(jìn)程間通信方式總共
    的頭像 發(fā)表于 11-21 16:32 ?750次閱讀
    Andriod中<b class='flag-5'>VSync</b>的分發(fā)

    VSync offset定義的方法

    VSync-offset/duration 虛擬后的VSync還有一個(gè)好處,就是可以對(duì)VSync進(jìn)行一些定制操作,offset就是其中之一
    的頭像 發(fā)表于 11-21 16:57 ?890次閱讀
    <b class='flag-5'>VSync</b> offset定義的方法