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我們可以單步分析每一條繪圖指令垦巴。
執(zhí)行完指令后媳搪,選擇錄制好的skp文件,點擊“UPLOAD”骤宣,如下圖所示秦爆,可以看到每條繪圖指令的執(zhí)行情況。
可以很清楚的看到冗余渲染憔披,有針對性的進行優(yōu)化等限,例如前面的圖形被后面的背景板擋住了,我們清除后面的背景板芬膝,用命令表達如下圖望门。
5、容易成為性能瓶頸的Skia函數(shù)
saveLayer:每調用一次需要在GPU中分配一塊新的繪圖緩沖區(qū)锰霜,并告訴GPU筹误,切換繪圖目標,這個過程非常耗時癣缅,尤其在老的設備上。
clipPath:一旦調用岁经,每一個繪圖指令都需要和clipPath做交互
如果在Flutter的App中,盡量減少上述兩個函數(shù)的調用,性能能夠提升2倍以上
例如下面的skp慨仿,優(yōu)化前需要13ms,使用saveLayer多達35次
優(yōu)化后只需要8s-10ms的渲染時間景描,調用了一次saveLayer
Skia的渲染過程是異步的堰乔,先預處理,然后統(tǒng)一渲染侠驯,所以上面所展示的具體秒數(shù)只是預處理時間抡秆,具體消耗巨大性能是在SkCanvas::Flush里,所以如果saveLayer次數(shù)增加對于Flutter的APP的性能影響非常大吟策。
這些消耗性能的函數(shù)會出現(xiàn)在哪里儒士?
6、總結:如何處理Flutter性能問題
a檩坚、捕捉timeline(flutter --profile --trace-skia...)
b着撩、捕捉skp(flutter screenshot --type=skia)
c、給谷歌發(fā)郵件