벤치마킹은 애플리케이션의 성능을 테스트하는 방법입니다. 정기적으로 벤치마크를 실행하여 성능 문제를 분석 및 디버그하고 최근 변경사항에서 회귀가 발생하지 않는지 확인할 수 있습니다.
Android에서는 애플리케이션에서 여러 가지 상황을 분석하고 테스트하는 데 유용한 두 가지 벤치마킹 라이브러리와 접근 방식, 즉 Microbenchmark 및 Macrobenchmark를 제공합니다.
Microbenchmark
Microbenchmark 라이브러리를 사용하여 루프에서 직접 앱 코드를 벤치마킹할 수 있습니다. 내부 루프나 특정 핫 함수를 사용할 때처럼, CPU 작업(JIT 준비, 디스크 액세스 캐시)을 측정해 최상의 성능을 평가하도록 설계되었습니다. 이 라이브러리는 격리된 상태로 직접 호출할 수 있는 코드만 측정할 수 있습니다.
복잡한 데이터 구조를 처리해야 하거나 애플리케이션 실행 중 여러 번 호출되는 특정한 컴퓨팅 집약 알고리즘이 있는 앱의 경우 벤치마킹의 좋은 예가 될 수 있습니다. UI의 일부를 측정할 수도 있습니다. 예를 들어 RecyclerView
항목 결합의 비용, 레이아웃을 확장하는 데 걸리는 시간, 성능 측면에서 볼 때 View
클래스의 레이아웃-측정 패스 난이도를 측정할 수 있습니다.
하지만 벤치마킹된 사례가 전반적인 사용자 환경에 미치는 영향을 측정할 수는 없습니다. 일부 시나리오에서 벤치마킹은 버벅거림과 같은 병목 현상이나 애플리케이션 시작 시간이 개선되고 있는지 알려주지 않습니다. 따라서 Android 프로파일러를 사용하여 이러한 병목 현상을 먼저 식별하는 것이 중요합니다. 조사하고 최적화할 코드를 찾으면 벤치마킹된 루프를 빠르고 쉽게 반복적으로 실행하여 노이즈가 적은 결과를 생성할 수 있으므로 개선 영역 하나에 집중할 수 있습니다.
Microbenchmark 라이브러리는 시스템 전반의 정보가 아닌 애플리케이션 정보만 보고합니다. 따라서 전반적인 시스템 문제와 관련된 상황이 아닌 앱과 관련 상황의 성능을 분석하는 데 가장 좋습니다.
Macrobenchmark
Macrobenchmark 라이브러리는 시작, UI 상호작용, 애니메이션 같은 좀 더 큰 최종 사용자 상호작용을 측정합니다. Microbenchmark 라이브러리와 달리 Macrobenchmark는 테스트 중인 성능 환경을 직접 제어합니다. 따라서 모든 디스크 액세스가 캐시된 jit 적용 특정 핫 함수만 측정하는 대신 실제 앱 시작이나 스크롤을 직접 측정하도록 애플리케이션의 컴파일, 시작, 중지를 제어할 수 있습니다.
라이브러리는 테스트로 빌드된 테스트 애플리케이션에서 외부에서 이벤트를 삽입하고 결과를 모니터링합니다. 따라서 벤치마크를 작성할 때 애플리케이션 코드를 직접 호출하지 않고 대신 사용자와 마찬가지로 애플리케이션 내에서 탐색합니다.
벤치마킹 라이브러리 비교
Microbenchmark | Macrobenchmark | |
---|---|---|
기능 | 개별 함수 측정 | 상위 수준 진입점 또는 상호작용 측정(예: 활동 시작 또는 목록 스크롤) |
범위 | 프로세스 내에서 CPU 작업 테스트 | 별도 프로세스에서 전체 앱 테스트 |
속도 | 빠른 반복 속도(일반적으로 10초 미만) | 중간 반복 속도(1분 초과 가능) |
추적 | 선택적 메서드 샘플링 및 추적 | 결과에 프로파일링 트레이스 포함 |
최소 API 버전 | 14 | 23 |