演講嘉賓 | 杜冬冬
回顧整理 | 廖 濤
排版校對(duì) | 宋夕明

嘉賓介紹
研究分論壇
杜冬冬,上海交通大學(xué)助理研究員、上海交通大學(xué)OpenHarmony技術(shù)俱樂(lè)部指導(dǎo)老師。研究方向?yàn)?a href="http://www.3532n.com/v/tag/527/" target="_blank">操作系統(tǒng)。目前圍繞智能終端操作系統(tǒng),在渲染服務(wù)、內(nèi)核關(guān)鍵技術(shù)、軟硬件協(xié)同、模型原生等方面開(kāi)展了多項(xiàng)工作,成果發(fā)表在 SOSP、OSDI、ASPLOS、ISCA 等操作系統(tǒng)和體系結(jié)構(gòu)領(lǐng)域頂級(jí)會(huì)議上,多項(xiàng)工作被開(kāi)源社區(qū)和工業(yè)界大規(guī)模部署應(yīng)用。
正文內(nèi)容
渲染服務(wù)(Rendering Service)是終端操作系統(tǒng)的重要組件,能顯著提升界面繪制的效率和質(zhì)量,直接決定著終端用戶(hù)的體驗(yàn)。隨著AI技術(shù)的快速發(fā)展以及用戶(hù)日益增長(zhǎng)的體驗(yàn)需求,下一代智能終端操作系統(tǒng)的渲染服務(wù)將面臨哪些挑戰(zhàn),又將如何發(fā)展?上海交通大學(xué)助理研究員杜冬冬在第三屆OpenHarmony技術(shù)大會(huì)上進(jìn)行了精彩分享。

什么是渲染服務(wù)?和其他終端操作系統(tǒng)服務(wù)一樣,渲染服務(wù)通過(guò)將硬件能力(CPU、GPU 等)進(jìn)行封裝抽象,向應(yīng)用程序提供渲染等能力的服務(wù)(2D圖形渲染等)。在終端操作系統(tǒng)中,渲染服務(wù)是一個(gè)重要的組成部分,其直接關(guān)乎著終端設(shè)備使用者的用戶(hù)體驗(yàn)。當(dāng)前渲染服務(wù)通常包括兩個(gè)架構(gòu),統(tǒng)一渲染和分離渲染。其中,統(tǒng)一渲染將主要的渲染任務(wù)都集中在一個(gè)渲染服務(wù)(如 Render Service)中,其能夠帶來(lái)較好的全局渲染任務(wù)管理,使能一些復(fù)雜的動(dòng)效;而分離渲染是指每個(gè)應(yīng)用中會(huì)有專(zhuān)門(mén)的渲染線程,來(lái)進(jìn)行渲染任務(wù),其能夠較好地平衡不同應(yīng)用的渲染負(fù)載。


分離渲染架構(gòu) 統(tǒng)一渲染架構(gòu)
現(xiàn)代移動(dòng)端圖形系統(tǒng)通常采用VSync架構(gòu)的渲染策略,其主要特點(diǎn)有:顯示器HAL層每幀率分之一秒向軟件圖形系統(tǒng)發(fā)送一個(gè)VSync事件;VSync事件觸發(fā)軟件圖形系統(tǒng)執(zhí)行該幀邏輯(輸入處理、動(dòng)畫(huà)、渲染、合成);該幀(或者該幀的一些階段)通常需要在下一個(gè)VSync事件之前完成,否則會(huì)影響后一幀的執(zhí)行并產(chǎn)生掉幀。
隨著終端設(shè)備能力的快速迭代,日益增長(zhǎng)的硬件顯示需求(更清晰、更流暢、更沉浸式的硬件顯示需求)和高級(jí)動(dòng)效需求(持續(xù)增長(zhǎng)的圖形特性數(shù)量加重了渲染負(fù)載,使每幀的運(yùn)行時(shí)間難以預(yù)測(cè))對(duì)渲染與視窗技術(shù)提出了更大挑戰(zhàn)。然而,極致流暢與高端精致的目標(biāo)難以兼得,且掉幀與渲染時(shí)延長(zhǎng)的問(wèn)題客觀存在,功耗仍需努力。

日益增長(zhǎng)的硬件顯示需求

日益增長(zhǎng)的高級(jí)動(dòng)效需求
目前,基于VSync架構(gòu)執(zhí)行渲染存在的主要問(wèn)題是:掉幀(frame drop)和時(shí)延(latency)。
掉幀形成的主要原因是:渲染系統(tǒng)無(wú)法在顯示器硬件VSync信號(hào)(即屏幕刷新)前準(zhǔn)備好一幀圖像上屏,導(dǎo)致顯示器在下一個(gè)新的VSync周期內(nèi)仍使用上一幀舊的圖像,產(chǎn)生頓挫、卡頓感。

VSync邏輯示意圖
當(dāng)前,由于渲染負(fù)載存在波動(dòng),當(dāng)出現(xiàn)重負(fù)載長(zhǎng)幀時(shí),當(dāng)前VSync架構(gòu)下,長(zhǎng)幀往往無(wú)法在一個(gè)VSync周期內(nèi)完成,產(chǎn)生偶發(fā)的掉幀。掉幀的根因是負(fù)載存在波動(dòng),而非每幀均衡。雖然大部分幀可以在一個(gè)VSync周期內(nèi)完成,但仍存在少部分的重負(fù)載長(zhǎng)幀導(dǎo)致掉幀,很難避免。此外,由于渲染的場(chǎng)景眾多/動(dòng)畫(huà)眾多/操作眾多無(wú)法考慮全,用戶(hù)的極限操作也無(wú)法預(yù)判,且圖形框架非常復(fù)雜,對(duì)于app開(kāi)發(fā)者/框架開(kāi)發(fā)者無(wú)法完全掌握框架的正確用法/最好用法,導(dǎo)致了幀率優(yōu)化困難。

Pixel 5 (Android) 幀渲染時(shí)長(zhǎng)的箱形圖
時(shí)延即從某一幀開(kāi)始執(zhí)行(處理輸入事件)到該幀真正顯示到屏幕上的時(shí)間。VSync架構(gòu)規(guī)定,每一幀的UI線程和系統(tǒng)服務(wù)(SF/RS)必須被VSync信號(hào)觸發(fā),這種強(qiáng)制的對(duì)齊導(dǎo)致了額外的時(shí)延。此外,由于三緩沖機(jī)制(triple buffering,一種用于優(yōu)化圖形渲染性能的技術(shù))允許在掉幀時(shí)渲染完的幀堆積在幀緩沖隊(duì)列中,從而產(chǎn)生被動(dòng)堆積。若有堆積,延時(shí)會(huì)額外增加一個(gè)周期。
時(shí)延會(huì)影響跟手性,在滑動(dòng)過(guò)程中,小球無(wú)法完全貼合指尖(被指尖覆蓋);在快速滑動(dòng)中,小球落后指尖的最大值為約為2.4cm (400 px),平均值約為200 px。

時(shí)延與跟手性
針對(duì)上述渲染過(guò)程的掉幀和時(shí)延問(wèn)題,作者本人及其所在團(tuán)隊(duì)基于OpenHarmony進(jìn)行渲染研究分析,并提出了提出了“D-Vsync”技術(shù)。
通過(guò)觀察渲染的冪律分布可知:大部分幀(95%)是短幀,能夠在Vsync周期能順利完成;小部分關(guān)鍵幀(5%)是長(zhǎng)幀,負(fù)載大難以在周期內(nèi)完成,并且導(dǎo)致丟幀等一系列影響用戶(hù)體驗(yàn)的問(wèn)題。因此,可以考慮利用短幀“省”下來(lái)的時(shí)間,去“幫”長(zhǎng)幀(削峰填谷)。

渲染的冪律分布
與Android分離渲染架構(gòu)不同,OpenHarmony采取的統(tǒng)一渲染架構(gòu)能夠?qū)崿F(xiàn)各個(gè)App統(tǒng)一繪制。因此,D-Vsync(Decoupeld) OpenHarmony總體架構(gòu)如下所示:

(D-)VSync OpenHarmony總體架構(gòu)圖
關(guān)鍵的設(shè)計(jì)有:
(D-)VSync應(yīng)用于渲染服務(wù)進(jìn)程Render Service (RS) ,管理RS每一幀的執(zhí)行時(shí)機(jī);
APP側(cè)可以通過(guò)rs_RequestNextVSync (后文簡(jiǎn)稱(chēng)RNV) 請(qǐng)求渲染服務(wù)進(jìn)程RS去執(zhí)行下一幀渲染邏輯。APP側(cè)處理輸入事件響應(yīng),在有事件響應(yīng)/UI動(dòng)畫(huà)等場(chǎng)景下,會(huì)調(diào)用RNV;
RS側(cè)自己可以通過(guò)RNV請(qǐng)求自己執(zhí)行下一幀渲染邏輯。通常為屬性動(dòng)畫(huà)等動(dòng)畫(huà)場(chǎng)景。
其中,當(dāng)APP側(cè)請(qǐng)求RNV時(shí),在VSync模式下,RS必須要在RNV請(qǐng)求后的第一個(gè)VSync事件到來(lái)后執(zhí)行這一幀,擁有額外的等待。此外,由于用戶(hù)輸入、APP側(cè)RNV不可預(yù)知,RS不能盲目提前執(zhí)行。當(dāng)RS屬性動(dòng)畫(huà)自我請(qǐng)求RNV時(shí),此時(shí)APP主線程不執(zhí)行,RS存在長(zhǎng)幀與短幀的負(fù)載波動(dòng),導(dǎo)致掉幀,屬性動(dòng)畫(huà)場(chǎng)景不涉及輸入,為確定性負(fù)載可以提前執(zhí)行。

(D-)VSync邏輯示意圖
D-VSync的幀預(yù)執(zhí)行模塊:D-VSync為RNV增加了新的參數(shù),判斷是外部調(diào)用(App側(cè)事件響應(yīng)、UI動(dòng)畫(huà)),還是自我調(diào)用(RS屬性動(dòng)畫(huà))。并且,D-VSync還會(huì)根據(jù)上一個(gè)VSync周期和當(dāng)前VSync周期內(nèi)收到的RNV類(lèi)型,判斷是屬性動(dòng)畫(huà)場(chǎng)景、非動(dòng)畫(huà)場(chǎng)景(響應(yīng)事件)、混合場(chǎng)景(包含動(dòng)畫(huà)和事件),根據(jù)場(chǎng)景進(jìn)行相應(yīng)的執(zhí)行動(dòng)作:
動(dòng)畫(huà)場(chǎng)景:在收到一個(gè)APP RNV時(shí),若前一個(gè)周期內(nèi)沒(méi)有收到任何RNV(渲染最開(kāi)始),或者前一個(gè)周期僅收到APP的RNV,則可以執(zhí)行該幀;
非動(dòng)畫(huà)場(chǎng)景:在收到一個(gè)RS RNV時(shí),前一個(gè)周期內(nèi)沒(méi)有收到APP的RNV,則可以執(zhí)行該幀(D-VSync);
混合場(chǎng)景:在收到一個(gè)RS RNV時(shí),前一個(gè)周期內(nèi)有APP的RNV,則等待該幀的APP RNV,收到后一并執(zhí)行該幀;在收到一個(gè)APP RNV時(shí),前一個(gè)周期內(nèi)有RS的RNV,則等待該幀的RS RNV,收到后一并執(zhí)行該幀。若等待超時(shí),則表示輸入事件流/屬性動(dòng)畫(huà)結(jié)束,再響應(yīng)該RNV執(zhí)行該幀。

D-VSync 幀預(yù)執(zhí)行模塊
此外,幀堆積存在預(yù)設(shè)的預(yù)執(zhí)行上限 X(由D-VSync控制器配置)。若響應(yīng)該RNV立刻發(fā)送事件給RS會(huì)導(dǎo)致超出預(yù)執(zhí)行上限 X,則等待到下一個(gè)VSync周期再發(fā)送該事件。發(fā)送事件前會(huì)檢查該幀的虛擬時(shí)間戳和此刻系統(tǒng)的真實(shí)時(shí)間戳比較,兩者的差值最大為X個(gè)周期(即預(yù)執(zhí)行最早提前X個(gè)周期)。
D-VSync的虛擬時(shí)間戳模塊:真實(shí)的VSync信號(hào)會(huì)在每個(gè)周期記錄真實(shí)的時(shí)間戳和周期(realVSyncTS,realPeriod)。屬性動(dòng)畫(huà)RNV在請(qǐng)求時(shí)會(huì)附帶請(qǐng)求時(shí)這一幀的時(shí)間戳 lastVSyncTS。虛擬時(shí)間戳的計(jì)算方式如下:
屬性動(dòng)畫(huà)場(chǎng)景/混合場(chǎng)景:lastVSyncTS + realPeriod將動(dòng)畫(huà)向前推進(jìn);將結(jié)果比較now確定是否已發(fā)生掉幀,若掉幀則使用realVSyncTS + realPeriod。
非動(dòng)畫(huà)場(chǎng)景:realVSyncTS + realPeriod使用下一個(gè)真實(shí)的VSync時(shí)間戳;將結(jié)果比較historyTS確保時(shí)間戳不發(fā)生回退。若小于或相等,則使用historyTS + realPeriod。

D-VSync 虛擬時(shí)間戳模塊
此外,每幀在計(jì)算完虛擬時(shí)間戳后會(huì)用realVSyncTS 和 realPeriod來(lái)進(jìn)行時(shí)間戳校準(zhǔn)邏輯。虛擬的VSync時(shí)間戳expectedVSyncTS會(huì)被校準(zhǔn)為realVSyncTS + k * realPeriod,其中k是整數(shù)。該校準(zhǔn)邏輯避免了動(dòng)畫(huà)期間、非動(dòng)畫(huà)但是依賴(lài)于historyTS由堆積的情況下造成的時(shí)間戳誤差累積。
D-VSync的控制器。控制器管理D-VSync預(yù)執(zhí)行上限和D-VSync的開(kāi)啟與關(guān)閉(即 D-VSync 與 VSync 的實(shí)時(shí)動(dòng)態(tài)切換,與靜態(tài)系統(tǒng)配置)。當(dāng)VSync -> D-VSync動(dòng)態(tài)切換時(shí),會(huì)記錄pendingRNVInVSync,在D-VSync模式下,第一個(gè)真實(shí)的VSync信號(hào)觸發(fā)時(shí)發(fā)送事件,之后的RNV會(huì)直接觸發(fā)事件(即D-VSync的堆積)。當(dāng)D-VSync -> VSync 動(dòng)態(tài)切換時(shí):D-VSync有堆積的幀,在切換回VSync模式后會(huì)跳過(guò)已經(jīng)有堆積的幀的時(shí)間戳,保證不會(huì)產(chǎn)生時(shí)間戳回退/幀的重復(fù)(當(dāng)前僅在有連續(xù)5幀空幀時(shí)會(huì)發(fā)生切換,減少能耗)。
此外,控制器還能夠確保RNV不會(huì)互相覆蓋、會(huì)被distributor主線程及時(shí)處理的同步邏輯,并且能夠統(tǒng)計(jì)空幀數(shù)量,標(biāo)記是否在屬性動(dòng)畫(huà)期間等。

D-VSync控制器
未來(lái),在AI技術(shù)和智能終端設(shè)備快速發(fā)展的背景下,下一代智能終端操作系統(tǒng)的渲染服務(wù)的性能表現(xiàn)將至關(guān)重要。面對(duì)高端精致、設(shè)備升級(jí)等挑戰(zhàn),如何構(gòu)建并行的、動(dòng)態(tài)可擴(kuò)展的、負(fù)載均衡的、端到端運(yùn)行時(shí)可預(yù)測(cè)的渲染與視窗服務(wù)?如何通過(guò)多設(shè)備協(xié)同渲染能力、空間計(jì)算與3D視窗能力等進(jìn)一步提升用戶(hù)體驗(yàn)?期待與大家共同探討。
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7402瀏覽量
129313 -
智能終端
+關(guān)注
關(guān)注
6文章
1020瀏覽量
36520 -
OpenHarmony
+關(guān)注
關(guān)注
33文章
3952瀏覽量
21104
發(fā)布評(píng)論請(qǐng)先 登錄
帝奧微第三屆經(jīng)銷(xiāo)商大會(huì)圓滿舉行
普華基礎(chǔ)軟件亮相第三屆英飛凌汽車(chē)創(chuàng)新峰會(huì)
華為張磊出席第三屆網(wǎng)絡(luò)創(chuàng)新發(fā)展大會(huì)
第三屆引望車(chē)聯(lián)網(wǎng)安全大會(huì)圓滿結(jié)束
第三屆開(kāi)放原子大賽vivo藍(lán)河操作系統(tǒng)創(chuàng)新賽正式啟動(dòng)
第三屆開(kāi)放原子大賽正式啟動(dòng)
奇異摩爾出席第三屆芯粒開(kāi)發(fā)者大會(huì)AI芯片與系統(tǒng)分論壇
行芯科技亮相第三屆芯粒開(kāi)發(fā)者大會(huì)
第三屆大會(huì)回顧第6期 | HarmonyOS NEXT原生智能,助力應(yīng)用低成本生而智能
第三屆大會(huì)回顧第5期 | OpenHarmony內(nèi)核實(shí)時(shí)性探索
華為智能光伏第三屆全球安裝商大會(huì)圓滿收官
格創(chuàng)東智亮相第三屆軟件創(chuàng)新發(fā)展大會(huì)
第三屆大會(huì)回顧第1期 OpenHarmony下一代通信互聯(lián)技術(shù)演進(jìn)以及通途極簡(jiǎn)協(xié)議構(gòu)建策略
第三屆OpenHarmony大會(huì)回顧第8期 | 面向下一代智能終端操作系統(tǒng)的渲染服務(wù)研究與挑戰(zhàn)
評(píng)論