1. 시작하기 전에이 Codelab에서는 Macrobenchmark 라이브러리를 사용하는 방법을 알아봅니다. 사용자 참여의 핵심 측정항목인 앱 시작 시간과 앱에서 버벅거림이 발생할 수 있는 위치를 알려주는 프레임 시간을 측정합니다. Show
필요한 항목
실행할 작업
학습할 내용
2. 설정시작하려면 다음 명령어를 사용하여 명령줄에서 GitHub 저장소를 클론합니다. $ git clone https://github.com/googlecodelabs/android-performance.git 또는 ZIP 파일 두 개를 다운로드해도 됩니다.
Android 스튜디오로 프로젝트 열기
3. Jetpack Macrobenchmark 소개Jetpack Macrobenchmark 라이브러리는 시작, UI와의 상호작용, 애니메이션 등 더 큰 최종 사용자 상호작용의 성능을 측정합니다. 이 라이브러리는 테스트 중인 성능 환경을 직접 제어할 수 있도록 합니다. 이를 통해 앱 시작, 프레임 시간, 추적된 코드 섹션을 직접 측정하도록 애플리케이션의 컴파일, 시작, 중지를 제어할 수 있습니다. Jetpack Macrobenchmark를 사용하면 다음 작업을 할 수 있습니다.
이 라이브러리를 사용하는 계측은 애플리케이션 코드를 직접 호출하지 않고 대신 터치, 클릭, 스와이프 등 사용자가 하듯이 애플리케이션을 탐색합니다. 이러한 상호작용 중에 기기에서 측정이 이루어집니다. 애플리케이션 코드의 일부를 직접 측정하려면 대신 Jetpack Microbenchmark를 참고하세요. 벤치마크 작성은 계측 테스트 작성과 유사하지만 앱의 상태를 확인할 필요가 없다는 점은 다릅니다. 벤치마크는 JUnit 문법( 샘플 앱이 Codelab에서는 JetSnack 샘플 애플리케이션을 사용합니다. Jetpack Compose를 사용하는 가상 스낵 주문 앱입니다. 애플리케이션의 성능을 측정하기 위해 앱의 아키텍처에 관한 세부정보를 알 필요는 없습니다. 벤치마크에서 UI 요소에 액세스할 수 있도록 앱의 동작 방식과 UI 구조를 알아야 합니다. 앱을 실행하고 원하는 스낵을 주문하여 기본 화면을 익히세요. 4. Macrobenchmark 라이브러리 추가Macrobenchmark를 사용하려면 프로젝트에 새 Gradle 모듈을 추가해야 합니다. 프로젝트에 추가하는 가장 쉬운 방법은 Android 스튜디오 모듈 마법사를 사용하는 것입니다. 새 모듈 대화상자를 엽니다. Project 패널에서 프로젝트 또는 모듈을 마우스 오른쪽 버튼으로 클릭하고 New > Module을 선택합니다. Templates 창에서 Benchmark를 선택하고 Macrobenchmark가 벤치마크 모듈 유형으로 선택되어 있는지 확인하고 세부정보가 예상대로인지 확인합니다.
Finish를 클릭합니다. 모듈 마법사의 변경사항모듈 마법사는 프로젝트에 여러 변경사항을 적용합니다.
마법사는 개발자가 선택한 타겟 애플리케이션 모듈도 변경합니다. 특히 다음 스니펫과 같이 새
이 buildType은 그러나
마법사가 하는 마지막 작업은 시작 시간을 벤치마킹하는 스캐폴드를 만드는 것입니다(다음 단계에서 사용함). 이제 벤치마크를 작성해 보겠습니다. 5. 앱 시작 측정앱 시작 시간 또는 사용자가 앱 사용을 시작하는 데 걸리는 시간은 사용자 참여에 영향을 미치는 주요 측정항목입니다. 모듈 마법사는 다음과 같이 앱 시작 시간을 측정할 수 있는
모든 매개변수는 무엇을 의미하나요?벤치마크를 작성할 때 진입점은
벤치마크 작업 작성 방법Macrobenchmark가 앱을 재설치하고 다시 시작합니다. 앱의 상태와 독립적으로 상호작용을 작성해야 합니다. Macrobenchmark는 앱과 상호작용하는 데 유용한 함수와 매개변수를 제공합니다. 가장
중요한 항목은 또 다른 유용한 함수는
다른 상호작용의 경우 시작 벤치마크를 정의했으므로 이제 다음 단계에서 실행해 보겠습니다. 6. 벤치마크 실행벤치마크 테스트를 실행하기 전에 Android 스튜디오에서 올바른 빌드 변형이 선택되어 있는지 확인합니다.
이렇게 하지 않으면 런타임 시 벤치마크가 실패하고
java.lang.AssertionError: ERRORS (not suppressed): DEBUGGABLE WARNINGS (suppressed): ERROR: Debuggable Benchmark Benchmark is running with debuggable=true, which drastically reduces runtime performance in order to support debugging features. Run benchmarks with debuggable=false. Debuggable affects execution speed in ways that mean benchmark improvements might not carry over to a real user's experience (or even regress release performance). 계측 인수 이제 계측 테스트를 실행하는 것과 동일한 방식으로 벤치마크를 실행할 수 있습니다. 옆에 있는 여백 아이콘으로 테스트 함수 또는 전체 클래스를 실행할 수 있습니다. 실제 기기가 선택되어 있는지 확인합니다. Android Emulator에서 벤치마크를 실행하면 잘못된 결과를 제공한다는 경고와 함께 런타임에 실패하기 때문입니다. 기술적으로는 에뮬레이터에서 실행할 수 있지만 기본적으로 호스트 머신 성능을 측정하는 것입니다. 과부하가 발생한 경우 벤치마크의 성능이 느려지고 그 반대의 경우도 마찬가지입니다. 벤치마크를 실행하면 앱이 다시 빌드되고 앱에서 벤치마크가 실행됩니다. 벤치마크는 정의된 7. (선택사항) Android Emulator에서 벤치마크 실행실제
기기가 없지만 여전히 벤치마크를 실행하려는 경우 계측 인수 오류를 억제하려면 실행 구성을 수정합니다.
또는 코드베이스에 영구적으로 저장해야 하는 경우 다음과 같이
8. 시작 결과 이해벤치마크의 실행이 완료되면 다음 스크린샷과 같이 Android 스튜디오에 직접 결과가 제공됩니다. 이 사례에서 확인할 수 있듯이 Google Pixel 3의 시작 시간은 최솟값 197.9ms, 중앙값 201.8ms, 최댓값 220.3ms였습니다. 기기에서는 동일한 벤치마크를 실행할 때 다른 결과가 나타날 수도 있습니다. 결과는 다음과 같은 여러 요소의 영향을 받을 수 있습니다.
따라서 동일한 기기에서 결과를 비교하는 것이 중요합니다(동일한 상태에 있는 기기면 더 좋음). 이렇게 하지 않으면 차이가 클 수 있습니다. 동일한 상태를 보장할 수 없는 경우 조사를 위해 Macrobenchmark 라이브러리는 벤치마크를 실행하는 동안 시스템 트레이스를 기록합니다. 편의를 위해 Android 스튜디오에서는 각 반복 및 측정된 시간을 시스템 트레이스 링크로 표시하므로 이를 쉽게 열어 조사할 수 있습니다. 9. (선택적 연습) 앱을 사용할 준비가 되면 선언Macrobenchmark는 앱에서 렌더링된 첫 번째 프레임까지의 시간(
샘플에서는 데이터가 로드될 때까지 간단한 진행률 표시줄을 보여주므로 데이터가 준비되어 스낵 목록이 배치되고 그려질 때까지 기다리는 것이 좋습니다. 샘플 애플리케이션을 조정하고 Project 창의 이 파일에서 스낵 목록 구성을 담당하는 먼저 데이터가 준비되었는지 확인해야 합니다. 콘텐츠가 준비될 때까지
이제 모든 리컴포지션 시 이를 호출하는 것을 방지하는 부작용을 사용해야 합니다.
마지막 단계는 실제로 호출을
그런 다음에는 콘텐츠를 기다리도록 현재 시작 벤치마크는 첫 번째 렌더링된 프레임만 기다립니다. 대기 자체가
여기서는 콘텐츠 목록에 하위 요소가 포함될 때까지 기다릴 수 있으므로 다음 스니펫과 같이
스니펫에서 어떤 일이 발생하는지 설명하는 방법은 다음과 같습니다.
이제 벤치마크를 다시 실행할 수 있으며 라이브러리는 다음 스크린샷과 같이 여기서 TTID와 TTFD의 차이는 405ms인 것을 알 수 있습니다. 즉, 사용자는 200ms가 지난 후에 렌더링된 첫 번째 프레임을 볼 수 있지만 목록을 스크롤하려면 405ms가 더 지나야 합니다. 10. 벤치마크 프레임 시간사용자가 앱을 방문한 후 사용자가 접하게 되는 두 번째 측정항목은 앱의 원활한 정도입니다. 다시 말하면 앱이 프레임을 드롭하는지 여부입니다. 이를 측정하기 위해
예를 들어 항목 목록의 스크롤 동작을 측정하려고 하지만 이 시나리오 전에 아무것도 측정하지 않고자 한다고 가정해 보겠습니다. 벤치마크를 측정된 상호작용과 측정되지 않은 상호작용으로 분할해야 합니다. 이를 위해 측정되지 않은 상호작용( 프레임 시간 벤치마크 만들기설명된 흐름을 달성하기 위해 스크롤 프레임 시간 벤치마크가 포함될
그런 다음 필수 매개변수로 벤치마크 스켈레톤을 추가합니다.
벤치마크는 이제
이제
초기 레이아웃 설정을 측정하는 데 관심이 없다면 다음으로, 동작 여백을 스낵 목록에 설정합니다. 이 작업을 해야 하는 이유는 그러지 않으면 앱이 시스템 탐색을 트리거하고 콘텐츠를 스크롤하는 대신 앱을 종료할 수 있기 때문입니다.
마지막으로
라이브러리는 정의된 작업을 실행할 때 앱에서 생성된 프레임 시간을 측정합니다. 이제 벤치마크를 실행할 준비가 되었습니다. 벤치마크 실행시작 벤치마크와 동일한 방식으로 벤치마크를 실행할 수 있습니다. 테스트 옆에 있는 여백 아이콘을 클릭하고 Run 'scroll()'을 선택합니다. 벤치마크 실행에 관한 자세한 내용은 벤치마크 실행 단계를 확인하세요. 결과 이해
앱 시작 결과와 마찬가지로 11. 축하합니다축하합니다. Jetpack Macrobenchmark를 사용하여 성능을 측정하는 방법에 관한 Codelab을 완료했습니다. 다음 단계기준 프로필을 사용하여 앱 성능 개선 Codelab을 확인하세요. Macrobenchmark 및 기타 성능 샘플이 포함된 성능 샘플 GitHub 저장소도 확인하세요. 참조 문서
|