앱 벤치마크

벤치마킹은 앱 성능을 검사하고 모니터링하는 방법입니다. 정기적으로 벤치마크를 실행하여 성능 문제를 분석 및 디버그하고 최근 변경사항에서 회귀가 발생하지 않는지 확인할 수 있습니다.

Android에서는 앱에서 여러 가지 상황을 분석하고 테스트하는 데 유용한 두 가지 벤치마킹 라이브러리와 접근 방식인 Macrobenchmark와 Microbenchmark를 제공합니다.

Macrobenchmark

Macrobenchmark 라이브러리는 시작, UI 상호작용, 애니메이션 같은 좀 더 큰 최종 사용자 상호작용을 측정합니다. 이 라이브러리는 테스트 중인 성능 환경을 직접 제어할 수 있도록 합니다. 이를 통해 컴파일을 제어할 수 있으며 앱을 시작하고 중지하여 실제 앱 시작 또는 스크롤을 직접 측정할 수 있습니다.

Macrobenchmark 라이브러리는 테스트로 빌드된 테스트 앱의 외부에서 이벤트를 삽입하고 결과를 모니터링합니다. 따라서 벤치마크를 작성할 때 앱 코드를 직접 호출하지 않고 대신 사용자로 앱 내에서 탐색합니다.

Microbenchmark

Microbenchmark 라이브러리를 사용하여 루프에서 직접 앱 코드를 벤치마킹할 수 있습니다. 내부 루프나 특정 핫 함수를 사용할 때처럼, CPU 작업(예: JIT 준비, 디스크 액세스 캐시)을 측정해 최상의 성능을 평가하도록 설계되었습니다. ​​이 라이브러리는 격리된 상태로 직접 호출할 수 있는 코드만 측정할 수 있습니다.

복잡한 데이터 구조를 처리해야 하거나 앱 실행 중 여러 번 호출되는 특정한 컴퓨팅 집약 알고리즘이 있는 앱의 경우 벤치마킹의 좋은 예가 될 수 있습니다. UI의 일부를 측정할 수도 있습니다. 예를 들어 RecyclerView 항목 결합의 비용, 레이아웃을 확장하는 데 걸리는 시간, 성능 측면에서 볼 때 View 클래스의 레이아웃-측정 패스 난이도를 측정할 수 있습니다.

하지만 벤치마킹된 사례가 전반적인 사용자 환경에 미치는 영향을 측정할 수는 없습니다. 일부 시나리오에서는 벤치마킹이 버벅거림이나 앱 시작 시간과 같은 병목 현상이 개선되는지 알려주지 않습니다. 따라서 Android 프로파일러를 사용하여 이러한 병목 현상을 먼저 식별하는 것이 중요합니다. 조사하고 최적화할 코드를 찾으면 벤치마킹된 루프를 빠르고 쉽게 반복적으로 실행하여 노이즈가 적은 결과를 생성할 수 있으므로 개선 영역 하나에 집중할 수 있습니다.

Microbenchmark 라이브러리는 시스템 전반의 정보가 아닌 앱 정보만 보고합니다. 따라서 전반적인 시스템 문제와 관련된 상황이 아닌 앱과 관련 상황의 성능을 분석하는 데 가장 좋습니다.

벤치마크 라이브러리 비교

Macrobenchmark Microbenchmark
API 버전 23 이상 14 이상
기능 활동 시작 또는 목록 스크롤과 같은 상위 수준 진입점 또는 상호작용 측정 개별 기능 측정
범위 별도 프로세스에서 전체 앱 테스트 프로세스 내에서 CPU 작업 테스트
속도 중간 반복 속도 1분을 초과할 수도 있습니다. 빠른 반복 속도 보통 10초 미만입니다.
Tracing 결과에 프로파일링 트레이스 포함 선택적 메서드 샘플링 및 추적