Os traces geralmente são a melhor fonte de informações ao analisar pela primeira vez um problema de performance. Eles permitem formar uma hipótese do problema e onde começar a procurar.
Há dois níveis de rastreamento com suporte do Android: rastreamento do sistema e rastreamento de método.
Como o rastreamento do sistema rastreia apenas áreas especificamente marcadas para rastreamento, ele tem de baixa sobrecarga e não afeta muito o desempenho do app. O rastreamento do sistema é ótimo para ver quanto tempo determinadas seções do código levam para serem executadas.
O rastreamento de métodos acompanha todas as chamadas de função no app. Isso é muito caro Isso afeta muito o desempenho do seu app, mas oferece um total do que está acontecendo, quais funções estão sendo chamadas e com que frequência quando a chamada for feita.
Por padrão, os rastreamentos do sistema não incluem funções de composição individuais. Elas estão disponíveis nos rastros de método.
No momento, estamos testando uma nova funcionalidade de rastreamento do sistema para mostrar funções de composição nos rastreamentos do sistema. Ele oferece a baixa intrusão do rastreamento do sistema, com níveis de detalhes de rastreamento de método na composição.
Configurar o rastreamento de composição
Para testar o rastreamento de recomposição no seu projeto, é necessário atualizar para pelo menos as seguintes versões:
- Android Studio Flamingo
- Interface do Compose: 1.3.0
- Compose Compiler: 1.3.0
O dispositivo ou emulador em que você executa o trace também precisa estar no mínimo no nível 30 da API.
Além disso, é necessário adicionar uma nova dependência ao rastreamento do ambiente de execução do Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Com essa dependência, quando você registra um rastro do sistema que inclui recomposição, as funções combináveis vão aparecer automaticamente.
Fazer um rastreamento do sistema
Para fazer um rastreamento do sistema e ver o novo rastreamento de recomposição em ação, siga estas etapas:
Abra o criador de perfil:
Figura 2. Android Studio: Start Profiling Clique em Linha do tempo da CPU.
Figura 3. Criador de perfil do Android Studio: CPU timeline Navegue até a IU que você quer rastrear e selecione System Trace e Record.
Figura 4. Opções de rastreamento: rastreamento do sistema Use o app para fazer a recomposição e interromper a gravação. Depois que o rastro é processado e mostrado, é possível conferir os elementos combináveis no rastreamento de recomposição. Você pode usar o teclado e o mouse para aplicar zoom e movimentar o rastro. Se não souber navegar por um rastro, consulte a documentação Gravar rastros.
Figura 5. Rastreamento do sistema Clique duas vezes em um elemento combinável no gráfico para acessar o código-fonte.
Também é possível ver as funções de composição no Flame Chart, além do arquivo e do número da linha:
Figura 6. Flame Chart
Avisos
Sobrecarga de tamanho do APK
Nosso objetivo é minimizar ao máximo a sobrecarga do recurso. Há um aumento no tamanho do APK para apps do Compose provenientes do rastreamento de strings incorporadas no APK pelo compilador do Compose. Esse aumento de tamanho pode ser relativamente pequeno se o app não usar muito o Compose ou maior para o Compose completo. apps. Essas strings de rastreamento também não são ofuscadas para que possam aparecer ferramentas de rastreamento, como mostrado anteriormente. O compilador do Compose as injeta em todas a partir da versão 1.3.0.
As strings de rastreamento podem ser removidas no build de produção adicionando a seguinte regra do 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();
}
Essas funções podem mudar no futuro, mas qualquer mudança vai ser mencionada nas notas da versão do Compose.
Manter esses APKs e, ao mesmo tempo, gerar custos de tamanho de APK, garante que o APK com o perfil que está sendo criado seja o mesmo que os usuários do app executam.
Tempo preciso
Para uma criação de perfil precisa, como em qualquer teste de desempenho, você precisa tornar
profileable
e non-debuggable
de acordo com os Aplicativos com perfil.
Capturar um rastro do terminal
É possível capturar um rastro de composição do terminal. Para fazer isso, você tem para seguir automaticamente as etapas que o Android Studio faz automaticamente.
Adicionar dependências
Primeiro, adicione as outras dependências ao seu app.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Gerar um comando de gravação
- Gere um comando de gravação no Perfetto.
Adicione manualmente a seção da fonte de dados
track_event
, conforme o exemplo a seguir: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
Capturar um rastro
- Inicie o app e prepare a seção que você quer rastrear.
Ative o rastreamento no app emitindo uma transmissão.
# 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
Inicie o comando de gravação que você criou anteriormente.
Abrir o rastro
adb pull <location>
o rastro do dispositivo (local especificado no recordar).Abra o rastro no Perfetto.
Capturar rastros com a biblioteca Jetpack Macrobenchmark
Você pode medir a performance com a Jetpack Macrobenchmark, que fornece traces como resultados. Para ativar o rastreamento de composição com Macrobenchmarks, você precisa:
Adicione estas outras dependências ao módulo de teste Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Adicionar argumento de instrumentação
androidx.benchmark.fullTracing.enable=true
antes de executar as comparações. Verifique a instrumentação de Macrobenchmark argumentos para saber mais sobre a Macrobenchmark de instrumentação.
Feedback
Queremos receber seu feedback sobre esse recurso, os bugs que você encontrar e as solicitações que você tiver. Você pode enviar feedback por meio do problema rastreador.