<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天內不再提示

Andriod中Vsync的背景

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

Android的顯示系統一直使用雙緩沖和VSync來防止屏幕畫面發生撕裂現象,這也是其他系統的常規操作。Android的不同之處是將VSync運用到繪制系統中,作為黃油計劃(Project Butter)的一部分,用以提升系統的流暢度。

VSync:

Android中VSync的作用是統一系統繪制與顯示節奏(Apps和SurfaceFlinger),大家各司其職,確保在VSync來的時候干活,這樣系統理論上就絲滑了。

如下圖,在沒有VSync的情況下,系統渲染的節奏與屏幕刷新的節奏不一致,如果某一幀系統渲染的比較晚,那么就會出現屏幕兩次刷新都顯示同一份內容的情況,也就是Jank(掉幀)。

圖片

有了VSync的話,系統會在VSync到來時進行繪制,與屏幕的刷新節奏保持一致,這樣就大大降低了jank的概率。

圖片

那么問題來了,怎么讓Apps根據VSync的節奏來進行繪制呢?App依賴系統的繪制系統,所以必須讓繪制系統聽命令才行,這就是Choreographer出現的原因。

Choreographer:

Choreographer(編舞者)的作用在源碼的注釋中已經寫得很明白,是用來接收定時脈沖信號來控制繪制的模塊。也就是說,有了Choreographer,apps就能夠根據Vsync信號來進行周期性的繪制工作。

圖片

以上兩者配合就基本上完成了Android中VSync的改造,但是還有一個造成Jank的原因也是不容忽視的,這就是雙buffer機制帶來的jank風險。

Triple Buffer:

如下圖,理想情況下的雙buffer是沒有問題的,這個理想狀態是指繪制工作(可以粗略地理解為一幀CPUGPU執行的總耗時)在一個VSync周期內完成,這樣的情況下,不會發生jank。

圖片

遺憾的是,事情的發展不會總是按我們的預期來進行的,如果繪制時長超過了一個VSync周期,那么就必然會發生jank。如下圖所示,有兩幀的繪制超過了一個VSync周期,那么就會發生兩次Jank。

圖片

三Buffer機制實際上就是在上述backbuffer和frontbuffer的基礎上,再添加一塊buffer進行輪轉。在這樣的情況下,同樣假設有兩幀的繪制就是大于一個VSync周期,那么只會造成一次Jank。

圖片

三buffer機制雖然能降低jank的概率,但是也會帶來Touch響應慢和內存消耗高的負面影響,只不過相對于它帶來的效果,這些負面影響被忽略了。

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

    關注

    12

    文章

    3880

    瀏覽量

    125891
  • 系統
    +關注

    關注

    1

    文章

    985

    瀏覽量

    21072
收藏 人收藏

    評論

    相關推薦

    【Raspberry Pi 3申請】andriod系統開發APP

    申請理由:公司項目前期測試項目描述:主要功能能夠實現andriod系統,在這個基礎之上開發一些小的APP功能,通過有線網絡或者無線網絡與其他設備或者網頁進行通信等等。
    發表于 04-05 13:50

    智訊系列培訓課程:Andriod事件、數據、網絡

    現將智訊專業資料《Andriod事件、數據、網絡》分享給大家,僅供參考交流! 智訊(武漢)科技有限公司在移動互聯網、物聯網、嵌入式等技術領域有近十年的積累,專業為高校電子類、物聯網工程、嵌入式、軟件工程等高校院系提供實驗室設
    發表于 08-18 10:03

    如何在和聲圖形管理器設置HSYNC,VSYNC和DE的引腳?

    嗨,所有,和諧圖形管理器的“顯示設置”選項卡上的每個按鈕的水平脈沖,垂直脈沖和數據啟用,說“見/改變引腳”。按下按鈕顯示引腳表。我想我可以找到HSYNC,VSYNC,DE下的PMP部分,但沒有。我想
    發表于 09-29 16:04

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

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

    如何才能獲取andriod版本的root權限呢

    OK4418C開發板 andriod版本,需要獲取root權限,需要如何配置?使用adb shell 連接之后輸入su,提示命令不存在輸入busybox su,,提示must be suid
    發表于 01-06 06:29

    logcat如何查看Andriod log系統日志?

    logcat會輸出系統哪些信息呢?如何學習logcat命令?logcat如何查看Andriod log系統日志?如何查看Andriod log系統日志?
    發表于 03-03 06:15

    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

    三星手機andriod系統軟件

    三星手機andriod系統軟件
    發表于 01-14 14:58 ?18次下載

    Dragon?Board?410c板基于Andriod?5.1,

    Dragon?Board?410c板基于Andriod?5.1,Linux,Windows10三種操作系統開發特點介紹,我上傳了很多相關資料,感興趣的可以去我上傳的資料里看看哈。
    發表于 06-30 15:03 ?4次下載

    Andriod Phone通過藍牙控制的機器人汽車

    電子發燒友網站提供《由Andriod Phone通過藍牙控制的機器人汽車.zip》資料免費下載
    發表于 11-11 14:48 ?0次下載
    由<b class='flag-5'>Andriod</b> Phone通過藍牙控制的機器人汽車

    簡述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>的起源是什么

    VSync的虛擬化與同步

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

    AndriodVSync的分發

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

    VSync offset定義的方法

    VSync-offset/duration 虛擬化后的VSync還有一個好處,就是可以對VSync進行一些定制操作,offset就是其中之一。 接下來就是offset的定義,offset 分為兩大類
    的頭像 發表于 11-21 16:57 ?508次閱讀
    <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>