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

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

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

VSync offset定義的方法

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

VSync-offset/duration

虛擬化后的VSync還有一個(gè)好處,就是可以對(duì)VSync進(jìn)行一些定制操作,offset就是其中之一。

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

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

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

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

圖片

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

圖片

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

圖片

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

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

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

圖片

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

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

duration的定義相對(duì)明確

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

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

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

圖片

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

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

sf phase = m * vsync period - sf duration

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

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎ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)注

    69

    文章

    4626

    瀏覽量

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

    關(guān)注

    0

    文章

    502

    瀏覽量

    19620
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    FPGA時(shí)序約束OFFSET

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

    OFFSET約束問題

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

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

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

    VSYNC、HSYNC、DOTCLOCK是如何計(jì)算的?

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

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

    CDMA Access_pn_offset與距離的公式測定:本文測定了Motorola CDMA系統(tǒng)中Access_pn_offset與距離的關(guān)系,解決了長期以來困擾無線工程師的CDMA距離判定問題。一、緒論    在移動(dòng)
    發(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 約束定義了外部時(shí)鐘pad和與之相關(guān)的輸入、輸出pad之間的相對(duì)關(guān)系。這是一個(gè)基礎(chǔ)的時(shí)序約束。Offset
    發(fā)表于 02-08 13:22 ?2112次閱讀
    <b class='flag-5'>OFFSET</b>約束的寫法(<b class='flag-5'>OFFSET</b> IN和<b class='flag-5'>OFFSET</b> OUT)

    簡述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次閱讀

    VSync的起源是什么

    VSync的起源 顯示屏上一幀畫面的顯示過程,是像素自上而下逐行掃描的過程,如果在上一幀的掃描還沒有結(jié)束的情況下,屏幕又開始掃描下一幀的像素,那么就會(huì)出現(xiàn)如下圖中撕裂(tearing)的情況。 這個(gè)
    的頭像 發(fā)表于 11-21 16:01 ?1056次閱讀
    <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>的背景

    VSync的虛擬化與同步

    VSync的虛擬化 由上面的介紹可以知道,VSync其實(shí)起源于顯示屏,但是想想如果每個(gè)App和SurfaceFlinger都去從硬件驅(qū)動(dòng)中直接監(jiān)聽VSync,那未免有點(diǎn)太復(fù)雜了,而且耦合性太高,不行
    的頭像 發(fā)表于 11-21 16:23 ?598次閱讀
    <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ā)