1弄贿、Flutter 渲染原理
Flutter框架包含F(xiàn)lutter Framework(Dart)茫打、Flutter Engine(C/C++)混萝、Embedber(Android/iOS平臺層)。其中:
Flutter Framework(Dart):實現(xiàn)了一套基礎庫逾冬, 用于處理動畫黍聂、繪圖和手勢躺苦,并且基于繪圖封裝了一套 UI組件庫,然后根據(jù) Material 和Cupertino兩種視覺風格區(qū)分開來产还。這個純 Dart實現(xiàn)的 SDK被封裝為了一個叫作 dart:ui的 Dart庫匹厘。我們在使用 Flutter寫 App的時候,直接導入這個庫即可使用組件等功能脐区。
Flutter Engine(C/C++):包括 Skia引擎愈诚、Dart運行時、文字排版引擎等牛隅。它是 Dart的一個運行時炕柔,它可以以 JIT 或者 AOT的模式運行 Dart代碼。這個運行時還控制著 VSync信號的傳遞媒佣、GPU數(shù)據(jù)的填充等匕累,并且還負責把客戶端的事件傳遞到運行時中的代碼。
渲染流程:GPU的VSync信號同步給到UI線程默伍,UI線程使用Dart來構建抽象的視圖結構(這里是Framework層的工作)欢嘿,繪制好的抽象視圖數(shù)據(jù)結構在GPU線程中進行圖層合成(在Flutter Engine層的工作),然后提供給Skia引擎渲染為GPU數(shù)據(jù)也糊,最后通過OpenGL或者 Vulkan提供給 GPU炼蹦,GPU渲染好傳遞給顯示器顯示。
UI界面繪圖流程
用戶輸入是驅動視圖更新的信號狸剃,如滑動屏幕等掐隐。然后會觸發(fā)動畫進度更新,框架開始build抽象視圖數(shù)據(jù)钞馁,在之后虑省,視圖會進行布局、繪制指攒、合成(渲染過程的三個步驟)慷妙,最后進行光柵化處理把數(shù)據(jù)生成一個個真正的像素填充數(shù)據(jù)。在Flutter中允悦,構建視圖數(shù)據(jù)結構、布局虑啤、繪制隙弛、合成、與Engine的數(shù)據(jù)同步和通信放到了Framework層狞山,而光柵化則放在了Engine層中全闷。