컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Benchmark

Android 스튜디오 내에서 코드 성능을 정확하게 측정합니다.
최근 업데이트 공개 버전 출시 후보 베타 버전 알파 버전
2022년 9월 7일 1.1.0 - - 1.2.0-alpha03

종속 항목 선언

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

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

Macrobenchmark

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

Groovy

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

Kotlin

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

Microbenchmark

Groovy

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

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

Kotlin

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

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

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

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

Groovy

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

Kotlin

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

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

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

의견

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

새 문제 만들기

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

버전 1.2

버전 1.2.0-alpha03

2022년 9월 7일

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

새로운 기능

  • BenchmarkRule / JUnit4과 별개로 BenchmarkState를 독립적으로 사용하기 위한 실험용 API를 추가했습니다. (Id478f, b/228489614)

버그 수정

  • startActivityAndWait의 Leanback 대체를 추가했습니다. (01ed77, b/242899915)

버전 1.2.0-alpha02

2022년 8월 24일

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

API 변경사항

  • 루팅된 경우에도 MacrobenchmarkScope.killProcess()의 기본값을 am force stop으로 설정합니다(기준 프로필 생성 중에는 제외). 이는 불리언 인수(선택사항)를 사용하여 재정의할 수 있습니다. (02cce9, b/241214097)

버그 수정

  • 시스템 앱의 기준 프로필 생성을 지원합니다. (I900b8, b/241214097)
  • 루팅되지 않은 기기에서 ODPM 전원 측정항목 확인을 지원합니다. (a38c78, b/229623230)

버전 1.2.0-alpha01

2022년 7월 27일

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

새로운 기능

  • 새로운 tracing-perfetto-common 구성요소를 사용하면 도구를 사용하여 이를 노출하는 앱에서 Perfetto SDK 추적을 사용 설정할 수 있습니다(I2cc7f).
  • 벤치마크 또는 기본 프로필 생성으로 macrobenchmark 실행을 필터링할 수 있도록 androidx.benchmark.enabledRules 계측 인수를 추가했습니다. 'Macrobenchmark' 또는 'BaselineProfile'을 전달하여 한 가지 테스트 유형만 실행합니다(예: 에뮬레이터에서 BaselineProfiles를 생성할 때). 쉼표로 구분된 목록도 지원됩니다(I756b7, b/230371561).

    매크로벤치마크의 build.gradle에서 예를 들면 다음과 같습니다.

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    또는 Gradle 명령줄에서 예를 들면 다음과 같습니다.

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

API 변경사항

  • 벤치마크에서 에너지 및 전력 작업을 측정하는 새로운 PowerMetric을 추가했습니다(I9f39b, b/220183779).
  • 프로필 재설정 및 컴파일을 건너뛰는 새로운 컴파일 모드 CompilationMode.Ignore를 추가했습니다(Ibbcf8, b/230453509).
  • 패키지 이름에 따라 출력 파일을 필터링하도록 BaselineProfileRule#collectBaselineProfile에 새 매개변수를 추가했습니다(If7338, b/220146561).
  • 개발자가 기기를 방전하여 전력 소모를 측정할 수 있습니다(I6a6cb).
  • MacrobenchmarkScope에서 셰이더 캐시를 지우는 기능을 추가했습니다(I32122).
  • 개발자가 하위 시스템 카테고리에 필요한 측정항목 유형 및 세부정보의 표시를 구성할 수 있습니다(I810c9).
  • 이전에는 지원되지 않는 기기에서 실행되는 경우 벤치마크에서 UnsupportedOperationException이 발생했습니다. 이제는 측정항목이 지원되지 않는 기기에서 사용(PowerMetric.configure)되는 경우에만 UOE가 발생합니다(I5cf20, b/227229375).
  • macrobenchmark의 각 시스템 카테고리에서 총 전력과 에너지를 측정하는 TotalPowerMetricTotalEnergyMetric을 추가했습니다(I3b26b, b/224557371).

버그 수정

  • 컴파일된 메서드가 루팅되지 않은 빌드의 각 벤치마크 간에 올바르게 재설정되지 않는 문제를 수정했습니다. 이를 위해서는 반복할 때마다 APK를 다시 설치해야 하고 그러면 각 macrobenchmark의 애플리케이션 데이터가 삭제됩니다(I31c74, b/230665435).
  • API 21/22에서 트레이스 기록 비정상 종료 문제를 해결했습니다(If7fd6, b/227509388, b/227510293, b/227512788).
  • 활동 실행 완료 감지를 점검하여 시작 macrobenchmark에서 '측정항목을 읽을 수 없음' 예외 문제를 해결했습니다. 해결했습니다(Ia517c).

버전 1.1.0

버전 1.1.0

2022년 6월 15일

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

  • 이 버전은 androidx.benchmark:benchmark-*:1.1.0-rc03과 동일합니다.

1.0.0 이후 중요 변경사항

버전 1.1.0-rc03

2022년 6월 1일

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

버그 수정

버전 1.1.0-rc02

2022년 5월 11일

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

  • 이 버전에는 동작 변경사항이 포함되어 있습니다. 이제 정확한 측정을 보장하기 위해 각 벤치마크 간에 앱이 완전히 재설치되기 때문입니다.

버그 수정/동작 변경사항

  • 앱 컴파일이 매크로벤치마크 간에 올바르게 재설정되지 않고 루팅되지 않은 빌드에서 전혀 재설정되지 않는 문제를 수정했습니다. 이렇게 하면 여러 테스트를 실행할 때 CompilationMode가 측정에 거의 또는 전혀 영향을 미치지 않는 여러 사례가 수정됩니다. 이 문제를 해결하기 위해 이제 타겟 앱이 각 테스트 메서드를 완전히 재설치하여 각 매크로벤치마크 간의 애플리케이션 데이터를 지웁니다. (I31c74, b/230665435)

  • 이렇게 하면 앱이 테스트 전에 상태를 설정할 수 없으므로 이제 이 문제를 해결하기 위해 컴파일/재설치를 건너뛸 수 있습니다. 예를 들어 셸 명령어 cmd package compile -f -m speed <package>를 사용하여 타겟을 완전히 컴파일하고 매크로벤치마크의 컴파일 단계를 우회할 수 있습니다.

    매크로벤치마크의 build.gradle에서 예를 들면 다음과 같습니다.

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    또는 Gradle 명령줄에서 예를 들면 다음과 같습니다.

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • androidx.benchmark.enabledRules 계측 인수를 추가하여 매크로벤치마크 및 테스트를 생성하는 기준 프로필 간에 모듈을 공유할 수 있게 되었습니다. 'Macrobenchmark' 또는 'BaselineProfile'을 전달하여 한 가지 테스트 유형만 실행합니다(예: 에뮬레이터에서 BaselineProfiles를 생성할 때). (I756b7, b/230371561)

    매크로벤치마크의 build.gradle에서 예를 들면 다음과 같습니다.

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    또는 Gradle 명령줄에서 예를 들면 다음과 같습니다.

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

버전 1.1.0-rc01

2022년 4월 20일

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

버그 수정

  • 이제 Android 스튜디오의 기준 프로필 출력 링크에 고유 파일 이름이 사용됩니다. 이렇게 하면 항상 BaselineProfileRule 사용의 최신 결과가 출력에 반영됩니다. (aosp/2057008, b/228203086)

버전 1.1.0-beta06

2022년 4월 6일

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

버그 수정

  • API 21/22에서 트레이스 기록 비정상 종료 문제를 해결했습니다. (If7fd6, b/227509388)
  • 활동 실행 완료 감지를 점검하여 시작 macrobenchmark에서 '측정항목을 읽을 수 없음' 예외 문제를 해결했습니다. (Ia517c)
  • CompilationMode.None()이 사용되는 경우 Macrobenchmarks의 시작 측정항목을 수정합니다. 이 변경 전에는 CompilationMode.Partial()Compilation.None()보다 더 느린 것으로 보였습니다. (611ac9).

버전 1.1.0-beta05

2022년 3월 23일

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

버그 수정

버전 1.1.0-beta04

2022년 2월 23일

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

버그 수정

  • Android 10에서 누락된 측정항목과 트레이스에서 올바르게 캡처되지 않은 프로세스 이름으로 발생한 NoSuchElementException 문제를 수정합니다. (Ib4c17, b/218668335)

  • Q(API 29) 이상에서 열 제한 감지에 PowerManager를 사용합니다. 이렇게 하면 열 제한 감지의 거짓양성 빈도가 크게 줄어들고(90초 쿨다운 후 벤치마크 재시도) 사용자 빌드에서 벤치마크 속도가 크게 향상됩니다. 또한 시계가 잠겨 있는 경우에도(기기의 실제 환경에 비해 너무 높은 상태로 잠긴 경우) 제한 감지 기능을 제공합니다. (I9c027, b/217497678, b/131755853)

  • simpleperf 샘플링된 프로파일링을 measureRepeated 스레드로만 필터링하여 검사를 간소화합니다. (Ic3e12, b/217501939)

  • 다중 프로세스 앱에서 명명된 UI 하위 프로세스의 측정항목을 지원합니다. (Ice6c0, b/215988434)

  • Android 9(SDK 28)를 타겟팅하도록 기준 프로필 규칙을 필터링합니다. aosp/1980331 b/216508418

  • Compilation.None() 사용 시 프로필 설치를 건너뜁니다. 또한 앱에서 이전 버전의 androidx.profileinstaller 및 Android Gradle 플러그인을 사용하는 경우 경고를 보고합니다. aosp/1977029

버전 1.1.0-beta03

2022년 2월 9일

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

API 변경사항

  • 오디오 언더런을 감지할 수 있도록 실험용 플래그 아래에 있는 macrobenchmark 라이브러리에 AudioUnderrunMetric을 추가했습니다. (Ib5972)
  • BaselineProfileRule은 더 이상 setup 블록을 허용하지 않습니다. 이 블럭이 profileBlock과 동일하게 기능하기 때문입니다. (Ic7dfe, b/215536447)

    예:

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

버그 수정

  • 스튜디오 출력에 연결되면 이후 실행에서 마이크로벤치 프로파일러 트레이스가 업데이트되지 않는 문제가 수정되었습니다. (I5ae4d, b/214917025)
  • API 23에서 컴파일 셸 명령어를 방지합니다. (Ice380)
  • FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi로 이름을 변경했습니다. 이들 항목이 타임스탬프가 아닌 지속 시간임을 명확히 하고 접두사와 일치시키기 위함입니다. (I0eba3, b/216337830)

버전 1.1.0-beta02

2022년 1월 26일

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

버그 수정

  • 이제 Microbenchmark 스택 샘플링/메서드 추적 프로필 결과가 다른 프로파일링 출력과 유사하게 스튜디오 출력에서 연결되며 할당 측정항목을 차단하지 않습니다. (Idcb65, b/214440748, b/214253245)
  • 이제 BaselineProfileRule이 생성된 BaselineProfile 텍스트 파일을 가져오려고 logcat 및 스튜디오 출력에 adb pull 명령어를 인쇄합니다. (f08811)

버전 1.1.0-beta01

2022년 1월 12일

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

버그 수정

  • 그동안 무시되던 프로파일러 인수 사용을 수정합니다. (I37373, b/210619998)
  • 지원 중단된 CompliationModes를 삭제했습니다. (I98186, b/213467659)
  • 명확성을 위해 CompilationMode.Partial의 기준 프로필 인수를 enum으로 전환했습니다. (Id67ea)

버전 1.1.0-alpha13

2021년 12월 15일

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

API 변경사항

  • Android Q(API 29 이상)의 마이크로벤치 출력에 오버헤드가 낮은 시스템 추적을 추가했습니다. 현재 이 도구는 결과에 영향을 주지 않기 위해 android.os.Trace 또는 androidx.tracing Jetpack API를 통해 맞춤 추적을 캡처하지 않습니다. 이 추적은 벤치마크 외의 소스에서 불안정성을 진단하는 데 특히 유용합니다. (I298be, b/205636583, b/145598917)
  • CompilationModes를 세 가지 클래스(Full, None, Partial)로 명확하게 구분했습니다. 이전에는 각 이름이 컴파일 인수(현재는 구현 세부정보로 처리됨)와 기능의 이름을 따라 일관되지 않았습니다. 이 변화를 통해 절충점, 가능한 조합, 플랫폼 버전에서의 동작이 좀 더 명확하게 알 수 있습니다. (I3d7bf, b/207132597)
  • 이제 설정과 측정이 항상 쌍으로 순서대로 표시됩니다. 그리고 이제 특정 준비 시나리오에서 반복이 null일 수 있더라도 패키지 이름과 반복을 쿼리할 수 있습니다. (Id3b68, b/208357448, b/208369635)

버그 수정

  • CompilationMode.SpeedNone으로 잘못 처리되는 문제를 해결했습니다. (I01137)

버전 1.1.0-alpha12

2021년 11월 17일

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

새로운 기능

  • 트레이스 기반의 타이밍을 맞춤 측정하기 위해 실험용 TraceSectionMetric을 추가했습니다. (I99db1, b/204572664)

버그 수정

  • UI를 테스트할 수 있도록 반복할 때마다 기기의 절전 모드를 해제합니다. 잠금 화면이 사용 중지되어 있어야 합니다. (Ibfa28, b/180963442)
  • 에뮬레이터와 루팅되지 않은 기기의 StackSampling 프로파일링 모드에서 발생하는 여러 비정상 종료 문제를 수정했습니다. (Icdbda, b/202719335)
  • 각 반복의 끝에 있던 0.5초의 절전 모드를 삭제했습니다. 이 변경사항이 측정항목에서 누락되어 있다면 버그를 신고하세요. (Iff6aa)
  • 데이터 삭제 가능성을 줄이고 트레이스에서 발생하는 메모리 오버헤드를 낮추었습니다. (Id2544, b/199324831, b/204448861)
  • 컴팩트 sched 저장소 형식으로 전환하여 트레이스 크기를 최대 40% 줄이세요. (Id5fb6, b/199324831)
  • 항상 RenderThread의 끝에서 종료되도록 시작 측정항목의 구현을 업데이트했습니다. 이는 플랫폼 버전 전반에서 더 일관성 있고 인앱 측정에 더 밀접하게 매핑됩니다. (Ic6b55)

버전 1.1.0-alpha11

2021년 11월 3일

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

API 변경사항

  • 이제 Macrobenchmark의 minSdkVersion23입니다. (If2655)
  • 앱의 중요한 사용자 여정을 위한 기준 프로필을 생성할 수 있는 새로운 실험용 BaselineProfileRule을 추가했습니다. 자세한 내용이 설명된 문서를 제공할 예정입니다. (Ibbefa, b/203692160)
  • 자바 호출자를 위해 추가된 measureRepeated 인터페이스 변형을 삭제했습니다. 메서드를 완료/확인할 때 모호성을 유발하기 때문입니다. 자바 호출자는 다시 measureRepeated에서 Unit.Instance를 반환해야 합니다. 이렇게 하는 것이 불편하다면 버그를 신고해 주세요. 향후 버전에서 다시 논의할 수 있습니다. (Ifb23e, b/204331495)

버전 1.1.0-alpha10

2021년 10월 27일

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

API 변경사항

  • StartupTimingMetric이 작동하도록 다시 API 23으로 백포팅합니다. 또한 이 새로운 구현은 reportFullyDrawn()을 더 잘 처리하여 상응하는 콘텐츠가 렌더링될 때까지 기다리도록 합니다. (If3ac9, b/183129298)
  • 자바 호출자를 위한 여러 MacrobenchmarkScope 메서드에 JvmOverloads를 추가했습니다. (I644fe, b/184546459)
  • 자바 언어에서 관용적 사용을 위해 Consumer<MacrobenchmarkScope>를 사용하는 대체 MacrobenchmarkRule.measureRepeated 함수를 제공합니다. (If74ab, b/184546459)

버그 수정

  • 트레이스가 충분히 일찍 시작되지 않아 측정항목 데이터가 누락되는 문제를 수정했습니다. 라이브러리 자체로 인한 '벤치마크 중에 측정항목을 읽을 수 없음' 예외가 수정될 것으로 예상합니다. (I6dfcb, b/193827052, b/200302931)
  • FrameNegativeSlack을 FrameOverrun으로 이름을 바꿔 의미를 명확히 했습니다. 이는 프레임이 시간 예산을 초과한 정도를 나타냅니다. (I6c2aa, b/203008701)

버전 1.1.0-alpha09

2021년 10월 13일

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

버그 수정

  • API 31/S+에서 루트 없이 커널 페이지 캐시를 삭제할 수 있습니다. 이로써 StartupMode.COLD 실행의 정확성이 향상됩니다. (Iecfdb, b/200160030)

버전 1.1.0-alpha08

2021년 9월 29일

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

API 변경사항

  • 스크롤 Macrobenchmark를 사용 설정하여 API 23으로 다시 실행합니다. (If39c2, b/183129298)
  • 반복당 여러 샘플의 백분위수에 중점을 둔 새로운 유형의 샘플링된 측정항목을 UI 및 JSON 출력에 추가합니다. (I56247, b/199940612)
  • Benchmark 라이브러리 전체에서 부동 소수점 측정항목으로 전환합니다(스튜디오 UI에서 잘림). (I69249, b/197008210)

버전 1.1.0-alpha07

2021년 9월 1일

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

API 변경사항

  • 향후 지원될 가장 낮은 API 수준을 반영하기 위해 최소 API를 21로 높였습니다. 지원되는 현재 최소 API는 계속해서 RequiredApi()를 통해 전달되고 현재는 29입니다. (I440d6, b/183129298)

버그 수정

  • 기준 프로필을 사용하는 앱이 CompilationMode.BaselineProfile로 MacroBenchmarks를 더 쉽게 실행하도록 ProfileInstaller를 수정했습니다. (I42657, b/196074999) 참고: androidx.profileinstaller:profileinstaller:1.1.0-alpha04 이상으로 업데이트도 해야 합니다.
  • StartupMode.COLD + CompilationMode.None 벤치마크가 더 안정화되었습니다. (I770cd, b/196074999)

버전 1.1.0-alpha06

2021년 8월 18일

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

API 변경사항

  • 로컬에서 테스트/프로파일링할 때 반복 횟수를 수동으로 재정의할 수 있도록 androidx.benchmark.iterations 계측 인수를 추가했습니다. (6188be, b/194137879)

버그 수정

  • API 29 이상에서 Simpleperf를 기본 샘플링 프로파일러로 전환했습니다. (Ic4b34, b/158303822)

알려진 문제

  • CompilationMode.BaselineProfile은 진행 중인 작업입니다. 프로필의 현재 상태를 확인하는 데 사용하지 마세요.

버전 1.1.0-alpha05

2021년 8월 4일

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

산발적인 비정상 종료로 인해 출시 전에 1.1.0-alpha04가 취소되었습니다. (b/193827052)

API 변경사항

  • am start를 통해 실행을 호출하도록 startActivityAndWait를 전환했습니다. 이로 인해 각 측정 반복 시간이 5초 정도 단축되지만 그로 인해 더 이상 인텐트 parcelable이 지원되지 않습니다. (I5a6f5, b/192009149

버그 수정

  • 열 제한 감지의 강도를 줄이고, 제한이 자주 감지되는 경우 기준을 다시 계산합니다. (I7327b)
  • Android S 베타에서 작동하도록 FrameTimingMetric을 수정했습니다. (Ib60cc, b/193260119)
  • CompilationMode.BaselineProfile 지원을 높이기 위해, EmptyActivity를 사용하여 타겟 앱을 강제 종료 상태에서 벗어나게 합니다. (Id7cac, b/192084204)
  • 플랫폼 표준과 일치하도록 트레이스 파일 확장을 .perfetto-trace로 변경했습니다. (I4c236, b/174663039)
  • 이제 StartupTimingMetric은 애플리케이션의 렌더링이 완료될 때까지 'fullyDrawnMs' 측정항목을 출력하여 시간을 측정합니다. 앱에 이 측정항목을 정의하려면 초기 목록 항목이 DB 또는 네트워크에서 로드될 때 등 초기 콘텐츠가 준비될 때 Activity.reportFullyDrawn을 호출합니다. reportFullyDrawn 메서드는 ComponentActivity에서 빌드 버전 확인 없이도 사용 가능합니다. 참고로, 측정항목을 캡처할 만큼 테스트를 충분히 오래 실행해야 합니다(startActivityAndWait는 reportFullyDrawn을 대기하지 않음). (If1141, b/179176560)
  • 트레이스에 UI 메타데이터를 추가하는 데 소요되는 시간을 50ms 이상 줄였습니다. (Ic8390, b/193923003)
  • 추적을 중지할 때의 폴링 빈도를 대폭 높였습니다. 이를 통해 시작 벤치마크 런타임 등을 30% 이상 줄일 수 있습니다. (Idfbc1, b/193723768)

버전 1.1.0-alpha03

2021년 6월 16일

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

새로운 기능

버그 수정

  • 벤치마크 오류를 억제하는 샘플 Gradle 코드가 .gradle.kts 사용자도 지원하는 문법과 함께 지원 중단되지 않은 API를 사용하도록 업데이트되었습니다.

    예:

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

버전 1.1.0-alpha02

2021년 5월 18일

Benchmark 버전 1.1.0-alpha02에는 벤치마킹을 위한 중요 구성요소인 MacroBenchmark가 포함되었습니다. CPU 루프를 측정할 수 있는 benchmark 외에도 macrobenchmark를 사용하여 시작 및 스크롤과 같은 전체 앱 상호작용을 측정하고 트레이스를 캡처할 수 있습니다. 자세한 내용은 라이브러리 문서를 참고하세요.

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

새로운 기능

Macrobenchmark 아티팩트(androidx.benchmark:benchmark-macro-junit4androidx.benchmark:benchmark-macro)가 추가되었습니다.

  • 로컬로 또는 CI에서 앱의 시작, 스크롤/애니메이션 성능 측정항목 캡처
  • Android 스튜디오 내에서 트레이스 캡처 및 검사

버그 수정

  • Android 12에서 출력 디렉터리의 셸 권한 문제 해결(참고 - 대상 기기에서 출력 파일을 계속 확보하려면 Android Gradle 플러그인을 7.0.0 카나리아로, Android 스튜디오를 Arctic Fox(2020.3.1)로 업데이트해야 할 수 있음) (Icb039)
  • BenchmarkPlugin에서 구성 캐싱이 지원됩니다. (6be1c1, b/159804788)
  • 간소화된 파일 출력 - requestLegacyExternalStorage=true가 필요 없는 디렉터리에서 기본적으로 사용됩니다. (8b5a4d, b/172376362)
  • JIT 스레드가 존재하지 않는 플랫폼 버전에서 JIT 스레드를 찾지 못하는 것과 관련해 logcat 경고를 출력하는 라이브러리 문제가 해결되었습니다. (I9cc63, b/161847393)
  • 기기의 최대 실행 빈도 읽기 문제가 해결되었습니다. (I55c7a)

버전 1.1.0-alpha01

2020년 6월 10일

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01androidx.benchmark:benchmark-junit4:1.1.0-alpha01이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

1.1의 새로운 기능

  • 할당 측정항목 - 이제 벤치마크는 준비 및 시기 선택 후 추가 단계를 실행하여 할당 수를 캡처합니다. 할당은 이전 버전의 플랫폼에서 성능 문제를 일으킬 수 있습니다(O에서 140ns가 M에서는 8ns가 됨, 시계가 잠긴 Nexus 5X에서 측정함). 이 측정항목은 Android 스튜디오 콘솔 출력에 표시됩니다.
  • 프로파일링 지원 - 이제 벤치마크 실행을 위한 프로파일링 데이터를 캡처하여 코드가 느리게 실행되는 이유를 검사할 수 있습니다. Benchmark는 메서드 트레이스 또는 ART의 메서드 샘플링 캡처를 지원합니다. 이러한 파일은 File > Open을 사용하여 Android 스튜디오에서 Profiler로 검사할 수 있습니다.
  • 이제 Benchmark Gradle 플러그인이 기본값을 제공하여 설정이 더 간단해집니다.
    • 코드 적용 범위가 내장된 종속 항목의 사용을 방지하기 위해 testBuildType이 기본적으로 출시되도록 설정됩니다. 출시 buildType은 기본 buildType으로도 구성됩니다. 따라서 프로젝트를 처음 열 때 Android 스튜디오에서 올바른 빌드 변형을 자동으로 선택할 수 있습니다. (b/138808399)
    • signingConfig.debug는 기본 서명 구성으로 사용됩니다. (b/153583269)

** 버그 수정 **

  • 각 벤치마크의 첫 번째 측정값이 인위적으로 다른 측정값보다 높은 준비 전환 오버헤드를 크게 줄였습니다. 이 문제는 매우 작은 벤치마크(1마이크로초 이하)에서 더 두드러졌습니다. (b/142058671)
  • 명령줄에서 실행할 때 각 벤치마크에 출력된 InstrumentationResultParser 오류가 수정되었습니다. (I64988, b/154248456)

알려진 문제

  • Benchmark의 명령줄, Gradle 호출은 결과를 직접 출력하지 않습니다. 스튜디오를 통해 실행하거나 결과를 위해 JSON 출력 파일을 파싱하여 이 문제를 해결할 수 있습니다.
  • Benchmark 보고서는 'android' 또는 'download'로 끝나는 applicationId(대소문자를 구분하지 않음)로 설치된 앱이 있는 기기에서 보고서를 가져오지 못합니다. 이 문제가 발생하면 사용자는 Android Gradle 플러그인을 4.2-alpha01 이상으로 업그레이드해야 합니다.

버전 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-rc01, androidx.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 출력 개선과 화면 꺼짐 문제 해결에 기여해 주신 세르게이 자카로프님에게 감사드립니다.

버전 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이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.