一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

jf_78858299 ? 來(lái)源:北洋洋洋 ? 作者:北洋 ? 2023-02-02 11:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

VSync信號(hào)

vsync是有兩個(gè)信號(hào)的,

一個(gè)是vsync-app用于生成當(dāng)前幀的數(shù)據(jù);(CPU計(jì)算和GPU渲染)

一個(gè)用于消費(fèi)數(shù)據(jù)(合成圖像到Display上,vsync-surface) 。

三緩沖機(jī)制:

?CPU緩存為了防止GPU計(jì)算超時(shí),提前生成數(shù)據(jù) GPU:將數(shù)據(jù)放到緩沖池防止屏幕渲染超時(shí)

?

一,vsync信號(hào)來(lái)源

vsync可以由底層HardWare提供經(jīng)由Display發(fā)送,當(dāng)?shù)讓親ardware不能提供時(shí)也會(huì)發(fā)送vsync信號(hào)到Display。vsync屏蔽了底層Hal,使得沒(méi)有Vsync的硬件也可以使用。

二,發(fā)送流程

HardWare到達(dá)Display之后,Display會(huì) 「將vsync信號(hào)分成兩個(gè)」 一個(gè)用于 「生成」 一個(gè)用于 「消費(fèi)」 的vsync信號(hào)。

「一個(gè)是vsync-app」 喚醒Chrographer做App的繪制操作(生成當(dāng)前幀數(shù)據(jù))

「一個(gè)是vsync-sf」 是SurfaceFliger使用,當(dāng)vsync信號(hào)來(lái)臨時(shí)進(jìn)行合成操作(要滿足消費(fèi)完上一幀數(shù)據(jù)的條件下)

三,偏移量

vsync每隔16ms發(fā)送一個(gè)。vsync會(huì)分成兩個(gè)信號(hào)發(fā)送。這就意味著只要這兩個(gè)信號(hào)在16ms之內(nèi)處理完數(shù)據(jù)就可以。也就是說(shuō)我們可以打亂順序是 「先合成消費(fèi)幀數(shù)據(jù)繪制到屏幕上」 還是先 「生成幀數(shù)據(jù)」 。

比如先發(fā)送vsync-app在0-13ms做完處理,接著13-16ms在發(fā)送vsync-surface合成數(shù)據(jù) 或者顛倒,但是事件一定保證只要在16ms之內(nèi)處理完這兩個(gè)信號(hào)即可

四,整個(gè)處理過(guò)程:

1.vsync-app:UI Thread準(zhǔn)備好繪制指令,提交給Render Thread渲染線程去調(diào)用OpenGl的函數(shù)去生成buffer并放到BufferQuene中

2.vsync-surface:SurfaceFliger進(jìn)程去BufferQuene中去取出buffer合成圖像顯示到屏幕Display中。

五,vsync-app 解釋

喚醒Chorgrapher去做處理生成當(dāng)前這一幀的數(shù)據(jù)。注意:有兩個(gè)線程共同合作完成繪制動(dòng)作:UIThread生成指令和RenderThread調(diào)用OpenGl庫(kù)生成Buffer放入到BufferQuene緩沖隊(duì)列中。 「UIThread」 :Choreographer.doFrame() 「RenderThread」 :DrawFrame

首先來(lái)講 「UIThread的Choreographer.doFrame」 方法:

1.按順序發(fā)送INPUT,ANIMATION,TRASVEL并處理他們各自的doFrame方法 先處理輸入事件在處理動(dòng)畫(huà),最后的TRASVEL會(huì)進(jìn)行調(diào)用到ViewRootImpl中的doTrasvel回調(diào),這個(gè)回調(diào)里面會(huì)進(jìn)行measure,layout和draw。

這里講下draw方法,進(jìn)行performDraw方法調(diào)用時(shí)會(huì)調(diào)用全局Surface(也就是activity)的lockCanvas方法。這個(gè)方法會(huì)在native層的Surface對(duì)象中鎖定一塊內(nèi)存區(qū)域返回值為canvas也就是這片在native層的Surface內(nèi)存空間中。接下來(lái)調(diào)用draw方法把這個(gè)canvas傳入到參數(shù)中,也就是我們?cè)赿raw方法中對(duì)canvas進(jìn)行的修改實(shí)質(zhì)上都是對(duì)這塊內(nèi)存區(qū)域的修改。最后draw方法調(diào)用完成后,會(huì)進(jìn)行釋放這塊內(nèi)存區(qū)域并交給RenderThread去處理渲染數(shù)據(jù)。(釋放的操作在native層對(duì)應(yīng)的處理是把這塊內(nèi)存區(qū)域變成一個(gè)Bitmap交由RenderThread去渲染)

?draw方法其實(shí)并沒(méi)有進(jìn)行真正的繪制,而是把繪制的內(nèi)容放入到了DisplayList中接著同步到RenderThread中。

?

繪制最終會(huì)調(diào)用到View.invalidate方法

2.RenderThread執(zhí)行的時(shí)候UIThread就可以釋放掉去做其他處理,接著RenerThread去取出DisplayList中的數(shù)據(jù)進(jìn)行處理生成frameBuffer給到Surface去做合成處理。具體流程:RenderThread會(huì)執(zhí)行一個(gè)DrawFrameTask的Task,里面核心方法是DrawFrame。通過(guò)OpenGl和一些庫(kù)將渲染數(shù)據(jù)通知給SurefaceFliger去做圖層合成。將渲染數(shù)據(jù)放入到阻塞隊(duì)列中

六,vsync-sf:

App端中RenderThread產(chǎn)生的FrameBuffer數(shù)據(jù)會(huì)在SurfaceFliger中進(jìn)行消費(fèi)。也就是取出阻塞隊(duì)列中的渲染數(shù)據(jù)。SurfaceFliger進(jìn)行合成到Display上面處理

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

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217050
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95246
  • 渲染
    +關(guān)注

    關(guān)注

    0

    文章

    76

    瀏覽量

    11176
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    plc教程之瀏覽FactoryTalk View Studio

    點(diǎn)擊“Samples Water”。plc視頻教程是比較宏觀的,里面包含的內(nèi)容很是龐大,plc教程之瀏覽FactoryTalk View Studio只是其中的很小的一部分更多內(nèi)容可以參看wxdongtian.cn網(wǎng)站的其他文章,或者購(gòu)買(mǎi)全套的教程。
    發(fā)表于 09-18 08:45

    JAVA教程之常用圖形的繪制與填充

    JAVA教程之常用圖形的繪制與填充,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?3次下載

    JAVA教程之不規(guī)則圖形的繪制

    JAVA教程之不規(guī)則圖形的繪制,很好的JAVA的資料,快來(lái)學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?1次下載

    C#教程之繪制鼠標(biāo)Cur

    C#教程之繪制鼠標(biāo)Cur,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?6次下載

    C#教程之繪制文字

    C#教程之繪制文字,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?8次下載

    C#教程之繪制選中

    C#教程之繪制選中,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?10次下載

    C#教程之繪制噪點(diǎn)

    C#教程之繪制噪點(diǎn),很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?23次下載

    C#教程之繪制直線

    C#教程之繪制直線,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?6次下載

    C#教程之圖片上繪制文字

    C#教程之圖片上繪制文字,很好的C#資料,快來(lái)學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?5次下載

    自動(dòng)控制系統(tǒng)控制工程教程之信號(hào)流程圖的資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是自動(dòng)控制系統(tǒng)控制工程教程之信號(hào)流程圖的資料說(shuō)明。系統(tǒng)方塊圖直觀表示系統(tǒng)輸入與輸出的關(guān)系,但簡(jiǎn)化過(guò)程復(fù)雜。
    發(fā)表于 11-22 08:00 ?5次下載
    自動(dòng)控制系統(tǒng)控制工程教<b class='flag-5'>程之</b><b class='flag-5'>信號(hào)</b><b class='flag-5'>流程</b>圖的資料說(shuō)明

    簡(jiǎn)述dtft和z變換之間關(guān)系

    簡(jiǎn)述dtft和z變換之間關(guān)系 離散時(shí)間傅里葉變換(DTFT)和Z變換是兩種在信號(hào)處理中非常常見(jiàn)的變換方法。雖然兩種變換之間存在一些區(qū)別,但
    的頭像 發(fā)表于 09-07 16:38 ?4575次閱讀

    Andriod中Vsync的背景

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

    VSync的虛擬化與同步

    。那怎么辦呢? 因此,最好是有一個(gè)模塊去專門(mén)跟驅(qū)動(dòng)溝通,再由它將VSync信號(hào)廣播給大家,就像一個(gè)hub一樣。但是VSync頻率這么高,每次從kernel到userspace的消耗也不少,而且
    的頭像 發(fā)表于 11-21 16:23 ?1061次閱讀
    <b class='flag-5'>VSync</b>的虛擬化與同步

    Andriod中VSync的分發(fā)

    VSync驅(qū)動(dòng),具體來(lái)說(shuō)就是App的每一幀的繪制是從收到VSync信號(hào)VSync-app)開(kāi)始的,SurfaceFlinger合成當(dāng)前圖層
    的頭像 發(fā)表于 11-21 16:32 ?1268次閱讀
    Andriod中<b class='flag-5'>VSync</b>的分發(fā)

    VSync offset定義的方法

    ,可以看到,每一個(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
    的頭像 發(fā)表于 11-21 16:57 ?1733次閱讀
    <b class='flag-5'>VSync</b> offset定義的方法