Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
makun @ pixiv App Night Compose Compiler Metrics 詳細と活用方法
Slide 2
Slide 2 text
概要 1. Compose Compiler Metrics とは 2. Metrics の生成方法 3. Metrics の内容の紹介 4. 注目すべき内容 5. 活用方法
Slide 3
Slide 3 text
Compose Compiler Metricsとは
Slide 4
Slide 4 text
ChatGPTにきいてみた
Slide 5
Slide 5 text
ChatGPTにきいてみた Compose Compiler Metrics は、Jetpack Compose Compiler の パフォーマン スと効率を測定するメトリクスのセット です。Compiler Metics は、開発プロセス におけるコンパイラのパフォーマンスを追跡し、Compose Compiler の パフォー マンスを最適化するために改善できる部分を特定するために使用 されます。
Slide 6
Slide 6 text
ChatGPTにきいてみた Compose コンパイラの性能を測定するために使用できる測定基準の例として は、コンパイル時間、メモリ使用量、および CPU使用量 が挙げられます。これら のメトリクスを長期的に追跡および分析することで、コンパイラのパフォーマンス を最適化するために改善できる傾向や領域を特定することができます。 紹介したい内容とはちがう
Slide 7
Slide 7 text
Compose Compiler Metricsとは Compose Compiler プラグインによって生成できる情報 のこと。 Compose Compiler プラグインは、特定の Compose 固有の概念に関するレ ポートやメトリクスを生成する ことができ、Compose コードに何が起こっている かを細かいレベルで理解するのに役立ちます。
Slide 8
Slide 8 text
Jetpack Compose の理解がすすむ 作った Composable が コンパイラにどのように解釈されるのか知ることができ る。そのため、実際に自分でいろんなコードを試す ことで、より Compose の理 解を深めることができる。
Slide 9
Slide 9 text
Composable の改善ができる いままで作ってきた Composable が 本当に最適な状態なのか確かめることが できる。とくに大規模なアプリを Jetpack Compose で置き換えるときなど、既存 のプロジェクトに Jetpack Compose を適用する際に有用 である。
Slide 10
Slide 10 text
生成方法
Slide 11
Slide 11 text
ビルドファイルに設定を追記 各モジュールの build.gradle に上記の設定を追記する
Slide 12
Slide 12 text
ビルドファイルに設定を追記 ※ ファイルの書き出し場所の指定は必須
Slide 13
Slide 13 text
ファイルを生成 設定を追記しビルドをすることで、設定で指 定した場所にファイルが生成されているのが わかる。
Slide 14
Slide 14 text
生成できるファイル
Slide 15
Slide 15 text
生成できるファイル • _-module.json • _-composables.txt • _-composables.csv • _-classes.txt
Slide 16
Slide 16 text
-module.json(全体的な統計情報) 対象モジュールに関する一般的な指標を提 供してくれる。左の例では、コンポーザブル が 100個 あり、そのうち 単体で再コンポー ズ可能 なものが 60個、再コンポーズ可能だ がスキップができないもの が 7個 あることが わかる。
Slide 17
Slide 17 text
-composables.txt(コンポーザブルの情報)
Slide 18
Slide 18 text
-composables.csv(コンポーザブル情報表)
Slide 19
Slide 19 text
-classes.txt(クラス情報) コンパイラがそのクラスをどのよ うに解釈したかがわかる。各 パ ラメータの安定性 や ランタイム 時の安定性 などもわかる。
Slide 20
Slide 20 text
注目したい情報
Slide 21
Slide 21 text
restartable と skippable
Slide 22
Slide 22 text
restartable 再コンポーズ時にその Composable 自体が再コンポーズ可能である状態 のこ と。restartable でない場合は、親の Composable を再コンポーズする。 親 Composable restartable Composable 再コンポーズ 親 Composable NOT restartable Composable 再コンポーズ
Slide 23
Slide 23 text
skippable 再コンポーズ時に値が同じであれば、その Composable が再コンポーズをス キップできる状態 のこと。その Composable が skippable であれば、必ず restartable でもある。 親 Composable 子 Composable NOT skippable 子 Composable skippable 再コンポーズ 再コンポーズ スキップ
Slide 24
Slide 24 text
restartable but not skippable composables.txt では restartable だけれど skippable ではない Composable をみることがある。 state1 state2 state3 skippable 〇 restartable 〇 〇
Slide 25
Slide 25 text
restartable but not skippable Composable が 100個 restartable が 60個 skippable が 53個 restartable だけど skippable でない Composable が 60 - 53 = 7個 ある。
Slide 26
Slide 26 text
restartable but not skippable 全ての Composable を skippable にしなければいけないわけではない。 そのような Composable をみつけたときは、次の選択肢のうちどれか1つを選 択できる。 1. 引数を全て stable にし skippable にする 2. @NonRestartableComposable と記す
Slide 27
Slide 27 text
@NonRestartableComposable Composable が 再コンポジションの「ルート」でない場合に有効 である。つまり、 他の状態の変化に影響されないような Composable のとき。コンパイラは自動 でその判断ができない ためアノテーションで宣言する。 普段のアプリ開発で利用することは、ほぼ無い。
Slide 28
Slide 28 text
@NonRestartableComposable
Slide 29
Slide 29 text
Composable の初期値
Slide 30
Slide 30 text
Composableの初期値 composables.txt で Composable の引数に初期値があるとき @static や @dynamic をみることがある。 @static 引数の初期値が安定した値 @dynamic 引数の初期値が 動的に変更される可能性がある 値
Slide 31
Slide 31 text
Composableの初期値 Composable の引数の初期値は基本的に @static にする必要がある。 ただし、次の場合はその限りではない。 • CompositionLocal や State などの 観測可能な動的変数の読み取り • remember などの Composable Function の呼び出し
Slide 32
Slide 32 text
@dynamic MaterialTheme が指定されているときは @dynamic になるのが一般的
Slide 33
Slide 33 text
@dynamic rememberScrollState も @dynamic になるのが一般的
Slide 34
Slide 34 text
@dynamic その他の Composable で引数の初期値が @dynamic のときは、その 初期値 を削除する か @Stableアノテーションを利用 する。
Slide 35
Slide 35 text
活用方法
Slide 36
Slide 36 text
レビューコストの削減 プルリクエストなどでのレビューで Composable が最適に設計されていることを 担保したいが、人間が毎回確認するのは手間 になりがち。そのため、Compose Compiler Metrics の情報を 自動で解析する仕組みを導入することでそのコスト を削減 できる。
Slide 37
Slide 37 text
No content
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
レビューコストの削減 CI などで Compose Compiler Report to HTML で HTML を書き出し、 Jenkins の HTML Publisher Plugin を使って確認しやすくしたりできる。
Slide 40
Slide 40 text
まとめ Compose Compiler Metrics は、Compose のコンパイラの解釈を可視化でき る。それらの内容を調査することで、アプリのパフォーマンス改善や Jetpack Compose の理解を深めることができる。また、その結果を活用することでレ ビューコストの削減なども見込める。