Menentukan peristiwa kustom

Pelacakan sistem hanya menunjukkan informasi tentang proses pada tingkat sistem. Jadi, terkadang sulit untuk mengetahui metode game atau aplikasi mana yang dijalankan pada waktu tertentu terkait dengan peristiwa sistem.

Jetpack menyediakan API pelacakan yang dapat Anda gunakan untuk memberi label pada bagian kode tertentu. Selanjutnya informasi ini akan dilaporkan dalam rekaman aktivitas yang diambil di perangkat. Macrobenchmark akan mengambil rekaman aktivitas dengan titik pelacakan kustom secara otomatis.

Saat menggunakan alat command line systrace untuk mengambil rekaman aktivitas, opsi -a diperlukan; tanpa opsi ini, metode aplikasi Anda tidak akan muncul di laporan pelacakan sistem.

Kotlin

Untuk membuat peristiwa rekaman aktivitas kustom dalam kode Anda, gunakan library rekaman aktivitas-ktx. Fungsi perekaman aktivitas level teratas, khususnya, menangani logika awal dan akhir secara otomatis. Anda dapat melihatnya di cuplikan kode berikut.
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

Untuk membuat peristiwa rekaman aktivitas kustom dalam kode Anda, gunakan class Trace di library pelacakan Jetpack, seperti yang ditunjukkan dalam cuplikan kode berikut.

Catatan: Saat Anda memanggil beginSection() beberapa kali, memanggil endSection() hanya akan mengakhiri metode beginSection() yang terakhir dipanggil. Jadi, untuk panggilan bertingkat, seperti panggilan yang ada di cuplikan berikut, pastikan Anda mencocokkan dengan tepat setiap panggilan ke beginSection() dengan panggilan ke endSection().

Selain itu, Anda tidak dapat memanggil beginSection() di satu thread dan mengakhirinya di thread lainnya; jadi Anda harus memanggil kedua metode tersebut di thread yang sama.

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Trace.beginSection("MyAdapter.onCreateViewHolder");
        MyViewHolder myViewHolder;
        try {
            myViewHolder = MyViewHolder.newInstance(parent);
        } finally {
            // In try and catch statements, always call "endSection()" in a
            // "finally" block. That way, the method is invoked even when an
            // exception occurs.
            Trace.endSection();
        }
        return myViewHolder;
    }

   @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Trace.beginSection("MyAdapter.onBindViewHolder");
        try {
            try {
                Trace.beginSection("MyAdapter.queryDatabase");
                RowItem rowItem = queryDatabase(position);
                dataset.add(rowItem);
            } finally {
                Trace.endSection();
            }
            holder.bind(dataset.get(position));
        } finally {
            Trace.endSection();
        }
    }
}

Ada juga NDK API untuk peristiwa rekaman aktivitas kustom. Anda dapat mengetahui lebih lanjut cara menggunakan API tersebut untuk kode native dalam dokumentasi Peristiwa rekaman aktivitas kustom dalam kode native.