1、Flutter 渲染原理
Flutter框架包含Flutter Framework(Dart)、Flutter Engine(C/C++)、Embedber(Android/iOS平臺層)。其中:
Flutter Framework(Dart):實現了一套基礎庫, 用于處理動畫、繪圖和手勢,并且基于繪圖封裝了一套 UI組件庫,然后根據 Material 和Cupertino兩種視覺風格區分開來。這個純 Dart實現的 SDK被封裝為了一個叫作 dart:ui的 Dart庫。我們在使用 Flutter寫 App的時候,直接導入這個庫即可使用組件等功能。
Flutter Engine(C/C++):包括 Skia引擎、Dart運行時、文字排版引擎等。它是 Dart的一個運行時,它可以以 JIT 或者 AOT的模式運行 Dart代碼。這個運行時還控制著 VSync信號的傳遞、GPU數據的填充等,并且還負責把客戶端的事件傳遞到運行時中的代碼。
渲染流程:GPU的VSync信號同步給到UI線程,UI線程使用Dart來構建抽象的視圖結構(這里是Framework層的工作),繪制好的抽象視圖數據結構在GPU線程中進行圖層合成(在Flutter Engine層的工作),然后提供給Skia引擎渲染為GPU數據,最后通過OpenGL或者 Vulkan提供給 GPU,GPU渲染好傳遞給顯示器顯示。
UI界面繪圖流程
用戶輸入是驅動視圖更新的信號,如滑動屏幕等。然后會觸發動畫進度更新,框架開始build抽象視圖數據,在之后,視圖會進行布局、繪制、合成(渲染過程的三個步驟),最后進行光柵化處理把數據生成一個個真正的像素填充數據。在Flutter中,構建視圖數據結構、布局、繪制、合成、與Engine的數據同步和通信放到了Framework層,而光柵化則放在了Engine層中。