Definir eventos personalizados

O rastreamento do sistema mostra informações sobre processos apenas no nível do sistema. Por isso, às vezes é difícil saber quais métodos do app ou jogo estão sendo executados em relação aos eventos do sistema.

O Jetpack oferece uma API de rastreamento que pode ser usada para rotular uma seção de código. Essas informações são relatadas nos rastros capturados no dispositivo. A biblioteca Macrobenchmark captura rastros com pontos personalizados automaticamente.

Ao usar a ferramenta de linha de comando Systrace para capturar rastros, a opção -a é obrigatória. Sem ela, os métodos do app não aparecem em um relatório de rastreamento do sistema.

Kotlin

class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup,
            viewType: Int): MyViewHolder {
        trace("MyAdapter.onCreateViewHolder") {
            MyViewHolder.newInstance(parent)
        }
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        trace("MyAdapter.onBindViewHolder") {
            trace("MyAdapter.queryDatabase")
                val rowItem = queryDatabase(position)
                dataset.add(rowItem)
            }
            holder.bind(dataset[position])
        }
    }
}

Java

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return TraceKt.trace(
            "MyAdapter.onCreateViewHolder",
            () -> MyViewHolder.newInstance(parent)
        );
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        TraceKt.trace(
            "MyAdapter.onBindViewHolder",
            () -> {
                TraceKt.trace(
                    "MyAdapter.queryDatabase",
                    () -> {
                        Item rowItem = queryDatabase(position);
                        dataset.add(rowItem);
                    }
                );
            }
        );
    }
}

Recomendamos o uso da função de extensão do Kotlin, mesmo em código Java, porque ela encerra automaticamente o rastreamento quando a lambda é concluída. Isso elimina o risco de esquecer de encerrar o rastreamento.

Também é possível usar uma API NDK para eventos de rastreamento personalizados. Para saber mais sobre como usar essa API no código nativo, consulte Eventos de rastreamento personalizado em código nativo.