Microbenchmark 프로파일링

기본적으로 Microbenchmark는 실행된 코드의 타이밍과 할당에 관한 정보를 제공합니다. 측정된 코드가 느리게 실행되는 이유를 조사하려면 CPU 프로파일러가 연결된 벤치마크를 실행하면 됩니다.

프로파일러 구성을 선택하려면 다음 스니펫에서 볼 수 있듯이 MethodTracing ,StackSampling, None 인수 중 하나와 함께 계측 실행기 인수 androidx.benchmark.profiling.mode를 추가합니다.

옵션에 관한 자세한 내용은 기록 구성 선택을 참고하세요. MethodTracing은 'Java 메서드 추적하기'와 같고 StackSampling은 해당 문서에 정의된 '샘플 Java 메서드'와 같습니다.

Groovy

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'
    }
}

Kotlin

android {
    defaultConfig {
        // must be one of: 'None', 'StackSampling', or 'MethodTracing'
        testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling"
    }
}

벤치마크를 프로파일링하면 출력 .trace 파일이 JSON 결과와 함께 호스트의 디렉터리에 복사됩니다. Android 스튜디오의 CPU 프로파일러에서 프로파일링 결과를 검사하려면 File > Open을 선택합니다. 트레이스 읽기 및 이해에 관한 자세한 내용은 트레이스 검사를 참고하세요.

MethodTracing

메서드 트레이스는 다른 메서드보다 실행 시간이 오래 걸리는 메서드를 식별하는 데 도움이 되도록 코드를 최적화하려는 경우에 유용합니다. 이렇게 하면 성능에 가장 큰 영향을 미치는 메서드를 최적화하는 데 집중할 수 있습니다.

프로파일링은 코드 측정 후 순서대로 발생하므로 테스트에서 정확한 타이밍과 프로파일링 결과를 모두 출력합니다.

StackSampling

샘플 트레이스는 메서드 트레이스의 성능 오버헤드 없이 비용이 많이 드는 메서드를 식별하는 데도 도움이 됩니다. 그러나 호출 스택이 캡처된 후에 앱에서 메서드가 시작되고 다음 캡처 전에 메서드가 종료되면 메서드 호출이 로깅되지 않습니다. 수명 주기가 짧은 메서드를 올바르게 추적하려면 샘플 트레이스 대신 메서드 트레이스를 사용하세요.

스택 샘플링을 사용하면 준비가 완료된 후에 벤치마크가 호출 스택을 샘플링합니다. 계측 인수를 사용하여 샘플링 빈도샘플링 지속 시간을 제어할 수 있습니다.

Android 10(API 29) 이상에서 스택 샘플링은 Simpleperf를 사용하여 C++ 코드를 비롯한 앱 호출 스택을 샘플링합니다. Android 9(API 28) 이하에서는 Debug.startMethodTracingSampling을 사용하여 스택 샘플을 캡처합니다.

다른 계측 인수를 추가하여 이 프로파일링 모드를 구성할 수 있습니다.

  • androidx.benchmark.profiling.sampleFrequency

    • 초당 캡처하는 스택 샘플 수
    • 인수 유형: 정수
    • 기본값: 초당 샘플 1,000개
  • androidx.benchmark.profiling.sampleDurationSeconds

    • 벤치마크 실행 시간
    • 인수 유형: 정수
    • 기본값: 5초

없음

이 인수는 프로파일링 파일을 캡처하지 않습니다. 타이밍 및 할당에 관한 정보는 계속 측정됩니다.