<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 offset定義的方法

麥辣雞腿堡 ? 來源:OPPO內核工匠 ? 作者: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都比對應的TE信號晚了1.2ms,因此這份trace中的app-offset為+1200000(ns為單位)

圖片

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

圖片

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

圖片

Offset 的一個比較難以確定的點就在于 Offset 的時間該如何設置,其優缺點是動態的,與機型的性能和使用場景有很大的關系。

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

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

圖片

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

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

duration的定義相對明確

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

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

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

圖片

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

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里預先加載的buffer塊數量,進而影響sf占用的內存大小,duration越長,buffer塊數量越多,sf占用內存越大。另外,廠商對CPU和GPU的調頻策略也會受到duration的影響,貿然改短duration可能會導致特定場景的頻率異常升高。

講了這么多,總結起來Andriod中VSync模塊的架構就是下圖這樣:

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

VSync-app與VSync-sf統稱為軟件VSync,它們是由SurfaceFlinger通過模擬硬件VSync而產生的VSync信號量,再分發給app和sf用來控制它們的合成節奏。

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

    關注

    12

    文章

    3880

    瀏覽量

    125891
  • 軟件
    +關注

    關注

    68

    文章

    4405

    瀏覽量

    86066
  • 線程
    +關注

    關注

    0

    文章

    495

    瀏覽量

    19526
收藏 人收藏

    評論

    相關推薦

    FPGA時序約束OFFSET

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

    請問ADL5375的offset是指DC offset么?

    我最近在看ADL5375的芯片資料。上面提到調節LO泄露是在調IQ的offset 電壓,請問,這個offset是指DC offset么?它具體到底是指什么呢?大家一般是用LO差分輸入還是單端輸入呢?兩者結果有哪些區別?
    發表于 11-29 15:32

    OFFSET約束問題

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

    請問設置OFFSET的約束定義是什么?

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

    如何駕駛所有五個R,G,B,HSYNC和VSYNC?

    你好我打算在sp605中實現sobel邊緣檢測(我有這個開發板)我想去尋找簡單的vga驅動程序我可以將R,G,B和HSYNC連接到J55中可用的四個I / O,但不能連接VGA所需的VSYNC,因為J55只有四個I / O.請建議我如何駕駛所有五個R,G,B,HSYNC和VSYN
    發表于 10-29 08:13

    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

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

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

    Timing Groups and OFFSET Const

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

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

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

    offset新探索:雙管齊下,加速大數據量查詢

    眾所周知,在各類業務中時常會用到LIMIT y offset x來做跳過x條數據讀取Y條數據的操作。例如:SELECT * FROM ... LIMIT 1000 OFFSET 1000000
    的頭像 發表于 11-24 14:45 ?398次閱讀
    <b class='flag-5'>offset</b>新探索:雙管齊下,加速大數據量查詢

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

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

    VSync的起源是什么

    VSync的起源 顯示屏上一幀畫面的顯示過程,是像素自上而下逐行掃描的過程,如果在上一幀的掃描還沒有結束的情況下,屏幕又開始掃描下一幀的像素,那么就會出現如下圖中撕裂(tearing)的情況。 這個
    的頭像 發表于 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>的背景

    VSync的虛擬化與同步

    VSync的虛擬化 由上面的介紹可以知道,VSync其實起源于顯示屏,但是想想如果每個App和SurfaceFlinger都去從硬件驅動中直接監聽VSync,那未免有點太復雜了,而且耦合性太高,不行
    的頭像 發表于 11-21 16:23 ?333次閱讀
    <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>的分發
    亚洲欧美日韩精品久久_久久精品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>