벤치마킹

Android 스튜디오 내에서 코드 성능을 정확하게 측정합니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2026년 9월 9일 1.5.0 - - -

종속 항목 선언

Benchmark의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

Macrobenchmark

프로젝트에서 Macrobenchmark를 사용하려면 Macrobenchmark 모듈build.gradle 파일에 다음 종속 항목을 추가합니다.

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.5.0"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.5.0")
}

Microbenchmark

프로젝트에서 Microbenchmark를 사용하려면 마이크로벤치마크 모듈build.gradle 파일에 다음 종속 항목을 추가합니다.

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.5.0"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.5.0")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Microbenchmark 라이브러리는 microbenchmark 모듈에 사용할 Gradle 플러그인도 제공합니다. 이 플러그인은 모듈의 빌드 구성 기본값을 설정하고, 벤치마크 출력 사본을 호스트로 설정하며, ./gradlew lockClocks 작업을 제공합니다.

플러그인을 사용하려면 최상위 build.gradle 파일의 `plugins` 블록에 다음 행을 포함하세요.

Groovy

plugins {
  id 'androidx.benchmark' version '1.5.0' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.5.0" apply false
}

그런 다음 플러그인을 벤치마크 모듈의 build.gradle 파일에 적용합니다.

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.5

버전 1.5.0

2026년 9월 9일

androidx.benchmark:benchmark-*:1.5.0이 출시되었습니다. 버전 1.5.0에는 이러한 커밋이 포함되어 있습니다.

버전 1.5.0-rc02

2026년 8월 26일

androidx.benchmark:benchmark-*:1.5.0-rc02이 출시되었습니다. 버전 1.5.0-rc02에는 이러한 커밋이 포함되어 있습니다.

버전 1.5.0-rc01

2026년 8월 12일

androidx.benchmark:benchmark-*:1.5.0-rc01이 출시되었습니다. 버전 1.5.0-rc01에 포함된 커밋을 확인하세요.

버전 1.5.0-beta01

2026년 7월 29일

androidx.benchmark:benchmark-*:1.5.0-beta01이 출시되었습니다. 버전 1.5.0-beta01에는 이 커밋이 포함되어 있습니다.

API 변경사항

  • 이제 PerfettoCapturePerfettoTraceRule가 프로세스 내 트레이스를 캡처하고 타겟 패키지에 병합할 수 있습니다. (I9a00b, b/497959820)

버전 1.5.0-alpha07

2026년 7월 1일

androidx.benchmark:benchmark-*:1.5.0-alpha07이 출시되었습니다. 버전 1.5.0-alpha07에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • 기기에서 Perfetto 트레이스 캡처 간소화 (I48810)
  • 실험용 TraceProcessor.runServer 확장 프로그램 API를 androidx.benchmark:benchmark-macro에서 androidx.benchmark:benchmark-commonandroidx.benchmark 패키지로 이동 이렇게 하면 향후 마이크로벤치마크에서 사용할 수 있습니다. (Ie25bb, b/393640753)

버그 수정

  • Perfetto v56.0을 사용하도록 traceprocessor 구현 (번들 해제된 Perfetto 트레이스 캡처 포함) 업데이트 (I8fb9d)
  • 기본적으로 androidx.benchmark.requireAotandroidx.benchmark.requireAot를 true로 설정합니다. 이러한 더 안전한 기본값은 마이크로벤치마크를 실행하기 전에 컴파일이 실행되고(AGP 8.4 이상을 사용할 때 벤치마크 Gradle 플러그인으로 기본적으로 사용 설정됨) ANR을 일으킬 수 있는 기본 스레드에서 measureRepeated가 사용되지 않도록 합니다. (I1bc3c, b/379115078)
  • perfetto 종료 시간 제한이 5초에서 30초로 증가했습니다 (벤치마크에서 캡처된 Perfetto 세션만 해당). 문제가 발생할 때 더 명확한 오류 로깅이 추가되었습니다. (If188f, b/435589290)

버전 1.5.0-alpha06

2026년 5월 6일

androidx.benchmark:benchmark-*:1.5.0-alpha06이 출시되었습니다. 버전 1.5.0-alpha06에는 이러한 커밋이 포함되어 있습니다.

버그 수정

  • 벤치마크 출력 디렉터리에서 추가 테스트 출력 디렉터리로 파일을 이동할 때 멀티 사용자 환경을 적절하게 처리합니다. (I90da5, b/489358149)

버전 1.5.0-alpha05

2026년 3월 25일

androidx.benchmark:benchmark-*:1.5.0-alpha05이 출시되었습니다. 버전 1.5.0-alpha05에는 이러한 커밋이 포함되어 있습니다.

버그 수정

  • 최상위 패키지를 고려하도록 ArtMetric가 업데이트되었습니다. 이는 AGP/R8 9.1 이상 또는 -repackageclasses 전역 옵션을 사용할 때 특히 중요합니다. 이전에는 ArtMetricartClassLoad... 측정에서 이러한 클래스 로드를 감지하지 못했습니다. (If8a35, b/487402058)

새 기능 - 루팅된 기기에서 CPU 클럭이 잠겨 있는지 확인하는 기능을 사용 설정할 수 있는 새로운 계측 인수 androidx.benchmark.requireLockedClocks가 추가되었습니다. (Id82e8, b/468039042)

버전 1.5.0-alpha04

2026년 3월 11일

androidx.benchmark:benchmark-*:1.5.0-alpha04이 출시되었습니다. 버전 1.5.0-alpha04에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • JvmOverloadsPowerMetric.EnergyPowerMetric.Power에 추가했습니다 (Iac0d0, b/481371562).

버그 수정

  • 최상위 패키지를 고려하도록 ArtMetric가 업데이트되었습니다. 이는 AGP/R8 9.1 이상 또는 -repackageclasses 전역 옵션을 사용할 때 특히 중요합니다. 이전에는 ArtMetricartClassLoad... 측정에서 이러한 클래스 로드를 감지하지 못했습니다. (I207ca, b/487402058)

버전 1.5.0-alpha03

2026년 2월 11일

androidx.benchmark:benchmark-*:1.5.0-alpha03이 출시되었습니다. 버전 1.5.0-alpha03에는 이러한 커밋이 포함되어 있습니다.

  • UiAutomator 2.4 베타에 종속되도록 업데이트했습니다.

버전 1.5.0-alpha02

2026년 1월 28일

androidx.benchmark:benchmark-*:1.5.0-alpha02이 출시되었습니다. 버전 1.5.0-alpha02에는 이러한 커밋이 포함되어 있습니다.

버그 수정

  • Kotlin 멀티플랫폼 모듈의 기준 프로필 생성 부분 지원 추가 일반적으로 프로필의 종속 항목은 종속 항목 블록에서 baselineProfile Gradle 구성을 사용하여 정의할 수 있지만 현재 KMP 모듈에서는 작동하지 않습니다.

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • 대신 baselineProfile **확장 프로그램을 사용하여 종속 항목을 정의해야 합니다. (Ie19c4)

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

버전 1.5.0-alpha01

2025년 12월 17일

androidx.benchmark:benchmark-*:1.5.0-alpha01이 출시되었습니다. 버전 1.5.0-alpha01에는 이러한 커밋이 포함되어 있습니다.

  • Macrobenchmark 1.5는 UiAutomator 2.4를 사용하여 측정된 애플리케이션과의 상호작용을 단순화합니다. 이제 MacrobenchmarkScope 객체가 UiAutomatorTestScope를 확장하므로 onElement { ... }.click()과 같은 최신 UiAutomator API를 사용할 수 있습니다.
  • UiAutomator 2.4에 대한 자세한 내용은 문서를 참고하세요.

새로운 기능

  • 기준 프로필 Gradle 플러그인에서 AGP 9.0의 newDsl=false가 더 이상 필요하지 않음 (Iaaac7, b/443311090)
  • 벤치마크에서 캡처한 시스템/Perfetto 트레이드에 코어 크기 (예: little/big)를 포함하도록 트레이스 구성을 확장합니다. (I8e397, b/457469959)

API 변경사항

  • (UiAutomator에서) 새 창을 기다리도록 startActivity 대기 변경 (I35da6, b/440021797)
  • androidx.benchmark에서 BlackHole API 안정화 (I2b67e, b/451749438)
  • PerfettoTraceRule의 편의 생성자를 위해 @JvmOverloads 추가 (I1510a, b/443763207)

버전 1.4

버전 1.4.1

2025년 9월 10일

androidx.benchmark:benchmark-*:1.4.1이 출시되었습니다. 버전 1.4.1에는 이러한 커밋이 포함되어 있습니다.

버그 수정

  • perfettoSdkTracing=true (예: 마이크로벤치마크에서 Compose 추적 시)가 이미 실행 중이고 StartupMode가 지정되지 않은 경우 타겟 프로세스를 종료하는 문제를 수정했습니다. (Ib2c1f)

버전 1.4.0

2025년 7월 30일

androidx.benchmark:benchmark-*:1.4.0이 출시되었습니다. 버전 1.4.0에는 이러한 커밋이 포함되어 있습니다.

1.3.0 이후 중요 변경사항

Microbenchmark

  • Gradle 프로젝트 격리를 준수하기 위해 최상위 수준이 아닌 벤치마크 프로젝트에 Gradle 작업 lockClocksunlockClocks를 이동했습니다.
  • 코루틴을 기반으로 빌드되고 더 나은 yield() 동작을 지원하도록 BenchmarkRule 리팩터링 이렇게 하면 벤치마크 실행 중, 특히 긴 CI 실행 중에 ANR 위험이 크게 줄어듭니다. 참고: UI 벤치마크는 measureRepeatedOnMainThread로 실행해야 합니다.

Macrobenchmark

  • API 34 이상에서 CompilationMode.None()에 관한 해결 방법을 추가했습니다. ART의 지금 확인이 첫 번째 실행 후 앱을 부분적으로 컴파일하기 때문에 성능이 일관되지 않습니다.
  • 실험적 기능 - 시작 통계는 MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))를 전달하여 시작 Macrobenchmark의 특정 일반적인 문제를 강조 표시할 수 있습니다.
  • JIT 컴파일과 최적화되지 않은 클래스 로딩을 감지하는 데 사용할 수 있는 ArtMetric이 추가되었습니다. 둘 다 기준 프로필 최적화의 유효성을 검사하는 데 유용합니다.

기준 프로필

  • 이제 BaselineProfileRule에서 다중 프로세스 앱의 프로필을 수집합니다.

기타 변경사항

  • TraceProcessor가 자체 라이브러리 (androidx.benchmark:benchmark-traceprocessor)로 추출되어 다른 경우에 Macrobenchmark 측정항목 외부에서 사용할 수 있습니다. 자체 ServerLifecycleManager를 정의하여 데스크톱 JVM에서 실행할 수도 있습니다.

버전 1.4.0-rc01

2025년 6월 18일

androidx.benchmark:benchmark-*:1.4.0-rc01이 출시되었습니다. 버전 1.4.0-rc01에는 이 커밋이 포함되어 있습니다.

버그 수정

  • 첫 번째 반복 후 최악의 성능을 측정하지 않는 CompilationMode.None()의 원인이 되는 런타임 이미지의 해결 방법 추가 이 해결 방법에서는 각 macrobenchmark 모음 (I4a4f1) 시작 시 런타임 이미지를 의도적으로 손상시키기 위해 5초의 지연이 필요합니다.

버전 1.4.0-beta02

2025년 6월 4일

androidx.benchmark:benchmark-*:1.4.0-beta02이 출시되었습니다. 버전 1.4.0-beta02에는 이 커밋이 포함되어 있습니다.

API 변경사항

  • Java 개발자가 BaselineProfileRule.collectWithResults()를 더 쉽게 호출할 수 있도록 BaselineProfileConfig.Builder를 추가했습니다. (I94905)

버전 1.4.0-beta01

2025년 5월 7일

androidx.benchmark:benchmark-*:1.4.0-beta01이 출시되었습니다. 버전 1.4.0-beta01에는 이 커밋이 포함되어 있습니다.

API 변경사항

  • PerfettoConfig를 허용하는 PerfettoTraceRule 생성자 변형을 추가했습니다 (Ie53ba).

버그 수정

  • 올바른 플러그인과 더 명확한 구분 기호를 사용하도록 TraceProcessor 시작 통계 링크 형식을 업데이트했습니다 (:%3A보다 짧으며 둘 다 지원됨) (Ie18ef).
  • 루팅되고 시스템 앱을 종료하는 경우에도 항상 강제 종료를 사용하여 프로세스를 종료합니다. Expected no stdout/stderr from killall ... No such process 형식의 예외를 수정합니다. (Idca2c)

외부 기여

  • TraceProcessorHttpServer의 프록시 예외 핸들러 추가 (I480f5)

버전 1.4.0-alpha11

2025년 4월 9일

androidx.benchmark:benchmark-*:1.4.0-alpha11이 출시되었습니다. 버전 1.4.0-alpha11에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • TraceProcessor의 인수 timeout을 변경했습니다. Java 호출자 사용성을 위해 timeoutMs 기간이 길어집니다. (I9fbb5)
  • TraceProcessor 생성자를 내부로 표시 호출자는 TraceProcessor.startServer 또는 TraceProcessor.runServer를 사용해야 합니다. (Ia8c5b)

버그 수정

  • MacrobenchmarkScope.killProcess로 애플리케이션을 종료할 때 종료 명령어 결과를 검증하여 자동 실패 및 타임아웃 오류를 방지합니다. (I84555)

종속 항목 업데이트

  • 이제 이 라이브러리는 Kotlin 2.0 언어 수준을 타겟팅하며 KGP 2.0.0 이상이 필요합니다. (Idb6b5)

버전 1.4.0-alpha10

2025년 3월 26일

androidx.benchmark:benchmark-*:1.4.0-alpha10이 출시되었습니다. 버전 1.4.0-alpha10에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • TraceProcessor 서버 로드 및 쿼리의 기본 제한 시간을 120초 (이전 60/30초)로 늘리고 하나의 제한 시간 매개변수로 구성할 수 있도록 했습니다. (Ifec87)

버그 수정

  • profileinstaller 없이 앱의 프로필을 벤치마킹하거나 캡처할 때 발생하고 BroadcastReciever가 포함된 몇 가지 문제가 수정되었습니다. 이는 루팅된 기기에서 실행되는 경우에만 영향을 미칩니다. (Ied308)

버전 1.4.0-alpha09

2025년 3월 12일

androidx.benchmark:benchmark-*:1.4.0-alpha09이 출시되었습니다. 버전 1.4.0-alpha09에는 이러한 커밋이 포함되어 있습니다.

API 변경사항

  • 맞춤 수명 주기에서 더 쉽게 사용할 수 있도록 닫을 수 있는 핸들이 있는 TraceProcessor 및 세션 API를 추가했습니다. 또한 코루틴과 Java API를 더 쉽게 사용할 수 있도록 하는 단계이기도 합니다. TraceProcessor.runServer {} 확장 프로그램 함수는 향후 이동하고 실험적이지 않은 것으로 표시될 가능성이 있으므로 이제 실험적으로 표시됩니다. (I358b4)

버그 수정