Трассировка часто является лучшим источником информации на начальном этапе исследования проблемы производительности. Она позволяет сформулировать гипотезу о том, в чем заключается проблема и с чего начать поиск.
В Android поддерживаются два уровня трассировки: системная трассировка и трассировка методов.
Поскольку трассировка системы отслеживает только те области, которые специально для трассировки, она имеет низкую нагрузку и не сильно влияет на производительность вашего приложения. Трассировка системы отлично подходит для того, чтобы увидеть, сколько времени занимает выполнение определенных участков вашего кода.
Трассировка методов отслеживает каждый вызов функции в вашем приложении. Это очень ресурсоемкий процесс, который значительно влияет на производительность приложения, но он дает вам полную картину происходящего, какие функции вызываются и как часто.
По умолчанию трассировка системы не включает отдельные компонуемые функции. Они доступны в трассировке методов.
Трассировка композиции отображает компонуемые функции внутри системных трассировок. Эта функция обеспечивает низкую степень инвазивности, характерную для системной трассировки, с уровнем детализации композиции, как при трассировке методов.
Настройка трассировки состава
Чтобы протестировать трассировку рекомпозиции в вашем проекте, необходимо обновить систему как минимум до следующих версий:
- Android Studio Flamingo
- Compose UI: 1.3.0
- Компилятор Compose: 1.3.0
Устройство или эмулятор, на котором вы запускаете трассировку, также должен иметь как минимум уровень API 30.
Кроме того, необходимо добавить новую зависимость от Compose Runtime Tracing:
implementation("androidx.compose.runtime:runtime-tracing:1.10.4")
Если вы используете Compose BOM , указывать версию не нужно:
val composeBom = platform("androidx.compose:compose-bom:2026.02.01")
implementation(composeBom)
// ...
// dependency without a version
implementation("androidx.compose.runtime:runtime-tracing")
Благодаря этой зависимости, при выполнении трассировки системы, включающей рекомпозицию, вы сможете автоматически увидеть компонуемые функции.
Выполните трассировку системы.
Чтобы получить трассировку системы и увидеть новую функцию трассировки рекомпозиции в действии, выполните следующие шаги:
Откройте профилировщик:

Рисунок 2. Android Studio — Начало профилирования Щелкните по временной шкале ЦП

Рисунок 3. Профайлер Android Studio — временная шкала ЦП. Перейдите в интерфейс приложения, который вы хотите отследить, затем выберите «Системная трассировка и запись».

Рисунок 4. Параметры трассировки — Трассировка системы. Используйте приложение, чтобы запустить перекомпозицию и остановить запись. После обработки и отображения трассировки вы сможете увидеть элементы, которые можно комбинировать, в трассировке перекомпозиции. Вы можете использовать клавиатуру и мышь для масштабирования и перемещения по трассировке; если вы не знакомы с навигацией по трассировке, см. документацию по записи трассировок .

Рисунок 5. Трассировка системы. Двойной щелчок по элементу, входящему в составную часть диаграммы, переводит вас к его исходному коду.
Также на диаграмме Flame Chart можно увидеть элементы, которые можно комбинировать, вместе с номером файла и строкой:

Рисунок 6. Диаграмма пламени.
Предостережения
накладные расходы на размер APK
Хотя мы стремились свести к минимуму накладные расходы, связанные с этой функцией, размер APK-файлов приложений Compose увеличивается из-за трассировочных строк, внедряемых в APK компилятором Compose. Это увеличение размера может быть относительно небольшим, если ваше приложение не использует много Compose, или большим для полноценных приложений Compose. Кроме того, эти трассировочные строки не обфусцированы, поэтому они могут отображаться в инструментах трассировки, как показано ранее. Компилятор Compose внедряет их во все приложения, начиная с версии 1.3.0.
Строки трассировки можно удалить из вашей производственной сборки, добавив следующее правило Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
В будущем эти функции могут измениться, но любые изменения будут указаны в примечаниях к выпуску Compose.
Следует отметить, что сохранение функций, хотя и приводит к некоторому увеличению размера APK-файла, гарантирует, что профилируемый APK-файл будет тем же самым, который используют пользователи приложения.
Точное время
Для точного профилирования, как и при любом тестировании производительности, необходимо сделать приложение profileable и non-debuggable в соответствии с требованиями к профилируемым приложениям .
Захват трассировки с терминала
Можно получить трассировку композиции из терминала. Для этого необходимо выполнить действия, которые Android Studio обычно делает автоматически.
Добавить зависимости
Сначала добавьте в приложение необходимые зависимости.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Сгенерировать команду записи
- Создайте команду записи в Perfetto .
Добавьте раздел источника данных
track_eventвручную, как показано в следующем примере:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Зафиксировать трассировку
- Запустите приложение и подготовьте участок, который хотите отследить.
Включите отслеживание в приложении, отправив широковещательное сообщение.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiverЗапустите команду записи, которую вы создали ранее.
Откройте трассировку
adb pull <location>выводит трассировку с устройства (местоположение указано в команде записи).Открыть в Perfetto .
Захват трассировки с помощью Jetpack Macrobenchmark
Вы можете измерить производительность с помощью Jetpack Macrobenchmark , который предоставляет трассировку в качестве результатов. Чтобы включить трассировку композиции с помощью макробенчмарков, вам необходимо:
Добавьте следующие дополнительные зависимости в тестовый модуль Macrobenchmark :
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")Перед запуском бенчмарков добавьте аргумент инструментария
androidx.benchmark.fullTracing.enable=true. Дополнительную информацию об аргументах инструментария Macrobenchmark см. в разделе «Аргументы инструментария Macrobenchmark».
Обратная связь
Мы будем рады услышать ваши отзывы об этой функции, обнаруженные вами ошибки и ваши пожелания. Вы можете отправить нам отзыв через систему отслеживания ошибок .