Définir des événements personnalisés

Le traçage système ne fournit des informations sur les processus qu'au niveau du système. Il est donc parfois difficile de savoir quelles méthodes de votre application ou de votre jeu s'exécutent à un moment donné par rapport aux événements système.

Jetpack fournit une API de traçage que vous pouvez utiliser pour étiqueter une section de code particulière. Ces informations sont ensuite consignées dans les traces capturées sur l'appareil. Macrobenchmark capture automatiquement les traces avec des points de trace personnalisés.

Lorsque vous capturez des traces à l'aide de l'outil de ligne de commande Systrace, l'option -a est obligatoire. Sans cette option, les méthodes de votre application n'apparaissent pas dans un rapport de traçage système.

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);
                    }
                );
            }
        );
    }
}

Nous vous recommandons d'utiliser la fonction d'extension Kotlin, même dans le code Java, car elle met automatiquement fin à la trace une fois le lambda terminé. Ainsi, vous ne risquez pas d'oublier de mettre fin au traçage.

Vous pouvez également utiliser une API NDK pour les événements de trace personnalisés. Pour en savoir plus sur l'utilisation de cette API pour votre code natif, consultez Événements de trace personnalisés dans le code natif.