深入了解 Flutter 的高性能圖形渲染

1武花、Flutter直接運行在Dart上凄吏,而Dart可以直接集成Skia短纵,同步升級更方便带污,其他的APP開發(fā)方式需要先通過安卓框架才能調用到Skia,Dart明顯比其他開發(fā)方式少了一步香到,這里也是性能優(yōu)于其他應用的核心原因所在鱼冀,另外报破,如果想要升級或者用最新的Skia版本,需要先升級安卓版本千绪,這個就非常被動了充易,Dart卻可以非常便捷的升級最新版本的Skia。一張圖看到Skia在其中的重要作用荸型,自己體會盹靴。

調用方式對比圖

2、Skia開源圖形引擎,隸屬于Google的一個項目瑞妇,用于Chrome,Android稿静,F(xiàn)irefox,Sublime踪宠,Adobe...

3自赔、FLutter直接調用Skia擁有媲美原生的高性能,16ms60幀算是一個標準柳琢,如果離這個標準差的越遠绍妨,則看到的繪圖效果就會卡頓或不連續(xù)。下面對Flutter調用Skia的情況進行分析:

flutter run --profile --trace-skia

輸入命令


命令展示界面

打開提示地址:http://127.0.0.1:53649

時間軸

可以放大process中幀數(shù)顯示柬脸,可以看到Skia函數(shù)的調用情況他去,選中某些函數(shù),可以看到調用的函數(shù)個數(shù)以及函數(shù)調用花費的時間

4倒堕、flutter screenshot捕捉SkPicture,可以單步檢測每一條繪圖指令

flutter screenshot --type=skia --obervatory-port=<port>

Fluter將一幀錄制成SkPicture(skp)送給Skia進行渲染灾测。捕捉skp,并利用debugger.skia.org我們可以單步分析每一條繪圖指令垦巴。

錄制skp

執(zhí)行完指令后媳搪,選擇錄制好的skp文件,點擊“UPLOAD”骤宣,如下圖所示秦爆,可以看到每條繪圖指令的執(zhí)行情況。

skp渲染


調用函數(shù)圖

可以很清楚的看到冗余渲染憔披,有針對性的進行優(yōu)化等限,例如前面的圖形被后面的背景板擋住了,我們清除后面的背景板芬膝,用命令表達如下圖望门。

清除多余幀數(shù)


改進后的界面
改進后調用函數(shù)圖

5、容易成為性能瓶頸的Skia函數(shù)

saveLayer:每調用一次需要在GPU中分配一塊新的繪圖緩沖區(qū)锰霜,并告訴GPU筹误,切換繪圖目標,這個過程非常耗時癣缅,尤其在老的設備上。

clipPath:一旦調用岁经,每一個繪圖指令都需要和clipPath做交互

如果在Flutter的App中,盡量減少上述兩個函數(shù)的調用,性能能夠提升2倍以上

例如下面的skp慨仿,優(yōu)化前需要13ms,使用saveLayer多達35次

優(yōu)化前
優(yōu)化前saveLayer具體調用

優(yōu)化后只需要8s-10ms的渲染時間景描,調用了一次saveLayer

優(yōu)化后
優(yōu)化后調用次數(shù)

Skia的渲染過程是異步的堰乔,先預處理,然后統(tǒng)一渲染侠驯,所以上面所展示的具體秒數(shù)只是預處理時間抡秆,具體消耗巨大性能是在SkCanvas::Flush里,所以如果saveLayer次數(shù)增加對于Flutter的APP的性能影響非常大吟策。

SkCanvas::Flush

這些消耗性能的函數(shù)會出現(xiàn)在哪里儒士?

消耗性能的地方

6、總結:如何處理Flutter性能問題

a檩坚、捕捉timeline(flutter --profile --trace-skia...)

b着撩、捕捉skp(flutter screenshot --type=skia)

c、給谷歌發(fā)郵件

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匾委,一起剝皮案震驚了整個濱河市拖叙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赂乐,老刑警劉巖薯鳍,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挨措,居然都是意外死亡挖滤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門浅役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斩松,“玉大人,你說我怎么就攤上這事担租≡颐瘢” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵奋救,是天一觀的道長岭参。 經(jīng)常有香客問我,道長尝艘,這世上最難降的妖魔是什么演侯? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮背亥,結果婚禮上秒际,老公的妹妹穿的比我還像新娘悬赏。我一直安慰自己,他們只是感情好娄徊,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布闽颇。 她就那樣靜靜地躺著,像睡著了一般寄锐。 火紅的嫁衣襯著肌膚如雪兵多。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天橄仆,我揣著相機與錄音剩膘,去河邊找鬼。 笑死盆顾,一個胖子當著我的面吹牛怠褐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播您宪,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼奈懒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚕涤?” 一聲冷哼從身側響起筐赔,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揖铜,沒想到半個月后茴丰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡天吓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年贿肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龄寞。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡汰规,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出物邑,到底是詐尸還是另有隱情溜哮,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布色解,位于F島的核電站茂嗓,受9級特大地震影響,放射性物質發(fā)生泄漏科阎。R本人自食惡果不足惜述吸,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锣笨。 院中可真熱鬧蝌矛,春花似錦道批、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茅逮,卻和暖如春噪伊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氮唯。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姨伟,地道東北人惩琉。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像夺荒,于是被迫代替她去往敵國和親瞒渠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353