Macrobenchmark 계측 인수

다음 계측 인수로 라이브러리의 동작을 구성합니다. Gradle 구성에 추가하거나 명령줄에서 계측을 실행할 때 직접 적용할 수 있습니다. 모든 Android 스튜디오 및 명령줄 테스트 실행에 이러한 인수를 설정하려면 인수를 testInstrumentationRunnerArguments에 추가하세요.

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

Android 스튜디오 벤치마크를 실행할 때 계측 인수를 설정할 수도 있습니다. 인수를 변경하려면 다음 단계를 따르세요.

  1. Edit를 클릭한 후 구성을 클릭하여 실행 구성을 수정합니다.
    실행 구성 수정
    그림 1. 실행 구성 수정
  2. 계측 인수 More를 클릭하여 계측 인수를 수정합니다.
    계측 인수 수정
    그림 2. 계측 인수 수정
  3. Instrumentation Extra Params에서 Add를 클릭하여 필수 계측 인수를 추가합니다.
    필수 계측 인수 추가
    그림 3. 필수 계측 인수 추가

명령줄에서 macrobenchmark를 실행하는 경우 -P android.testInstrumentationRunnerArguments.[name of the argument]를 사용합니다.

./gradlew :benchmark:connectedAndroidTest -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile

am instrument 명령어를 직접 호출하는 경우 (CI 테스트 환경에서 해당할 수 있음) -e를 사용하여 인수를 am instrument에 전달합니다.

adb shell am instrument -e androidx.benchmark.enabledRules BaselineProfile -w com.example.macrobenchmark/androidx.test.runner.AndroidJUnitRunner

CI에서 벤치마크를 구성하는 방법에 관한 자세한 내용은 CI의 벤치마킹을 참고하세요.

androidx.benchmark.compilation.enabled

벤치마크의 각 반복 사이에 컴파일을 사용 중지할 수 있습니다. 기본적으로 타겟 애플리케이션은 다시 설치되고 각 벤치마크 간에 다시 컴파일되어, measureRepeated에 전달된 CompilationMode를 준수합니다. 예를 들어 테스트 모음을 실행하기 전에 타겟 앱을 한 번 완전히 컴파일하고 완전히 컴파일된 타겟에 모든 벤치마크를 실행하려는 경우 이 기능을 사용 중지하면 재설치와 컴파일을 모두 건너뛸 수 있습니다.

  • 인수 유형: 부울
  • 기본값: true

androidx.benchmark.dryRunMode.enable

단일 루프에서 벤치마크를 실행하여 제대로 작동하는지 확인할 수 있습니다. 확인 과정의 일부로 일반 테스트와 함께 사용할 수 있습니다.

  • 인수 유형: 부울
  • 기본값: false

androidx.benchmark.enabledRules

한 가지 유형의 테스트(기준 프로필 생성 또는 Macrobenchmark 테스트)에만 필터링 실행을 허용합니다. 쉼표로 구분된 목록도 지원됩니다.

  • 인수 유형: 문자열
  • 사용 가능한 옵션:
    • Macrobenchmark
    • BaselineProfile
  • 기본값: 지정되지 않음

androidx.benchmark.junit4.SideEffectRunListener

벤치마크가 실행되는 동안 관련 없는 백그라운드 작업이 실행되면 일관되지 않은 벤치마크 결과가 발생할 수 있습니다.

벤치마킹 중에 백그라운드 작업을 사용 중지하려면 listener 계측 인수 유형을 androidx.benchmark.junit4.SideEffectRunListener로 설정하세요.

  • 인수 유형: 문자열
  • 사용 가능한 옵션:
    • androidx.benchmark.junit4.SideEffectRunListener
  • 기본값: 지정되지 않음

androidx.benchmark.fullTracing.enable

Jetpack Compose 컴포지션 추적과 같은 androidx.tracing.perfetto tracepoint를 사용 설정합니다.

벤치마크에서 컴포지션 추적을 캡처할 수 있도록 프로젝트를 설정해야 합니다. 자세한 내용은 Jetpack Macrobenchmark로 트레이스 캡처를 참고하세요.

  • 인수 유형: 부울
  • 기본값: false

androidx.benchmark.profiling.mode

벤치마크를 실행하는 동안 추적 파일을 캡처할 수 있습니다. 사용 가능한 옵션은 Microbenchmark 라이브러리의 옵션과 동일합니다. 자세한 내용은 Microbenchmark 프로파일링의 설명을 참고하세요.

  • 인수 유형: 문자열
  • 사용 가능한 옵션:
    • MethodTracing
    • StackSampling
    • None
  • 기본값: None

androidx.benchmark.startupProfiles.enable

벤치마킹 중에 시작 프로필 생성을 중지할 수 있습니다.

  • 인수 유형: 부울
  • 기본값: true

androidx.benchmark.suppressErrors

쉼표로 구분된 오류 목록이 경고로 전환되도록 허용합니다.

  • 인수 유형: 문자열 목록
  • 사용 가능한 옵션:

    • DEBUGGABLE

      DEBUGGABLE 오류는 타겟 패키지가 매니페스트에서 debuggable=true로 실행 중임을 나타내며 이는 디버깅 기능을 지원하기 위해 런타임 성능을 크게 감소시킵니다. 이 오류를 방지하려면 debuggable=false로 벤치마크를 실행하세요. 디버그 가능 인수는 벤치마크 개선사항이 실제 사용자 환경으로 이어지지 않거나 출시 성능이 저하될 수 있는 방식으로 실행 속도에 영향을 미칩니다.

    • LOW-BATTERY

      배터리가 부족할 때 기기는 남아 있는 배터리를 절약하기 위해 성능을 저하시키는 경우가 많습니다(예: 빅 코어 사용 중지). 이는 기기가 연결되어 있을 때도 발생합니다. 성능이 저하된 앱을 의도적으로 프로파일링하는 경우에만 이 오류를 억제하세요.

    • EMULATOR

      EMULATOR 오류는 벤치마크가 실제 사용자 기기를 대표하지 않는 에뮬레이터에서 실행 중임을 알려줍니다. 에뮬레이터 벤치마크 개선사항이 실제 사용자 환경에 적용되지 않거나 실제 기기 성능이 저하될 수 있습니다. 대신 실제 기기를 사용하여 벤치마킹해야 합니다. 매우 신중하게 이 오류를 억제합니다.

    • NOT-PROFILEABLE

      타겟 패키지 $packageName<profileable shell=true> 없이 실행됩니다. Android 10 및 11에서 Macrobenchmark가 앱 또는 라이브러리에 정의된 시스템 추적 섹션과 같은 타겟 프로세스에서 자세한 트레이스 정보를 캡처할 수 있도록 하려면 Profileable이 필요합니다. 매우 신중하게 이 오류를 억제합니다.

    • METHOD-TRACING-ENABLED

      벤치마킹되는 앱의 Macrobenchmark 실행에는 메서드 추적이 사용 설정되어 있습니다. 이로 인해 VM 실행 속도가 평소보다 느려지므로 첫 번째 실행과 두 번째 실행의 속도를 비교하는 경우와 같이 상대적 측면에서만 트레이스 파일의 측정항목을 고려하세요. 이 오류를 억제하면 다른 메서드 추적 옵션과 빌드의 벤치마크를 비교하는 경우 결과가 부정확할 수 있습니다.

  • 기본값: 빈 목록

additionalTestOutputDir

JSON 벤치마크 보고서 및 프로파일링 결과를 저장할 기기 내 위치를 구성합니다.

  • 인수 유형: 경로 문자열
  • 기본값: 테스트 APK의 외부 디렉터리