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