Flutter開發(fā)線程模型學(xué)習(xí)

基礎(chǔ)概念預(yù)學(xué)習(xí)

GPU 紋理

紋理映射(Texture Mapping)是繪制復(fù)雜場景真實感圖形最為常用的技術(shù)蒸播,它可以通過紋理來表達(dá)表面豐富的幾何細(xì)節(jié)和光照細(xì)節(jié)猬错,甚至可以通過映射后紋理的變形來表達(dá)物體的幾何形狀:在未增加物體多邊形數(shù)情況下,增強(qiáng)了物體的真實感效果

感覺就是用來表達(dá)圖形的一種表達(dá)方式补君,具體的我不知道

skia

skia是個2D向量圖形處理函數(shù)庫,包含字型俩滥、坐標(biāo)轉(zhuǎn)換,以及點陣圖都有高效能且簡潔的表現(xiàn)画切。不僅用于Google Chrome瀏覽器宜岛,新興的Android開放手機(jī)平臺也采用skia作為繪圖處理长踊,搭配OpenGL/ES與特定的硬件特征,強(qiáng)化顯示的效果

應(yīng)該是一個函數(shù)庫萍倡,對圖形數(shù)據(jù)預(yù)處理身弊,可能轉(zhuǎn)換為GPU識別的指令啥的,再通過GL傳遞給GPU指令

Compositor

Compositor 將來自各個應(yīng)用的 surface(s) 合成為一幀

排版列敲,感覺是將多個應(yīng)用的畫面出現(xiàn)在同一個畫面上阱佛,這里做排版使用

GPU資源

GPU可以訪問的數(shù)據(jù)我們先叫他們GPU資源,資源分為緩沖和各種紋理

Flutter 的架構(gòu)

image.png

Flutter 主要分為三個核心模塊
Framework:基于 Dart 語言構(gòu)建的 framework,包括了動畫以及各種組件
Engine:基于 C/C++ 構(gòu)建的引擎戴而,包括了 Skia 和 DartVM, 以及在不同平臺實現(xiàn)的 shell 層凑术,Engine 通過封裝好的 Embedder API 去調(diào)用不同平臺的能力

Embedder:嵌入層,將 Flutter 嵌入到各個平臺上所意。Embedder 負(fù)責(zé)范圍包括原生平臺插件淮逊、線程管理、事件循環(huán)等扶踊。

Flutter Engine 線程模型

image.png

UI Task Runner 是執(zhí)行 Dart root isolate 的地方壮莹,root isolate 稍微特殊一點,它綁定了很多函數(shù)姻檀,這個 isolate 也就是運行應(yīng)用所有 dart 代碼的地方,綁定的函數(shù)可以提交渲染幀給 Engine涝滴,供 Engine 去渲染:

  1. Root isolate 通知 Flutter Engine 有幀需要渲染
  2. Flutter Engine 通知平臺绣版,需要在下一個 vsync 的時候得到通知
  3. 平臺等待下一個vsync
  4. 對 Widgets進(jìn)行布局操作,并生成頁面的顯示信息的描述歼疮,并提交給 Engine
image.png

GPU Task Runner 主要用于執(zhí)行設(shè)備 GPU 的指令杂抽。UI Task Runner 創(chuàng)建的 Layer Tree 是跨平臺的,它不關(guān)心到底由誰來完成繪制韩脏。GPU Task Runner 負(fù)責(zé)將 Layer Tree 提供的信息轉(zhuǎn)化為平臺可執(zhí)行的GPU指令缩麸。GPU Task Runner 同時負(fù)責(zé)繪制所需要的GPU資源的管理。資源主要包括平臺 Framebuffer赡矢,Surface杭朱,Texture 和 Buffers等。

我的理解
  • Flutter 代碼是運行在root isolate吹散,UI Task Runner之中弧械,如果新開isolate,則是運行中Dart VM線程之中,只能做一些計算任務(wù)
  • Flutter運行開始會生成Layer Tree,并告訴Engine,Engin通知平臺空民,需要Vsync信號,平臺GPU得到Vsync,UI Thread在Dart層生成layer tree
  • Engine里有Skia ,VM,Compositor等處理后刃唐,通過GL操作GPU生成屏幕數(shù)據(jù)
  • 嵌入層提供了各種線程,四種TaskRunner,原生插件銜接工作等

參考資料

Flutter Engine 線程模型,重點
Flutter/Dart中的異步編程之Future
flutter-異步編程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市画饥,隨后出現(xiàn)的幾起案子衔瓮,更是在濱河造成了極大的恐慌,老刑警劉巖抖甘,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件热鞍,死亡現(xiàn)場離奇詭異,居然都是意外死亡单山,警方通過查閱死者的電腦和手機(jī)碍现,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來米奸,“玉大人昼接,你說我怎么就攤上這事°参” “怎么了慢睡?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铡溪。 經(jīng)常有香客問我漂辐,道長,這世上最難降的妖魔是什么棕硫? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任髓涯,我火速辦了婚禮,結(jié)果婚禮上哈扮,老公的妹妹穿的比我還像新娘纬纪。我一直安慰自己,他們只是感情好滑肉,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布包各。 她就那樣靜靜地躺著,像睡著了一般靶庙。 火紅的嫁衣襯著肌膚如雪问畅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天六荒,我揣著相機(jī)與錄音护姆,去河邊找鬼。 笑死掏击,一個胖子當(dāng)著我的面吹牛签则,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铐料,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼渐裂,長吁一口氣:“原來是場噩夢啊……” “哼豺旬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柒凉,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤族阅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膝捞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坦刀,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年蔬咬,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲤遥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡林艘,死狀恐怖盖奈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狐援,我是刑警寧澤钢坦,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站啥酱,受9級特大地震影響爹凹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镶殷,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一禾酱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绘趋,春花似錦宇植、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忙上。三九已至拷呆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疫粥,已是汗流浹背茬斧。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留梗逮,地道東北人项秉。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像慷彤,于是被迫代替她去往敵國和親娄蔼。 傳聞我的和親對象是個殘疾皇子怖喻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容