作者:huangran,圖形影像技術專家
應用開發以後無法知道效能瓶頸的根因是什麼?滑動卡頓、白塊產生的原因是什麼?程式碼寫完之後,不知道如何優化讓它表現地更好……
我們發現,如今測試人員的需求已經不只是停留在應用層面的測試資料了,而是需要資料背後的根因。但業界的圖形棧測試,絕大部分都只提供應用層面的資料,有一部分可以深入系統層分析,但仍無法觸及硬體這一層的測試分析。
HarmonyOS圖形棧測試技術,不僅可以深入系統層分析,幫助開發測試者得到資料背後的根因,還能觸達硬體層的測試分析。那它是如何做到的呢?讓我們一起揭祕HarmonyOS圖形棧測試技術。
一、HarmonyOS 圖形棧全貌
眾所周知,圖形是作業系統裡面非常核心的模組,和核心、編譯器等模組一起作為作業系統的底層基座,不僅如此,它還是體現競爭力的關鍵模組。但因為圖形棧非常複雜,所以需要構築一套完整的測試技術才可以保證其質量和競爭力。
圖1 圖形棧整體架構
如圖1所示,左邊部分是HarmonyOS圖形棧的全貌,其中最上面一層是渲染前端,包括2D類應用、3D類應用和重負載的遊戲視訊類應用,這一層與右邊測試部分的應用層對應,包括體驗KPI和負載模型能力。
中間一層則是我們圖形棧作業系統的核心能力,如元件、JS 引擎、ArkUI的三棵樹(Component樹,Element樹和Render樹)、自研2D引擎、自研3D引擎、動效、手勢、佈局等。這一層與右邊測試部分的系統層對應,包括圖形棧關鍵耗時函式解析和圖形棧優化方案可見的能力。
最下面一層則是HarmonyOS 1+8+N裝置需要橫跨的兩個部分:作業系統和硬體裝置,需要對其進行相容支援,這一層與右邊測試部分的硬體層對應,包括跨系統對比測試能力、跨裝置測試能力和硬體SOC分析能力。
我們圖形棧的測試能力不只是停留在應用層的體驗KPI,它可以將體驗KPI指標進一步分解成系統級別的耗時函式、以及硬體級別的SOC分析能力,並最終提供優化方案(後文將舉例說明)。
瞭解完整體架構後,我們再進一從2D圖形棧應用和3D圖形棧應用兩個角度去了解圖形棧測試技術:
二、2D圖形棧應用
圖2 是HarmonyOS ArkUI開發框架,對應右邊的三層結構,最底層是介面層測試,中間層是元件層測試,最上層是應用層測試。接下來我們會給大家重點介紹負載模型、系統分析案例和應用分析案例。
圖2 ArkUI開發框架
對於一個新的開發框架,在沒有海量生態的應用進來之前我們是如何驗證這個平臺的測試能力的?
我們最初設想的是構建足夠多的場景來覆蓋和驗證整個ArkUI框架,比如三棵樹(Element樹、Component樹和Render樹)、佈局/動效、手勢、2D渲染引擎。但因為不存在窮舉的方式去覆蓋所有業務,所以我們提出了負載模型的概念。
2D負載模型到底是什麼?
我們選取了Top200的應用,對應用進行基於場景的分類,並提取特徵, 然後形成了8大類常見使用者場景(圖3),如購物類、相簿類、視訊類等,同時也抽象出6大類負載,比如資源載入、圖層疊加、負載佈局 。
圖3 負載場景及型別
同時我們還結合了Beta與商用的效能問題單和使用者體驗反饋,來逆向幫助我們補充可能遺漏的負載,比如系統I/O負載壓力。這樣構建的負載模型有兩個作用,不僅可以測試HarmonyOS圖形棧架構,還可以為作為HarmonyOS應用樣例,供開發者參考。
由於裝置硬體能力的差異性,負載模型實際上是引數可調節的。比如對於IP Camera這類沒有GPU的裝置,我們無法給它加很強的負載,它的解析度較小、物理尺寸也較小,如果用手機的解析度給它渲染這是沒有意義的。所以我們將負載模型構建成一個引數可調模型,這樣它就會基於測試者的硬體裝置來選擇不同的資源做測試,非常靈活便捷。
如前文所說,我們的圖形棧測試能力不只是停留在應用層,而是要進入到系統層和硬體層。接下來舉兩個例子讓大家瞭解一下我們在系統和硬體層面上如何做分析。
案例一:系統分析案例
我們先舉一個跟硬體相關的例子,比如“多個應用連續頁面切換”的場景,這時候可能產生多應用切換的時延、丟幀等問題。
如圖4所示,假如我們定義丟幀率的KPI為0.5%,但是經過測試達到了3%,丟幀指標超標,那麼我們將進一步對硬體的CPU佔用率和I/O壓力進行資料統計。拿到統計資料之後,平臺還會告訴你具體是哪一個程式產生了CPU和I/O的壓力,並給出優化建議。
圖4 系統分析和優化建議
案例二:應用分析案例
接下來我們舉個應用內的效能分析案例,比如相簿應用的圖片刪除場景,也可能產生丟幀和時延問題。
如圖5所示,假設我們定義時延指標為100ms,經過測試發現時延達到1048ms,時延超標,然後我們將ArkUI圖形棧函式展開,得到耗時佔比,發現在系統層面上FlushBuild()和FlushLayout()耗時較長,然後平臺會基於這些資料進行分析,找到可能原因,並給出優化建議,以幫助開發者明確下一步優化方向和動作。
圖5 應用分析和優化建議
三、3D圖形棧應用
圖6是3D圖形棧的整體架構,它包括了兩部分,一部分是右側的自研3D引擎,大家可以基於3D自研引擎進行3D應用的開發,比如3D動效、AR應用、3D桌布等。
圖6左邊的部分是SDK,我們提供了一系列API,主要是針對大型的3D遊戲,因為大型的3D遊戲對於系統和SOC的壓力較大,這些API可以幫助大型遊戲更好地使用系統和硬體,比如GTX、System Cache、畫質增強等SDK介面。
接下來我們會為大家重點介紹3D應用分析基礎、特性拆分和分析方法和3D桌布調優案例。
圖6 “3D圖形棧”
1. 3D應用分析基礎
3D應用對於效能功耗的壓力會更大,所以更需要底層SOC以及系統的分析能力。其實無論是3D自研引擎,還是SDK,都可以通過將負載進行特性拆分,然後進行細粒度分析。
如圖7所示,場景A關鍵幀就是由渲染特性HDR、Bloom等粒子特效組成,再加上CPU負載就形成一個關鍵幀,這些關鍵幀連續起來就是3D場景。通過這些特性進一步呼叫到硬體邏輯的相關特性,比如ALU、Texture壓力,最終通過DDK呼叫到硬體層執行。
圖7 “3D應用分析基礎”
有了以上分析基礎後,我們再來看一下特性拆分和分析方法。
2. 特性拆分和分析方法
如圖8所示,這幀渲染畫面是由Particle、Shadow map、Point light、Bloom等特效組成,如果GPU的負載較重,效能出現瓶頸,如何找到問題的根因呢?我們把這一幀的GLES的指令擷取到,並將每一個單特性進行分拆,然後看每一個單特性(如Particle)對硬體造成的壓力。特性拆完後再結合GPU counters來幫助我們定位根因。
圖8 特性拆分
如何使用GPU counters來定位問題呢?如圖9所示,場景C提示fragment cycles比較重,所以要求開發者減少畫素渲染。而對於場景A,不僅Fragment cycles很重,而memory R/W以及Vertex cycles都比較重,那麼就要針對這幾個瓶頸進行優化。
圖9 GPU Counters
3D桌布調優案例
我們舉一個3D桌布調優的案例給大家展示如何找到效能瓶頸。
圖10 “3D桌布調優”
如圖10所示,用Blender製作3D桌布模型,再用我們的自研引擎增加渲染效果,最終形成一個有光照、反射的畫面。
我們將3D桌布畫面進行特性剝離,再看特性剝離後每一個單特性對硬體造成的壓力,資料如表1所示。發現表面細分(頂點50W)+點光(1術)+反射面的歸一化電流達到了1921.33,效能出現較大惡化,如果使用一般的測試工具,就只能到這一步了。
但我們的工具可以幫助大家進一步分析。我們結合表2的Counters來幫助大家定位問題。
在表2的第一、二組資料可以看到,將反射面減少,會發現“shadercycles”從1910降低到1190,這提示開發者“shader”寫的過於複雜了。
我們進一步將頂點數從50W減少到5W,會發現“VertexComputeCycles”從459降低到93.2,說明“VertexComputeCycle”就是一個需要優化的瓶頸。
通過這樣的分析方式,就可以逐步定位到問題,並找到優化的方向,從而達成效能功耗和畫質的平衡。
四、圖形棧工具
我們前文介紹的2D和3D圖形應用的分析優化的能力都整合於HarmonyOS圖形棧的測試平臺——DevEco Testing。
圖11 DevEco Testing-圖形棧測試分析能力
如圖11所示,DevEco Testing是一個“三端+自動化”的結構,其中三端包括裝置端、PC端和雲端,而自動化就是可以使2D或3D應用的做到自動化測試,同時還具備以下測試能力:
- 效能、功耗、熱的採集和分析
- 遊戲測試自動化能力
- 大資料統計和分析
- 增強型服務:獨立APK、幀採集回放、畫質檢測、多路測試等
在以上測試能力中,有3個增強型服務測試能力是我們的特色:
(1)獨立的APK測試能力
如圖12所示,該工具支援脫離PC的方式進行測試,可直接在被測裝置上部署工具,並且在進行裝置應用操作時,可以實時展示資料。比如出現幀率的巨大下降時,可以直接在螢幕上展示資料並提供測試的報告,非常直觀和便捷。
圖12靈活的獨立APK測試
(2)分散式渲染多路測試
該工具適用於HarmonyOS分散式多裝置場景,可以繫結多個裝置(如手機+筆記本),並且該工具平臺可以把這些裝置的測試報告進行繫結,形成完整的測試報告。
(3)支援單幀或多幀的採集和回放功能
如圖13所示,該工具可以採集一幀或多幀API Trace結果,然後進行回放,再結合GPU Counters進行定位(如前文桌布調優案例所述)。
圖13 單幀或多幀採集回放
五、結語
HarmonyOS圖形棧是整個HarmonyOS作業系統的基座,包括ArkUI 2D和3D部分。圖形棧的測試是一個分層介面,包括應用層、系統層以及硬體層,可以幫助開發測試者從使用者體驗指標到深入瞭解系統和硬體發生了什麼。
這些測試服務能力整合DevEco Testing下的圖形影像測試工具,歡迎大家下載使用。
掃碼新增開發者小助手微信
獲取更多HarmonyOS開發資源和開發者活動資訊