公開日: 2020年7月31日 - 6 min read
高速性はFlutterの重要な柱です。この記事では、Flutterコミュニティの人々が2019年後半から実装しているパフォーマンス改善を紹介します。
2020年のパフォーマンスに関するヘルプがあれば、今後の記事で取り上げます。これをFlutterコミュニティの皆さんと共有することで、これを成し遂げる手助けをしようという気持ちになることを願っています!
第4四半期
定量的改善
大きなイメージを素早くスクロールする際のメモリを70%削減。
大きなイメージを素早くスクロールする際のメモリを70%削減
文:liyuqian、 dnfield、 chinmaygarde
- PR 14265: IOスレッドのクリーンアップ IOスレッドのクリーンアップ GrContext
- PR 46184: 大きなイメージを高速にスクロールするためのメモリテスト
- ダッシュボード:高速化_scroll_large_images__memory diff-median70%削減%
- 問題 19558: IO スレッド GrContext メモリのクリーンアップが必要
シンプルなiOSアニメーションのCPU/GPU使用率を40%削減。
投稿者: flar, liyuqian, hixie, chinmaygarde
- PR 14104: 画面のリードバックをサポートするために、より単純な画面外条件をやり直しました。
- PR 13976:必要に応じてオフスクリーン・サーフェスの使用を動的に決定
- PR 31865: CPU/GPU/power の使用率が高い iPhone 6 でのシンプルなアニメーション
- 40%シンプルなアニメーションの削減_perf_iphonexs cpu_percentage, gpu_percentage
小型車性能加速度の41
投稿者:Garyqian, Li yuqian, Justinmc
- PR 46720: _caretPrototype を渡してキャッシュミスを防止します。
- PR 46720:フレーム構築時間が90パーセンタイルで41パーセント短縮
- 修正された問題 24522:カレットのパフォーマンスの低下とフレームあたりのGPU時間の長さ
ラスターキャッシュのスロットリングを修正することにより、リストのスクロールが10%高速化されました。
投稿者:Li yuqian, chinmaygarde, flar, cyanglaz, zsunkun
- PR 31865: CPU/GPU/power の使用率が高い iPhone 6 でのシンプルなアニメーション
- PR 13710: イメージラスターキャッシュのスロットリングの修正
- PR 45050: イメージラスターキャッシュへのパフォーマンステストの追加
- ブロッカーの問題を修正しました。PR 13710でリストのスクロールがスムーズでない問題を修正しました。
キャッシュ・ベンチマークのロード時間が37倍高速化
投稿者:caseyhillers, tvolkert, digiter, jonahwilliams.
APKのビルドが2.3倍速くなりました。
投稿者:Jonahwilliams, blasten, zanderso, Xster.
- PR 44534: gen_sapshot の同時実行による APK のビルド・パフォーマンスの改善
- ターゲットプラットフォームandroid-arm、android-arm64、android-x64用のAPKバージョンビルドの2.3倍高速化
Flutterエンジンのコミットごとに、+103のパフォーマンスメトリクスのログを記録。
投稿者:liyuqian, digiter, keyonghan, godofredoc, cbracken
アプリケーションサイズを20%削減
投稿者: mraleph, alexmarkov, rmacnak-google, mkustermann, sstrickl, aartbik.
- %来自于StackMapsリフトPCオフセット
- StackMapsのさらなる圧縮により2.58%。
- 可能であれば、Canonicalize CompressedStackMapsのペイロードから1%。
- 2%、digiter開始
- 0.3%keyonghanことから始めます。
- godofredocすることで1%削減
- cbrackenしたことによる6%。
- 各関数のプロローグで1.2%ではなく、コールスタブ中にCSPを調整。
- mraleph1alexmarkov
- 2.5パーセント
- %来自デッドコードの除去
Dart FFIのパフォーマンスが108倍に向上
投稿者:,mkustermann,sjindel,alexmarkov.
タイトなコードで10~15%のパフォーマンス向上
投稿者:Aartbik, , mraleph.
- Gerrit 117200: BCEのループ解析と改善
- golem armv7とTypedData Benchによる10-15%の性能改善:
新しいインクリメンタル・シリアライザーでFlutterのテストを2.2倍高速化
寄稿:Jensjoha、Alexmarkov。
- Gerrit 121121: デフォルトでインクリメンタル・シーケンサーを有効化
- チャタリングテスト」で2.2倍加速
Dart VM JITにインライン・ヒントを提供することで、カーネル・バイナリのシリアライズを10%高速化
文:ARM64R22 ブロックは NullObject() を保持するために使用されます。, ジョンニウィンター
重い非同期コードのパフォーマンスが30%向上
その他の改善点
iOSでPlatformViewを使用した際のメモリーリークを修正しました。
iOSでアニメーションを再生する際のメモリーリークを修正
より多くのiOSのメモリリークを修正
flutter.devのmkustermannページの改修を開始し、アプリサイズの測定方法を追加しました。
最初のフレーム待機ロジックと計測に関する問題を修正
- [PR 37192: Reland "Fixing first-frame logic in tracking and driving"]
- 問題47108を修正:iOSでアニメーションを再生する際のメモリーリーク
DevToolsは、非同期および記録トラッキングをサポートする完全なタイムラインモードを追加します。
IntelliJプラグインが120FPSサポートを修正
ByteDanceのおかげで、タイムラインのトラッキングの多くが改善されました!
- Gerrit 128200: [timeline] systrace は vm イベントをサポートします。
- Johnniwinther
- PR 14323: systrace でイベントを記録するときに API ストリームが見つからないのを修正しました。
- PR 14521: パブリッシュモードでサポートタイムラインを有効にできます。
- MKustermann
- Mraleph
- Gerrit 131360: iOS プラットフォームのトレースへのタイムライン変換のサポート
- PR 16520: エンドレス・トレース・バッファのサポート
- PlatformViewの使用[IOS]メモリリーク時
第3四半期
定量的改善
矩形と点の変換を1.5~5倍高速化
投稿者:flar,yjbanov,dnfield
- PR37275.matrix_utilsのtransformRectとtransformPointメソッドの最適化。matrix_utilsのtransformRectメソッドとtransformPointメソッドを最適化します。
- で5.3倍速い
- で1.5倍速い
iPhone X/Xsでスクロールすると、N/2-1の方がフレームを見逃しません。
投稿者:Li yuqian、 chinmaygarde、 gaaclarke
- github.com/flu
- 実際、この修正では、平均N/10フレームが見逃されます。
- 最も投票数の多かった問題のひとつを修正:問題31086:不適切な入力イベント配信によるiPhone X、Xsデバイスでのスクロールの大幅なパフォーマンス低下
パラレル初期化により、エンジンの始動および停止速度が15%向上します。
投稿者:Gaaclarke、 、 Li yuqian。
起動は14.57ms高速化し、シェーダーのウォームアップにかかるメモリ使用量は8MB減少しました。
投稿者:Gaaclarke, Li yuqian, dnfield
- PR 36482: 100x100 のサーフェスにのみ描画するとシェーダのウォームアップが速くなります。
- ピクセルの読み取り/変換時の起動時間を14.57ms短縮
- 開始中間値メモリを8MB節約(39220KB→31184KB
コードサイズを1.02%~8.04%削減。
投稿者:, aartbik, rmacnak-google, jensjoha, alexmarkov, mkustermann
- armv8アニメーション_bench_instructions_size ,-8.04%
- armv7フラッターで_gallery_readonlydata_size ,-2.7%
- armv7レイアウト_bench_instructions_size 媒体 -1.22%
フクシアのフラッターのFPSが2倍向上。
- fuchsia-review.googlesource.com/c/topaz/+/2...
- fuchsia-review.googlesource.com/c/topaz/+/2...
- fuchsia-review.googlesource.com/c/topaz/+/3...
- fuchsia-review.googlesource.com/c/topaz/+/3...
定量化されたリグレッションの修正
iOSのBackdropFilterは3倍高速です。
投稿者: lhkbob, Li yuqian, flar
- skia-review.googlesource.com/c/skia/+/23...
- skia-review.googlesource.com/c/skia/+/23...
- github.com/flu...
- _savelayer_with_backdropで3倍加速
- 劣化問題の修正github.com/flu
古い状態でのパフォーマンスの低さは、いくつかの大きな改善を達成するための2019年第3四半期でのハードワークと同じくらい重要な役割を果たしたかもしれません。また、同様に大きな回帰のための非自明な修正としていくつかの改善をマークします。それにもかかわらず、このような仕事に感謝します。それがなければ、パフォーマンスの低下やリグレッションが続いていたでしょう。大きな改善が小さな改善を矮小化しないように。彼らはもともと本当に悪い古いパフォーマンスを持っていなかっただけで、それはある意味良いことです。
その他の改善点
- DevToolsが可変ディスプレイ・リフレッシュ・レートをサポート
- VSCodeプラグインによるプロジェクトのスキャンが非同期になり、エクステンションの有効化速度が向上し、VS Codeの「エクステンションが原因でCPUが高い」という警告が表示される可能性が低くなりました。
- iPhone Xsはベンチマーク用にFlutter Device Labsに追加されました。
Filip Hracekに感謝します。
こうしたコミュニティの貢献の結果、Flutterのモバイルパフォーマンスに肯定的に満足しているユーザーの割合は、2019年第3四半期の85%から2020年には92%に増加しました。最善の努力にもかかわらず、2019年第3四半期から第4四半期にかけてのパフォーマンス貢献の一部がこのアップデートで見逃されている可能性があります。見逃された貢献については、次回のアップデートに掲載いたしますので、ご遠慮なくお知らせください。
Filip Hracekに感謝します。




