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

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

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

VSync offset定義的方法

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

VSync-offset/duration

虛擬化后的VSync還有一個好處,就是可以對VSync進行一些定制操作,offset就是其中之一。

接下來就是offset的定義,offset 分為兩大類,即phase-app和phase-sf:

phase-app:VSync-app與hw_vsync的相位差;

phase-sf:VSync-sf與hw_vsync的相位差;

還是以trace為例,可以看到,每一個vsync-app都比對應(yīng)的TE信號晚了1.2ms,因此這份trace中的app-offset為+1200000(ns為單位)

圖片

同樣的,每一個vsync-sf都比對應(yīng)的TE早了3.6ms,因此sf-offset即為-3600000.

圖片

綜上,offset表示著vsync-app及vsync-sf與hw_vsync的相位差,這個值通過dump sf就可以獲取。

圖片

Offset 的一個比較難以確定的點就在于 Offset 的時間該如何設(shè)置,其優(yōu)缺點是動態(tài)的,與機型的性能和使用場景有很大的關(guān)系。

如果 Offset 配置過短,那么可能 App 收到 Vsync-App 后還沒有渲染完成,SurfaceFlinger 就收到 Vsync-SF開始合成,那么此時如果 App 的 BufferQueue 中沒有之前累積的 Buffer,那么 SurfaceFlinger 這次合成就不會有 App的東西在里面,需要等到下一個 Vsync-SF 才能合成這次 App 的內(nèi)容,時間相當(dāng)于變成了 Vsync 周期+Offset,而不是我們期待的Offset。

如果 Offset 配置過長,就沒有辦法起到其原有的作用了。

圖片

另外,稍微錯開app和sf的VSync是有好處的,因為錯開后整個系統(tǒng)同一時間搶占CPU的task會減少,理論上會有點優(yōu)化。一般安卓對不同幀率有不同的offset默認(rèn)配置。

Android S及之后的版本,Google引入了duration的概念,部分程度上代替了offset。

duration的定義相對明確

app duration:app繪制一塊buffer到sf消費這塊buffer的時長(vsync-app與對應(yīng)vsync-sf的間隔);

sf duration:sf消費一塊buffer到這塊buffer上屏的時長(vsync-sf到TE的間隔);

也就是說,app duration和sf duration之和,即為某一幀從開始繪制到刷新在屏幕上的總時長。

圖片

這種表示相對直觀,因此在S版本及之后,google默認(rèn)采用配置duration的方式來決定vsync相位差,但這并不代表offset被棄用,這兩個值是相互影響的,修改其中一個值,另外一個值也會出現(xiàn)變化。具體的換算關(guān)系為

app phase=n * vsync period - (app duration + sf duration)

sf phase = m * vsync period - sf duration

從duration的概念可以看出,duration越短,給到app繪制和sf合成的時間就越有限,那么繪制線程和sf線程所需的CPU,GPU頻率就越高,功耗就越高。

duration的長短會影響一個buffer從繪制到上屏的生命周期,進而影響到跟手性,duration越短,跟手性越強。其次,duration的配置會影響bufferqueue里預(yù)先加載的buffer塊數(shù)量,進而影響sf占用的內(nèi)存大小,duration越長,buffer塊數(shù)量越多,sf占用內(nèi)存越大。另外,廠商對CPU和GPU的調(diào)頻策略也會受到duration的影響,貿(mào)然改短duration可能會導(dǎo)致特定場景的頻率異常升高。

講了這么多,總結(jié)起來Andriod中VSync模塊的架構(gòu)就是下圖這樣:

HW_VSync是由屏幕產(chǎn)生的脈沖信號,用來控制屏幕的刷新。

VSync-app與VSync-sf統(tǒng)稱為軟件VSync,它們是由SurfaceFlinger通過模擬硬件VSync而產(chǎn)生的VSync信號量,再分發(fā)給app和sf用來控制它們的合成節(jié)奏。

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

    關(guān)注

    12

    文章

    3903

    瀏覽量

    126614
  • 軟件
    +關(guān)注

    關(guān)注

    69

    文章

    4570

    瀏覽量

    86696
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    501

    瀏覽量

    19580
收藏 人收藏

    評論

    相關(guān)推薦

    AD698里面的Gain Error、Output Offset和PSRR Gain等參數(shù)是如何定義的?

    各位工程師好,我在對AD698進行測試。請問AD698里面的Gain Error、Output Offset和PSRR Gain等參數(shù)是如何定義的?為什么Gain Error、Output Offset單位是% of FS,PS
    發(fā)表于 07-04 07:59

    PGA308為什么加兩個offset,Coarse offset及Fine offset?用一個offset不能調(diào)零嗎?

    PGA308為什么加兩個offset,Coarse offset及Fine offset?用一個offset不能調(diào)零嗎?
    發(fā)表于 08-22 07:22

    FPGA時序約束OFFSET

    時鐘period約束,對接口上升沿定義全局OFFSET IN約束,對接口下降沿定義全局OFFSET IN約束。對于時鐘period約束,首先要定義
    發(fā)表于 09-05 21:13

    OFFSET約束問題

    嗨,大家好,據(jù)我所知,OFFSET約束強加于所有輸入PAD。在我的設(shè)計中,使用了兩個時鐘輸入。因此,PAD上的輸入信號應(yīng)分組為:1.需要OFFSET約束時間值#1,參考時鐘輸入#12.需要
    發(fā)表于 05-29 13:51

    請問設(shè)置OFFSET的約束定義是什么?

    大家好,我在GMII接口中為以太網(wǎng)千兆位的Rx部分設(shè)置約束時遇到問題。首先,我需要找到信號的實際細(xì)節(jié):我附上了IEEE規(guī)范的細(xì)節(jié)。設(shè)置時間為2.0ns,保持時間為0.5ns。其次,我需要找到如何定義
    發(fā)表于 07-30 11:05

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

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

    CDMA Access pn offset與距離的公式測定

    CDMA Access_pn_offset與距離的公式測定:本文測定了Motorola CDMA系統(tǒng)中Access_pn_offset與距離的關(guān)系,解決了長期以來困擾無線工程師的CDMA距離判定問題。一、緒論    在移動
    發(fā)表于 07-27 21:53 ?40次下載

    Timing Groups and OFFSET Const

    Timing Groups and OFFSET Constraints: •Use the Constraints Editor to create groups of path
    發(fā)表于 01-11 08:55 ?4次下載

    DC Offset Auto-Calibration of

    ABSTRACTThe TRF371x family provides an automatic calibration circuit to minimize the DC offset
    發(fā)表于 07-08 16:23 ?17次下載

    OFFSET約束的寫法(OFFSET IN和OFFSET OUT)

    1. OFFSET約束的寫法 Offset 約束定義了外部時鐘pad和與之相關(guān)的輸入、輸出pad之間的相對關(guān)系。這是一個基礎(chǔ)的時序約束。Offset
    發(fā)表于 02-08 13:22 ?2062次閱讀
    <b class='flag-5'>OFFSET</b>約束的寫法(<b class='flag-5'>OFFSET</b> IN和<b class='flag-5'>OFFSET</b> OUT)

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

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

    VSync的起源是什么

    VSync的起源 顯示屏上一幀畫面的顯示過程,是像素自上而下逐行掃描的過程,如果在上一幀的掃描還沒有結(jié)束的情況下,屏幕又開始掃描下一幀的像素,那么就會出現(xiàn)如下圖中撕裂(tearing)的情況。 這個
    的頭像 發(fā)表于 11-21 16:01 ?853次閱讀
    <b class='flag-5'>VSync</b>的起源是什么

    Andriod中Vsync的背景

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

    VSync的虛擬化與同步

    VSync的虛擬化 由上面的介紹可以知道,VSync其實起源于顯示屏,但是想想如果每個App和SurfaceFlinger都去從硬件驅(qū)動中直接監(jiān)聽VSync,那未免有點太復(fù)雜了,而且耦合性太高,不行
    的頭像 發(fā)表于 11-21 16:23 ?513次閱讀
    <b class='flag-5'>VSync</b>的虛擬化與同步

    Andriod中VSync的分發(fā)

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