6월 3일의 ⁠#Android11: 베타 버전 출시 행사에 참여하세요.

Benchmark

벤치마크 라이브러리를 사용하면 Android 스튜디오 내에서 Kotlin 기반 또는 자바 기반 코드를 쉽게 벤치마킹할 수 있습니다. 이 라이브러리는 준비 작업을 처리하고 코드 성능을 측정하며 벤치마킹 결과를 Android 스튜디오 콘솔에 출력합니다.

앱 또는 라이브러리에서 벤치마크 라이브러리를 사용하는 방법에 관한 자세한 내용은 벤치마크 앱 코드를 참조하세요.

최근 업데이트 현재 안정화 버전 다음 출시 후보 베타 버전 알파 버전
2019년 11월 20일 1.0.0 - - -

종속성 선언

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

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

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

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

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

플러그인을 사용하려면 최상위 수준 build.gradle 파일에 다음 classpath를 제공합니다.

    buildscript {
        repositories {
            google()
        }
        dependencies {
            classpath "androidx.benchmark:benchmark-gradle-plugin:1.0.0"
        }
    }
    

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

apply plugin: "androidx.benchmark"

의견

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

새 문제 만들기

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

버전 1.0.0

Benchmark 버전 1.0.0

2019년 11월 20일

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0androidx.benchmark:benchmark-junit4:1.0.0 버전은 1.0.0-rc01에서 변경사항 없이 출시되었습니다. 버전 1.0.0에는 이러한 커밋이 포함되어 있습니다.

1.0.0의 주요 기능

Benchmark 라이브러리를 사용하면 앱 코드의 성능 벤치마크를 작성하고 결과를 빠르게 얻을 수 있습니다.

빌드 및 런타임 구성 문제를 방지하고 기기 성능을 안정화하여 정확하고 일관된 측정을 보장합니다. Android 스튜디오에서 직접 또는 CI에서 벤치마크를 실행하여 시간 경과에 따른 코드 성능을 관찰하고 회귀 문제를 방지하세요.

주요 기능은 다음과 같습니다.

  • 클록 안정화
  • 자동 스레드 우선순위 지정
  • RecyclerView 샘플에서와 같은 UI 성능 테스트 지원
  • JIT 인식 준비 및 반복
  • 후처리를 위한 JSON 벤치마크 출력

버전 1.0.0-rc01

2019년 10월 23일

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01androidx.benchmark:benchmark-junit4:1.0.0-rc01 버전이 출시되었습니다. 버전 1.0.0-rc01에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • 벤치마크에 systrace 추적이 추가되었습니다.

버그 수정

  • 우선순위 해제로 인해 준비 작업을 하기 전에 JIT가 종료되지 않는 측정항목 불안정성 문제가 수정되었습니다. b/140773023을 참조하세요.
  • Android Gradle 플러그인 3.5 및 3.6 전반에 걸쳐 JSON 출력 디렉터리가 통합되었습니다.

버전 1.0.0-beta01

2019년 10월 9일

androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01androidx.benchmark:benchmark-junit4:1.0.0-beta01 버전이 출시되었습니다. 버전 1.0.0-beta01에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • 각 준비 작업 전에 가비지 컬렉션을 실행하여 한 벤치마크에서 다음 벤치마크로 누출되는 메모리 압력을 줄입니다. b/140895105를 참조하세요.

버그 수정

  • androidx.annotation:android-experimental-lint 종속성이 추가되었습니다. 이에 따라 Kotlin 실험용 주석에서 Kotlin 호출자에 제공하는 것과 유사한 실험용 API가 사용되지 않을 때 자바 코드가 린트 오류를 적절하게 생성합니다.
  • 이제 Android Gradle 플러그인 3.6에서 출력의 additionalTestOutputDir 계측 인수 사용을 정확하게 감지하여 AGP가 데이터 복사를 언제 처리하는지 알 수 있습니다.
  • JSON에서 감지되지 않은 클록 주파수를 수정하여 -1을 정확하게 인쇄합니다. b/141945670을 참조하세요.

버전 1.0.0-alpha06

2019년 9월 18일

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06androidx.benchmark:benchmark-junit4:1.0.0-alpha06 버전이 출시되었습니다. 버전 1.0.0-alpha06에는 이러한 커밋이 포함되어 있습니다.

새로운 기능

  • 테스트 실행기에 이전 패키지를 잘못 사용했는지 확인하는 기능이 추가되어 이제 더욱 유용한 오류 메시지를 제공합니다.

API 변경사항

  • 이제 실험용 주석 ExperimentalAnnotationReport가 적절하게 공개됩니다. 실험용 BenchmarkState#report API를 사용하려면 이제 이 주석이 필요합니다.

버전 1.0.0-alpha05

2019년 9월 5일

androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05androidx.benchmark:benchmark-junit4:1.0.0-alpha05 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API 변경사항

  • 이제 BenchmarkState.reportData API가 실험용으로 표시됩니다.

버그 수정

  • cut 또는 expr 셸 유틸리티가 누락된 기기에서 장애가 발생하는 클록 잠금 스크립트가 수정되었습니다.
  • -c 플래그를 지원하지 않는 이전 버전의 su 유틸리티로 루팅된 기기에서 ./gradlew lockClocks 작업이 중단되는 문제가 수정되었습니다.

버전 1.0.0-alpha04

2019년 8월 7일

androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04androidx.benchmark:benchmark-junit4:1.0.0-alpha04 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

다른 빌드 시스템(예: Bazel 또는 Buck)에서 사용하거나 CI에서 실행할 때 Gradle 없이 Benchmark 라이브러리를 사용하는 방법에 관한 새로운 문서도 추가되었습니다. 자세한 내용은 Gradle 없이 벤치마크 빌드지속적 통합에서 벤치마크 실행을 참조하세요.

새로운 기능

  • Gradle 플러그인
    • 이제 자동으로 테스트 적용 범위를 사용 중지하고 기본적으로 AndroidBenchmarkRunner를 설정합니다. b/138374050을 참조하세요.
    • 벤치마크를 실행하거나 AGP 3.6 이상을 사용할 때 새로운 AGP 기반 데이터 복사 지원이 추가되었습니다.
  • JSON 형식 추가
    • 총 벤치마크 테스트 실행 시간을 출력합니다. b/133147694를 참조하세요.
    • 이름 문자열(예: @Parameters(name = "size={0},depth={1}"))을 사용하는 @Parameterized 벤치마크가 이제 JSON 출력에서 벤치마크당 매개변수 이름 및 값을 출력합니다. b/132578772를 참조하세요.
  • Dry Run 모드. b/138785848을 참조하세요.
    • 각 벤치마크 루프를 한 번만 실행하는 'dry run' 모드를 추가하여 측정을 캡처하지 않고 오류/비정상 종료를 확인합니다. 예를 들어 사전 제출에서 벤치마크를 빠르게 실행하여 벤치마크가 깨지지 않았는지 확인하는 데 유용할 수 있습니다.

API 변경사항

  • 모듈 구조가 변경되었으며 라이브러리가 분할됩니다. b/138451391을 참조하세요.
    • benchmark:benchmark-junit4에는 JUnit 종속성이 있는 클래스, AndroidBenchmarkRunnerBenchmarkRule이 포함되며 이러한 클래스 둘 다 androidx.benchmark.junit4 패키지로 이동되었습니다.
    • benchmark:benchmark-common에는 BenchmarkState API를 비롯한 나머지 로직이 포함되어 있습니다.
    • 이 분할을 통해 앞으로 라이브러리는 JUnit4 API 없이 벤치마킹을 지원할 수 있습니다.
  • 이제 구성 경고는 오류로 처리되며 테스트를 비정상 종료합니다. b/137653596을 참조하세요.
    • 특히 CI에서 정확한 측정을 더욱 촉진하기 위해서입니다.
    • 이러한 오류는 계측 인수를 사용하여 경고로 다시 낮출 수 있습니다. 예를 들면 다음과 같습니다. -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

버그 수정

  • Q 기기에서 외부 저장소에 작성할 때 발생하는 오류는 문제 해결 방법을 제안하는 더 설명적인 메시지를 제공합니다.
  • 화면이 꺼질 때 실패하지 않고 벤치마크 실행 중에 화면이 자동으로 켜집니다.

외부 기여

  • JSON 출력 개선과 화면 꺼짐 문제 해결에 기여한 Sergey Zakharov에게 감사드립니다!

버전 1.0.0-alpha03

2019년 7월 2일

androidx.benchmark:benchmark:1.0.0-alpha03androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 전체 JSON 보고서에서 벤치마크당 열 제한으로 인한 절전 모드 지속 시간을 노출합니다.

버그 수정

  • Android 플러그인 및 Android 블록 이후 Gradle 플러그인을 더 이상 적용하지 않아야 합니다.
  • 범위 지정 저장소를 사용하여 Android 10 기기에서 벤치마크 보고서 지원을 추가합니다.

버전 1.0.0-alpha02

2019년 6월 6일

androidx.benchmark:1.0.0-alpha02androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

JSON 스키마를 API로 취급하고 있는 점에 주의하세요. 다른 API와 동일한 안정성 제약 조건을 따를 계획입니다. 베타 버전에서는 안정적(매우 드문 예외가 있지만)이고 최종 출시에서는 문제가 해결됩니다. 대규모 출시에서는 변경 및 삭제 사항이, 소규모 출시에서는 추가사항만 있습니다.

API 변경사항

  • JSON 스키마를 정비했습니다. JSON 스키마 추가 변경사항은 추가사항으로 제한될 수 있습니다.

    • 결과 객체 구조가 다시 구성되어 앞으로 추가 측정항목 그룹을 지원합니다. b/132713021을 참조하세요.
    • 테스트 실행 컨텍스트 정보(예: 기기 및 빌드 정보)와 클록 잠김 여부를 최상위 객체에 추가했습니다. b/132711920을 참조하세요.
    • 이제 시간 측정항목 이름에 ‘ns’가 있습니다. b/132714527을 참조하세요.
    • 보고된 측정항목(최댓값, 중앙값, 최솟값)별로 추가 통계를 추가하고 단순화된 'nanos' 요약 통계를 삭제했습니다. b/132713851을 참조하세요.
  • XML 출력을 삭제했습니다. b/132714414를 참조하세요.

  • 열 제한 감지를 BenchmarkState.reportData API에서 삭제했습니다. b/132887006을 참조하세요.

버그 수정

  • 일부 최신 OS 기기에서 ./gradlew lockClocks가 고정되지 않는 문제를 수정했습니다. b/133424037을 참조하세요.
  • 에뮬레이터의 제한 감지를 사용 중지했습니다. b/132880807을 참조하세요.

버전 1.0.0-alpha01

2019년 5월 7일

androidx.benchmark:benchmark:1.0.0-alpha01 버전이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.