맞춤 이벤트 정의

시스템 추적은 프로세스에 관한 정보를 시스템 수준에서만 보여주므로, 시스템 이벤트와 관련하여 특정 시간에 앱이나 게임의 어느 메서드가 실행 중인지 인식하기 어려울 때가 있습니다.

Jetpack은 코드의 특정 섹션에 라벨을 지정하는 데 사용할 수 있는 추적 API를 제공합니다. 이 정보는 이후 기기에서 캡처된 트레이스에 보고됩니다. Macrobenchmark는 맞춤 트레이스 포인트로 트레이스를 자동으로 캡처합니다.

systrace 명령줄 도구를 사용하여 트레이스를 캡처하는 경우 -a 옵션이 필요합니다. 이 옵션이 없으면 앱의 메서드가 시스템 트레이스 보고서에 표시되지 않습니다.

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

람다가 완료되면 자동으로 트레이스가 종료되므로 Java 코드에서도 Kotlin 확장 함수를 사용하는 것이 좋습니다. 이렇게 하면 추적을 종료하는 것을 잊어버릴 위험이 없습니다.

맞춤 트레이스 이벤트에 NDK API를 사용할 수도 있습니다. 네이티브 코드에 이 API를 사용하는 방법을 자세히 알아보려면 네이티브 코드의 맞춤 트레이스 이벤트를 참고하세요.