Android Macrobenchmark

2023. 7. 26. 11:09개발/Android

💡
해당 내용은 성능측정 및 개선을 위한 macrobenchmark를 사용하는 방법이다

Jetpack Macrobenchmark

  • 앱의 성능을 측정 및 벤치마킹 하기위한 라이브러리이다. Android Studio에서 직접 결과를 제공하고, 결과를 JSON 파일에 기록한다.
  • 로컬 측정 및 CI의 성능 테스트에도 모두 적합하다

프로젝트에 benchmark추가

→ 최소 arctic fox 2020.3.1이 필요함

  1. 모듈 새로 만들기

  1. 모듈 템플릿에서 벤치마크로 생성
  1. 벤치마크 모듈 유형으로 macrobenchamark를 선택
  1. 벤치마킹의 최소 sdk는 android6(API 레벨 23)이상이 필요함

  • 마법사는 아래와 같은 작업을 수행함
    • 매크로벤치마크용 모듈을 생성함. com.android.test
    • debuggable 을 false로, signingConfig 를 debug로 설정하는 benchmark buildType을 추가함
    • <profileable> 태그를 AndroidManifest에 추가합니다
    • 기본 시작 벤치마크 스캐폴드를 만든다

앱 시작 측정

// Copyright 2022 Google LLC.	
// SPDX-License-Identifier: Apache-2.0

@RunWith(AndroidJUnit4::class)
class StartupBenchmark {
   @get:Rule
   val benchmarkRule = MacrobenchmarkRule()

   @Test
   fun startup() = benchmarkRule.measureRepeated(
       packageName = "com.google.samples.apps.sunflower",
       metrics = listOf(StartupTimingMetric()),
       iterations = 5,
       startupMode = StartupMode.COLD,
   ){
        pressHome()
        startActivityAndWait()
   }
}
  • Macrobenchmark는 일반 계측 단위 테스트이므로 JUnit 구문( @RunWith@Rule@Test등)을 사용합니다. 벤치마크를 작성할 때 진입점은 measureRepeated의 함수 이며 MacrobenchmarkRule여기서 최소한 다음 매개변수를 지정해야 합니다.
    • packageName 벤치마크는 별도의 프로세스에서 실행되기 때문에 측정할 앱을 지정해야 합니다.
    • metrics 캡처된 주요 정보 유형입니다. 
    • iterations 루프가 반복되는 횟수. 
    • measureBlock (마지막 람다 매개변수) – Macrobenchmark는 이 블록 동안 정의된 메트릭을 추적하고 기록함. 여기에서 측정하려는 작업을 수행함.

CompilationMode선택적으로 StartupMode를 지정할 수도 있음.

CompilationMode 는 애플리케이션이 기계 코드로 사전 컴파일되는 방법을 정의하며 다음 옵션이 있음.

  • None()

    – 앱을 사전 컴파일하지 않지만 앱 실행 중에 JIT가 계속 활성화됨

  • Partial()

    – 기본 프로필 및/또는 준비 실행으로 앱을 사전 컴파일함

  • Full()

    – 전체 앱을 미리 컴파일함. Android 6(API 23) 이하에서는 유일한 옵션

 StartupMode 를 사용하면 벤치마크 시작 시 애플리케이션을 시작하는 방법을 정의할 수 있음. 

사용 가능한 옵션은 COLDWARMHOT

StartupMode.COLD앱이 수행해야 하는 가장 큰 작업량을 나타내는 것

  • 구체적인 사용기를 작성해볼것


Uploaded by N2T

'개발 > Android' 카테고리의 다른 글

AAC  (0) 2023.07.26
알아두면 좋은 Kotlin extension  (0) 2023.07.26
Baseline Profiles  (0) 2023.07.26
Fragment 에서 데이터를 주고받는 방법  (0) 2023.07.26
Android Jetpack security  (0) 2023.07.26