Определите пользовательские события

Трассировка системы показывает информацию о процессах только на системном уровне, поэтому иногда сложно узнать, какой из методов вашего приложения или игры выполняется в данный момент времени относительно системных событий.

Jetpack предоставляет API трассировки, который можно использовать для маркировки определенного раздела кода. Эта информация затем отображается в трассировках, записанных на устройстве. Macrobenchmark автоматически записывает трассировки с помощью пользовательских точек трассировки.

При использовании инструмента командной строки systrace для сбора трассировок требуется опция -a . Без этого параметра методы вашего приложения не отображаются в отчете о трассировке системы.

Котлин

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

Ява

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

Мы рекомендуем использовать функцию расширения Kotlin даже в коде Java, поскольку она автоматически завершает трассировку после завершения лямбда-выражения. Это исключает риск забыть завершить трассировку.

Вы также можете использовать API NDK для пользовательских событий трассировки. Дополнительные сведения об использовании этого API для собственного кода см. в разделе Пользовательские события трассировки в машинном коде .

{% дословно %} {% дословно %} {% дословно %} {% дословно %}