Slide 1

Slide 1 text

STORES 株式会社 Strong Skipping Modeをはじめよう potatotips #86 2024.02.07 @tomorrowkey

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

自己紹介 ● 山下智樹 / @tomorrowkey ● STORES株式会社 - STORES ブランドアプリ ● Android エンジニア (14年生) 3

Slide 4

Slide 4 text

STORESブランドアプリって? 4

Slide 5

Slide 5 text

Strong Skipping Modeとはなんだ

Slide 6

Slide 6 text

Strong Skipping Modeとはなんだ 6 https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html

Slide 7

Slide 7 text

Strong Skipping Modeとはなんだ 7 https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html

Slide 8

Slide 8 text

Strong Skipping Modeとはなんだ 8 https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html

Slide 9

Slide 9 text

Strong Skipping Modeとはなんだ まじじゃん… 9 https://android-review.googlesource .com/c/platform/frameworks/support /+/2694106

Slide 10

Slide 10 text

おさらい

Slide 11

Slide 11 text

そもそもSkippingってなに - ステート変更のたびに画面全体を再描画(Recompose)しているとパフォー マンスが悪い - Composableの引数が安定(Stable)していたら、そのComposableは Skippableとしてマークし、引数が同じ場合にRecomposeを回避できる 11

Slide 12

Slide 12 text

Stableってなに - 安定している型のこと - Stable - Int, Boolean, String … - Array - イミュータブル(val)で宣言されている安定したプロパティで構成されたオブジェクト - Unstable - List, Date… - ミュータブル(var)で宣言されているプロパティを持つオブジェクト 12

Slide 13

Slide 13 text

Strong Skipping Modeはようするに - 不安定な引数型であってもSkippableとしてマークする - これまでよりもSkippableになるComposableが増えるからパフォーマンスが あがる 注: non-restartableなComposableは引き続きSkippableではない扱いとなりま す。 13

Slide 14

Slide 14 text

Strong Skipping Modeをためす

Slide 15

Slide 15 text

Strong Skipping Modeをためす - Kotlin 1.9.20 - Compose Compiler: 1.5.4 - Compose BOM: 2024.01.00 - Compose 1.6.0 (w/ compiler option) 15 android { kotlinOptions { freeCompilerArgs = listOf( "-P", "plugin:androidx.compose.compiler.plugins.kotlin:experimentalStrongSkipping=true" , ) } }

Slide 16

Slide 16 text

動作確認: Strong Skipping Mode: 無効

Slide 17

Slide 17 text

動作確認: Strong Skipping Mode: 有効

Slide 18

Slide 18 text

Strong Skipping Modeとむきあう

Slide 19

Slide 19 text

Strong Skipping Modeとむきあう - Compose 1.7でデフォルト有効になる - SkippableにしたくないComposableには@Unskippableアノテーションをつ ければOK - サンプルコードなら単純だから動作確認も簡単だけど、プロダクションコード を確認するのは大変… 19

Slide 20

Slide 20 text

Strong Skipping Modeとむきあう Compose Compiler Metrics - Compose CompilerがComposableをどう認識 しているかレポートしてくれる - Strong Skipping Modeの導入前後でどう変化 するか観察することで、動作確認すべき Composableを絞ることができる 20 https://github.com/androidx/androidx/blob/androidx-m ain/compose/compiler/design/compiler-metrics.md

Slide 21

Slide 21 text

Strong Skipping Modeとむきあう プロダクションコードでメトリクスを比較してみた 21 --- ./compose_metrics-before/module.json 2024-02-03 20:12:57 +++ ./compose_metrics-after/module.json 2024-02-03 20:10:20 @@ -1,10 +1,10 @@ { - "skippableComposables": 279, + "skippableComposables": 306, "restartableComposables": 430, "readonlyComposables": 5, "totalComposables": 449, "restartGroups": 430, - "totalGroups": 665, + "totalGroups": 668, "staticArguments": 890, "certainArguments": 413, "knownStableArguments": 6700, \ No newline at end of file @@ -17,9 +17,9 @@ "inferredUncertainClasses": 28, "effectivelyStableClasses": 427, "totalClasses": 742, - "memoizedLambdas": 435, + "memoizedLambdas": 568, "singletonLambdas": 146, "singletonComposableLambdas": 32, "composableLambdas": 194, - "totalLambdas": 520 + "totalLambdas": 568 } \ No newline at end of file

Slide 22

Slide 22 text

おわり