<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

VSync的虛擬化與同步

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

VSync的虛擬化

由上面的介紹可以知道,VSync其實起源于顯示屏,但是想想如果每個App和SurfaceFlinger都去從硬件驅動中直接監聽VSync,那未免有點太復雜了,而且耦合性太高,不行。那怎么辦呢?

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

圖片

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

VSync的同步

VSync虛擬化的實質就是在軟件層面模擬硬件VSync,既然是軟件模擬,那么就會存在誤差,如果誤差比較大,那么就需要開啟硬件VSync同步來進行校準。那么就存在兩個問題,怎么發現自己誤差比較大?以及怎么來同步?

首先是如何發現誤差比較大?答案是通過fence機制。SurfaceFlinger在每一幀交給HWC的時候,同時都會從HWC那里得到此幀的PresentFence,它是在此幀開始刷新至屏幕的時候signal的。那驅動什么時候開始刷新一幀至屏幕呢,答案是屏幕VSync來的時候。所以這下就能串起來了。根據PresentFence的signal時間就可以知道真實的VSync時間,那么之后的事情就簡單了。

在HWComposer::presentAndGetReleaseFences中獲取PresentFence,

圖片

獲取到fence之后就會對齊進行監測

圖片

一旦不準就開硬件VSync來進行校準,通常情況下接收六次硬件VSync就可以完成校準動作。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3880

    瀏覽量

    125891
  • 硬件
    +關注

    關注

    11

    文章

    2952

    瀏覽量

    65107
  • 監測
    +關注

    關注

    2

    文章

    3139

    瀏覽量

    43995
收藏 人收藏

    評論

    相關推薦

    WAN中的虛擬

    數十年來,我們已經以VLAN和VPN的形式實現了WAN虛擬,但數據中心的虛擬僅在過去幾年才出現?,F在數據中心虛擬
    發表于 08-24 13:47

    Linux上的虛擬技術歷史回顧

    虛擬技術的應用十分廣泛. 當前虛擬技術主要關注于服務器的虛擬, 或在單個主機上寄存多個獨立
    發表于 07-22 07:18

    虛擬故障怎么辦?虛擬運維怎么解決?

    團隊能力和運維工具!在此特殊時期,很多運維人員面臨著運維工具的匱乏的難題,很多用戶反映明辰智航云安虛擬業務性能監測管理工具,可以做到虛實結合,混合監控,多平臺兼容,能大大提升他們的運維效率和有效減少
    發表于 02-21 21:32

    什么是虛擬同步發電機?虛擬同步發電機有什么作用?

    究竟什么是虛擬同步發電機?虛擬同步發電機有什么作用?主要應用于哪些領域?
    發表于 06-30 08:02

    【資料分享】究竟什么是虛擬同步發電機??

    儲能虛擬同步發電機主要用于大規模新能源的集中并網,提供虛擬慣量,進行需求側的調頻、提升系統抗擾動能力;亦可作為儲能變流器使用,消納電網中多余的可再生并網能源實現平滑輸出或平抑尖峰、低谷負荷,優化
    發表于 06-30 07:39

    什么是虛擬同步

    虛擬同步機是基于微網技術提出的一種電力電子技術,傳統的電力電子發電設備多采用PQ控制,動態響應快,缺少類似同步電機的阻尼特性,從而引起電網波動等問題。故為了迎合電網特性,使得逆變器具有同步
    發表于 06-30 06:43

    什么是計算機虛擬

    計算機虛擬是一種型的計算模式, 能夠動態組織多種計算資源, 隔離硬件體系結構和軟件系統之間的依賴關系, 實現透明、 可伸縮的計算系統構架, 提高計算資源的使用效率和遺產軟件的重用。某公司是一家
    發表于 12-21 06:42

    ARM系列虛擬資料分享

    1、hypervisor模擬虛擬設備為了實現虛擬,虛擬機需要控制系統資源。但是實際的系統資源是在 hypervisor 直接控制之下,為了實現隔離和安全等方面的考慮,不可能讓
    發表于 03-31 09:33

    VSYNC、HSYNC、DOTCLOCK是如何計算的?

    與 LCDIFv2。 這是唯一的變化嗎-VIDEO_MUX->VID_MUX_CTRL.SET = VIDEO_MUX_VID_MUX_CTRL_PARA_LCD_SEL_MASK;VSYNC、HSYNC、DOTCLOCK 是如何計算的?
    發表于 03-14 09:42

    簡述Vsync信號和View繪制流程之間的關系

    vsync是有兩個信號的, 一個是vsync-app用于生成當前幀的數據;(CPU計算和GPU渲染) 一個用于消費數據(合成圖像到Display上,vsync-surface) 。
    的頭像 發表于 02-02 11:18 ?686次閱讀

    并網逆變器學習筆記之虛擬同步機控制(VSG)

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

    VSync的起源是什么

    問題最初是在PC上被重視和解決的,GPU廠商開發出了一種防止屏幕被撕裂的技術方案,全稱Vertical Synchronization(中文名垂直同步,簡稱VSync)?;舅悸肪褪窃谄聊凰⑿轮跋蛲馓峁┮粋€信號,主機端根據此信號選擇合適的策略完成畫面的刷新,避免數據
    的頭像 發表于 11-21 16:01 ?491次閱讀
    <b class='flag-5'>VSync</b>的起源是什么

    Andriod中Vsync的背景

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

    Andriod中VSync的分發

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

    VSync offset定義的方法

    VSync-offset/duration 虛擬化后的VSync還有一個好處,就是可以對VSync進行一些定制操作,offset就是其中之一。 接下來就是offset的定義,offse
    的頭像 發表于 11-21 16:57 ?509次閱讀
    <b class='flag-5'>VSync</b> offset定義的方法
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>