Rastreamento de performance para HAR

O ATrace realiza o rastreamento de desempenho para HAR usando o crate externo tracing_android_trace.

Ativar o rastreamento para HAR

Para ativar o rastreamento de desempenho da referência harry-app, ative o recurso do Cargo harry-app-platform-specific/tracing-android.

# crates/reference/harry-app/Cargo.toml

harry-sdv = ["harry-app-platform-specific/tracing-android", ...]

Adicionar rastros personalizados ao HAR

    let custom_trace = tracing::info_span!("custom_trace_span").entered()
    // code here will be traced
    drop(custom_trace)

Figura 1. IU do Perfetto mostrando um exemplo de rastreamento do processo harry (HAR)

Rastreamento de desempenho para DriverUI

O DriverUI usa o rastreamento do sistema Android. Nenhuma configuração extra é necessária.

Adicionar rastros personalizados ao DriverUI

É possível adicionar eventos personalizados ao código Kotlin usando o Guia do desenvolvedor.

Coletar um rastreamento

Recomendamos o Torq para coletar rastreamentos no AAOS.

Usar o Torq

O Torq é uma ferramenta de CLI para coletar rastreamentos de desempenho no AAOS e no SDV.

  1. Clone o repositório do Torq.

  2. Siga as instruções no repositório para criar e executar:

export ANDROID_SERIAL=<your_device_serial>
# Collect a 7 second trace
torq -d 7000

Coletar um rastreamento de desempenho unificado nas duas VMs

Como o Display Safety é executado em duas VMs, a coleta de rastreamentos de ambas ao mesmo tempo ajuda a identificar problemas.

  • O Torq oferece suporte a rastreamentos unificados pelo traced_relay do Perfetto.
  • Para capturar um rastreamento unificado, primeiro identifique o cid das duas VMs:
# Get the cid for SDV Media VM. For example: 3
adb -s <sdv_media_vm_serial> shell getprop ro.sdv.vsock_local_cid

# Get the cid for SDV IVI VM. For example: 4
adb -s <sdv_ivi_vm_serial> shell getprop ro.sdv.vsock_local_cid

Neste exemplo, use a VM SDV-Media (cid=3) como um retransmissor.

# Configure your VMs for unified tracing
torq vm configure --primary <sdv_ivi_vm_serial> --primary-cid 4 --secondary <sdv_media_vm_serial>
# Collect a 7 second trace from the SDV IVI VM, it will now collect a unified trace
torq --serial <sdv_ivi_vm_serial> -d 7000

Exemplo:

Figura 2. IU do Perfetto mostrando um exemplo de rastreamento unificado com os dois processos das duas VMs: harry (HAR) e com.android.car.driverui (DriverUI).

Coletar um rastreamento de inicialização

Para coletar um rastreamento de inicialização para analisar o desempenho de inicialização, é necessário ativar algumas flags.

  1. Defina a flag de persistência específica do SDV para rastreamentos de inicialização.

    export ANDROID_SERIAL=<your_device_serial>
    adb root
    adb shell setprop persist.debug.sdv.boottrace 1
    adb shell setprop persist.debug.perfetto.boottrace 1
    
  2. Defina o parâmetro da linha de comando do kernel androidboot.fastboot.boottrace=enabled.

# For Cuttlefish, set when creating CVD
cvd create -extra_kernel_cmdline=androidboot.fastboot.boottrace=enabled

Usar record_android_trace

Faça o seguinte:

# Set your adb device serial
export ANDROID_SERIAL=<your_device_serial>
# Run record_android_trace from the Android repo
cd /<your_repo_path>
build/envsetup.sh

$ANDROID_BUILD_TOP/external/perfetto/tools/record_android_trace --config $ANDROID_BUILD_TOP/system/software_defined_vehicle/core_services/samples/tracing/config/trace_cfg.pbtx