벤치마크
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 11월 13일 | 1.3.3 | - | - | 1.4.0-alpha05 |
종속 항목 선언
Benchmark의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
Macrobenchmark
프로젝트에서 Macrobenchmark를 사용하려면 macrobenchmark 모듈의 build.gradle
파일에 다음 종속 항목을 추가합니다.
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.3" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.3") }
Microbenchmark
프로젝트에서 Microbenchmark를 사용하려면 microbenchmark 모듈의 build.gradle
파일에 다음 종속 항목을 추가합니다.
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.3" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.3") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
The Microbenchmark library also provides a Gradle plugin to use with your microbenchmark module.
This plugin sets build configuration defaults for the module, sets up
benchmark output copy to the host,
and provides the
./gradlew lockClocks
task.
To use the plugin, include the following line in the `plugins` block in your top-level
build.gradle
file:
Groovy
plugins { id 'androidx.benchmark' version '1.3.3' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.3" apply false }
Then apply the plugin to your benchmark module's build.gradle
file
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 1.4
버전 1.4.0-alpha05
2024년 11월 13일
androidx.benchmark:benchmark-*:1.4.0-alpha05
이 출시되었습니다. 버전 1.4.0-alpha05에는 이 커밋이 포함되어 있습니다.
버그 수정
CompilationMode.None()
가 초기 최악의 성능을 나타내지 않는 일관되지 않은 성능을 보이는 API 34 이상에서 발생하는 문제를 수정했습니다. 이렇게 하면 ART의 컴파일 상태verify
가 첫 실행 직후에 앱을 부분적으로 컴파일 (클래스 로드에만 영향을 미침)할 수 있는 플랫폼 변경사항을 해결할 수 있습니다. (Ie48d0)- Perfetto 트레이스 내에서 프로세스 이름이 잘리기 때문에 내장된 Macrobenchmark 측정항목의 측정값을 보고하지 않는 (특히 짧은) 트레이스가 캡처될 수 있는 문제를 수정했습니다. 이제 macrobenchmark는 예상 패키지 이름 외에도 모든 내장 쿼리에서 잘린 패키지 이름을 찾아 이 문제를 해결합니다. 맞춤
TraceMetric
구현 또는PerfettoSession.query
의 다른 직접 호출자는 Perfetto 쿼리의process.name LIKE "$packageName"
를(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
로 변경하여 동일한 동작을 구현할 수 있습니다. (I5bf01, b/377565760)
버전 1.4.0-alpha04
2024년 10월 30일
androidx.benchmark:benchmark-*:1.4.0-alpha04
이 출시되었습니다. 버전 1.4.0-alpha04에는 이 커밋이 포함되어 있습니다.
새로운 기능
- (실험용) 기준 프로필 생성 및 보조 사용자에게 설치된 앱(예: 헤드리스 Android Auto 기기의 앱)에 대한 벤치마킹을 사용 설정합니다. 이 지원은 일부 시나리오에서 테스트되었지만 작동하지 않는 경우 버그로 알려주세요. (I9fcbe, b/356684617, b/373641155)
버그 수정
- 이제
isProfileable
는 벤치마크 빌드에서 항상 재정의되며isDebuggable
도 벤치마크 빌드와nonMinified
(기준 프로필 캡처) 빌드에서 항상 재정의됩니다. (I487fa, b/369213505) - API 28 이전의 일부 실제 기기에서 컴파일 감지를 수정합니다. json
context.compilationMode
및androidx.benchmark.requireAot=true
동작에 영향을 미치며 더 이상 잘못 발생하지 않습니다. (Ic3e08, b/374362482) CpuEventCounter
측정항목에서 잘못된 측정이 관찰되면 예외를 발생시킵니다 (예: instructions/cpucycles==0). (I8c503)
버전 1.4.0-alpha03
2024년 10월 16일
androidx.benchmark:benchmark-*:1.4.0-alpha03
이 출시되었습니다. 버전 1.4.0-alpha03에는 이 커밋이 포함되어 있습니다.
API 변경사항
- Macrobenchmark: 프로필 적용 범위 또는 일반적인 Android RunTime 성능을 검사하는 데 사용할 수 있는
ArtMetric
를 추가합니다. JIT, 클래스 초기화 (사용 가능한 경우), 클래스 확인의 수와 총 시간을 캡처합니다. 또한 기본값과 함께 선택적 ART 메인라인 버전을 포함하도록CaptureInfo
를 변경합니다. (I930f7) - 벤치마크 JSON 출력에
coefficientOfVariation
를 추가하여 특정 벤치마크 실행 내에서 안정성을 표시합니다. (Ib14ea)
버그 수정
- AVD 기기에 공백이 있을 때
CollectBaselineProfileTask
이 수정되었습니다. (Ia0225, b/371642809) StartupMode.COLD
예외의 오류에 대한 추측적 수정:Package <packagename> must not be running prior to cold start!
. 이제MacrobenchmarkScope.killProcess()
(StartupMode.COLD
동작을 구현하는 데 사용되는 각 반복 전에 실행되는MacrobenchmarkScope.killProcess()
포함)가 앱의 프로세스 실행이 모두 중지되었는지 확인하기 위해 대기합니다. (I60aa6, b/351582215)- 일부 루팅된 에뮬레이터에 UNLOCKED_ 오류가 표시되는 문제를 수정했습니다. (Ic5117)
- 이제 이 라이브러리는 유형 사용인 JSpecify nullness 주석을 사용합니다. Kotlin 개발자는 올바른 사용을 적용하기 위해 다음 컴파일러 인수(
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
)를 사용해야 합니다. (I7104f, b/326456246)
버전 1.4.0-alpha02
2024년 10월 2일
androidx.benchmark:benchmark-*:1.4.0-alpha02
이 출시되었습니다. 버전 1.4.0-alpha02에는 이 커밋이 포함되어 있습니다.
API 변경사항
- Gradle 작업
lockClocks
및unlockClocks
를 최상위 수준에서 사용할 수 있는 대신 벤치마크 프로젝트에 있도록 이동했습니다. 프로젝트 격리를 중단하지 않고 이를 최상위 작업으로 등록할 방법이 없으므로 불행히도 이러한 변경이 필요했습니다. (I02b8f, b/363325823)
버그 수정
- 이제
BaselineProfileRule
는 블록 끝에서 실행 중인 각 프로세스에 프로필을 덤프하도록 신호를 보내 멀티프로세스 앱의 프로필을 수집합니다. 프로필 기반 컴파일이 브로드캐스트할 프로세스를 찾지 못하면 프로필 데이터가 내부에 있는 것은 예상치 못한 일이므로 컴파일이 실패합니다. 또한 덤프 대기 시간을 제어하는 계측 인수androidx.benchmark.saveProfileWaitMillis
를 추가했습니다. (I0f519, b/366231469) - 벤치마크
1.3.2
: Firebase Test Lab (FTL)이 기준 프로필 Gradle 플러그인에서 기준 프로필 또는 Macrobenchmark 결과 파일을 가져올 수 없는 문제를 수정했습니다. (I2f678, b/285187547)
FTL을 사용하려면 다음과 같이 플러그인 블록의 기준 프로필 모듈에 플러그인을 적용합니다.
plugins {
...
id("com.google.firebase.testlab")
}
그런 다음 다음과 같이 Firebase Test Lab을 구성합니다.
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
또한 생성된 FTL 기기를 기준 프로필 확장 프로그램에 추가해야 합니다.
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
버전 1.4.0-alpha01
2024년 9월 18일
androidx.benchmark:benchmark-*:1.4.0-alpha01
이 출시되었습니다. 버전 1.4.0-alpha01에는 이 커밋이 포함되어 있습니다.
새로운 기능 - 앱 시작 통계
- Macrobenchmark에서 앱 시작 통계의 초기 버전을 사용 설정할 수 있습니다. (09fae38)
시작 벤치마크에서 사용 설정하려면 다음 단계를 따르세요.
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
그런 다음 시작 벤치마크를 실행하면 트레이스를 분석하여 일반적인 문제를 찾고 측정항목 뒤에 벤치마크 탭의 스튜디오 테스트 출력에 출력합니다.예를 들면 다음과 같습니다.
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
이 기능은 아직 개발 중이며 문서 및 확장성 개선이 예정되어 있지만 의견을 보내주시면 감사하겠습니다.
새로운 기능
- 모든 기준 프로필 경고를 표시하지 않도록 gradle 속성
androidx.baselineprofile.suppressWarnings
를 추가했습니다. (314153a) - 이제 Microbench 측정항목이 Perfetto 트레이스에 카운터로 표시됩니다. (3214854)
- jit를 사용 중지하고 (루팅 / 런타임 다시 시작 필요) 기기 성능/테스트 상태를 재설정하기 위한 실험용 스크립트를 추가했습니다. 현재 gradle 작업으로 게시되지는 않습니다. (7c3732b)
- 에뮬레이터에서 실행할 때 테스트를 건너뛰는 벤치마크 인수를 추가했습니다.
automaticGenerationDuring
빌드가 사용 설정되면 벤치마크가 기준 프로필 생성도 트리거합니다. 에뮬레이터를 사용하는 경우 실패합니다. 새 인수skipBenchmarksOnEmulator
를 사용하면 테스트를 건너뛸 수 있습니다. (0c2ddcd) - API 23 이상에서 실행되도록 성능 이벤트 사용 설정 로직을 변경했습니다. (2550048)
API 변경사항
MacrobenchmarkRule.measureRepeated()
의 기존 실험용PerfettoConfig
인수가 새ExperimentalConfig
객체로 이동했습니다.
버그 수정
lockClocks.sh
재시도 횟수 증가 (99e9dac)nonMinified
및 벤치마크 빌드 유형이 있는 경우 만들지 않습니다. 버그로 인해nonMinified
및 벤치마크 빌드 유형이 있더라도 다시 만들어졌습니다. (e75f0a5)TraceSectionMetric
결과에서 종료되지 않는 슬라이스를 무시합니다. (a927d20)sdk_
접두사를 고려하도록 에뮬레이터 검사를 개선했습니다. (1587de8)- 실행 중인 패키지가 아닌 패키지를
FrameTimingGfxInfoMetric
에서 삭제된 것으로 처리합니다. (35cc79c) - 명령 외 이벤트에 잘못된 값을 생성하는
androidx.benchmark.cpuEventCounter
를 수정합니다. (06edd59) - 측정항목 우선순위 순서를 따르도록
resumeTiming/runWithTimingDisabled
를 수정하고 우선순위가 낮은 측정항목 일시중지/재개가 우선순위가 높은 측정항목 결과에 미치는 영향을 크게 줄입니다. 예를 들어cpuEventCounter.enable
계측 인수를 통해 CPU 성능 카운터를 사용하는 경우 일시중지/재개가 발생할 때 timeNs가 더 이상 크게 줄어들지 않습니다. (5de0968)
버전 1.3
버전 1.3.3
2024년 10월 16일
androidx.benchmark:benchmark-*:1.3.3
이 출시되었습니다. 버전 1.3.3에는 이 커밋이 포함되어 있습니다.
버그 수정
- AVD 기기에 공백이 있는 경우
CollectBaselineProfileTask
를 수정했습니다. (Ia0225, b/371642809)
버전 1.3.2
2024년 10월 2일
androidx.benchmark:benchmark-*:1.3.2
이 출시되었습니다. 버전 1.3.2에는 이 커밋이 포함되어 있습니다.
버그 수정
- Firebase Test Lab (FTL)이 기준 프로필 Gradle 플러그인에서 기준 프로필 또는 Macrobenchmark 결과 파일을 가져올 수 없는 문제를 수정했습니다. (I2f678, b/285187547)
FTL을 사용하려면 다음과 같이 플러그인 블록의 기준 프로필 모듈에 플러그인을 적용합니다.
plugins {
...
id("com.google.firebase.testlab")
}
그런 다음 다음과 같이 Firebase Test Lab을 구성합니다.
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
또한 생성된 FTL 기기를 기준 프로필 확장 프로그램에 추가해야 합니다.
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
버전 1.3.1
2024년 9월 18일
androidx.benchmark:benchmark-*:1.3.1
이 출시되었습니다. 버전 1.3.1에는 이 커밋이 포함되어 있습니다.
버그 수정
- 모든 기준 프로필 경고를 표시하지 않는 Gradle 속성
androidx.baselineprofile.suppressWarnings
를 추가했습니다. (I7c36e, b/349646646) - 래퍼를 만드는 대신 앱에서 만든 경우 기존
nonMinified…
및benchmark…
를 사용하도록 기준 프로필 Gradle 플러그인을 수정했습니다. (Ia8934, b/361370179) - 에뮬레이터에서
automaticGenerationDuringBuild
가 사용 설정된 경우java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
가 수정되었습니다. 대신 새 인수가 테스트를 건너뛰는 데 사용됩니다. (If3f51, b/355515798) - 마이크로 벤치마크 축소 - 벤치마크 라이브러리 proguard에서
org.junit.runner.notification.RunListener
의 서브클래스를 유지합니다. (Ic8ed5, b/354264743) - 종료되지 않는 슬라이스를 무시하도록
TraceSectionMetric
를 수정했습니다. 이전에는 합산 또는 최소 시간 찾기 중에 이러한 값의 길이가 -1로 간주되었습니다. (If74b7) - 프로세스가 아직 실행되지 않은 경우 측정항목을 시작하면 비정상 종료되는
FrameTimingGfxInfoMetric
의 문제를 수정했습니다. (I6e412)
버전 1.3.0
2024년 8월 21일
androidx.benchmark:benchmark-*:1.3.0
이 출시되었습니다. 버전 1.3.0에는 이 커밋이 포함되어 있습니다.
1.2.0 이후 마이크로벤치마크 변경사항
- 대부분의 기기에서 실행할 때 마이크로벤치마크에서는 메서드 추적이 기본적으로 사용 설정됩니다.
- 메서드 추적은 측정 후 별도의 단계로 실행됩니다. 이렇게 하면 단일 벤치마크 실행에서 정확한 측정값과 메서드 트레이스를 모두 출력할 수 있습니다.
- 일부 Android OS 및 ART 버전의 메서드 추적은 후속 측정 단계에 영향을 미칩니다. 이러한 버전에서는 메서드 추적이 기본적으로 사용 중지되어 있으며 스튜디오 출력에 경고가 출력됩니다.
- 기본 스레드 벤치마크 및 ANR
- UI 스레드 벤치마크 (예: Compose/뷰 UI와 상호작용하는 벤치마크)에
measureRepeatedOnMainThread
를 추가하여 여러 초 동안 실행할 때 ANR을 방지했습니다. - ANR 방지 기한을 초과할 것으로 예상되는 경우 메서드 트레이스가 건너뜁니다. 이 동작을 사용 중지하려면
androidx.benchmark.profiling.skipWhenDurationRisksAnr
를 false로 설정하세요. ANR이 장시간 CI 실행에 문제를 일으킬 수 있으므로 CI 실행에는 권장되지 않습니다.
- UI 스레드 벤치마크 (예: Compose/뷰 UI와 상호작용하는 벤치마크)에
- 축소
- 축소를 사용 설정하여 마이크로벤치마킹을 개선하기 위한 Proguard 규칙이 삽입되었습니다.
- 라이브러리 모듈의 축소/R8에는 AGP 8.3이 필요하며
build.gradle
의android.buildTypes.release.androidTest.enableMinification
를 통해 사용 설정할 수 있습니다. - 비활성 코드 제거를 방지하기 위한 실험용
BlackHole.consume()
API를 추가했습니다. (If6812, b/286091643)
- 측정항목
- 실험용 CPU 이벤트 카운터 기능 (
perf_event_open
의 측정항목으로, 대부분의 플랫폼 버전에서 루트가 필요함),InstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
를 통한 액세스 (true
로 설정 가능),androidx.benchmark.cpuEventCounter.events
는 예를 들어 (Instructions,CpuCycles
)로 설정할 수 있습니다. 일부 userdebug 에뮬레이터에서 지원되어야 하지만 사용 가능한 모든 에뮬레이터에서 지원이 테스트되지는 않았습니다.
- 실험용 CPU 이벤트 카운터 기능 (
1.2.0 이후 MACRObenchmark 변경사항
- 매크로 벤치마크의 메서드 추적을 대대적으로 개선했습니다.
- 이제 메서드 트레이스의 범위가
measureBlock
의 기간으로 제한되며 프로세스가 여러 번 시작되면 여러 세션을 캡처할 수 있습니다. - 이전에는 메서드 추적이
StartupMode.COLD
벤치마크에만 작동하고 대상 프로세스를 다시 시작하지 않은measureBlocks
의 경우 아무것도 캡처하지 않았습니다. - 느린 기기에서도 메서드 트레이스가 완전히 캡처되고 유효하도록 macrobenchmark에서 메서드 트레이스 플러시를 수정했습니다. (I6349a, b/329904950)
- 이제 메서드 트레이스의 범위가
- 프로세스가 종료될 때 개별
warmUp
반복 중에 ART 프로필을 올바르게 덤프하여CompilationMode.Partial(warmup=N)
측정이 더 정확해집니다. (I17923) - 셰이더 브로드캐스트 실패 메시지 삭제
- 셰이더 브로드캐스트 실패 메시지를 삭제하는 디버깅 제안을 추가했습니다.
ProfileInstaller
1.3이 없는 앱을 벤치마킹할 때 비정상 종료를 해결하기 위해 셰이더 삭제 동작을 재정의하는 두 가지 계측 인수를 추가합니다.androidx.benchmark.dropShaders.enable=true/false
: 특히 아직 profileinstaller 1.3을 사용하지 않는 앱을 벤치마킹할 때 모든 셰이더 드롭 (StartupMode.Cold
실행 시 실행되는 드롭 포함)을 건너뛰는 데 사용할 수 있습니다.androidx.benchmark.dropShaders.throwOnFailure=true/false
: 셰이더를 삭제하려고 할 때 실패를 허용하도록 사용할 수 있습니다(예: profileinstaller 1.3(I4f573) 없이 앱을 벤치마킹할 때).
- 완전히 맞춤설정된 Perfetto 트레이스 녹화를 위해 맞춤
PerfettoConfig
를 사용하는 실험용MacrobenchmarkRule#measureRepeated
변형을 추가했습니다. 구성이 잘못되면 내장 측정항목 클래스가 실패할 수 있습니다. (Idfd3d, b/309841164, b/304038384) - Macrobenchmark를 실행하기 전에 백그라운드 dexopt 작업을 취소하여 간섭을 줄입니다. (I989ed)
- 이제 Macrobenchmark는 대상 애플리케이션이 ART 프로필을 플러시할 때까지 1초 동안 기다립니다 (이전에는 500ms 기다림). (I85a50, b/316082056)
- TraceSectionMetric 개편
- 참고: 아래의
TraceSectionMetric
변경사항은 CI 사용의 출력에 영향을 미칠 수 있으며 중단을 일으키거나 파싱을 중단할 수 있습니다. - 이 측정항목은 반복되는 이벤트에 주로 사용되며 이러한 경우 먼저 데이터가 삭제되므로 이제 Sum이 기본값입니다.
- 더 많은 모드를 사용할 수 있도록 맞춤설정이 가능하도록 변경됨
- 이제 모드 이름이 측정항목 출력 이름에 삽입됩니다 (스튜디오 및 JSON).
- 이제
Trace.{begin|end}AsyncSection
를 사용하여 만든 슬라이스를 지원합니다.
- 참고: 아래의
- 측정항목
- 전원 -
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
,PowerMetric.deviceSupportsPowerEnergy()
를 추가했습니다. - 반환 유형과 일치하도록
Metric.getResult
의 이름을getMeasurements
로 변경했습니다. - 모든 시작 감지 실패에 log.w / 예외 라벨을 추가했습니다. 이렇게 해도 현재 동작은 변경되지 않으며 (따라서 일부 오류가 발생하고 다른 오류는 시작을 감지하지 못함) 더 이해하기 쉽게 됩니다. 일반적으로
Log.w()
이고 시작 측정항목을 보고하지 못하는 경우 프레임 외 이벤트가 누락된 경우입니다. 시작이 감지되면 프레임 타이밍 정보 (UI/RT 슬라이스에서 가져옴)를 제외하고 예외가 발생합니다. (Id240f, b/329145809) - 생성된 프레임 수가 변경되어 측정이 변경되는 시나리오를 찾는 데 도움이 되도록
FrameTimingMetric
에frameCount
측정을 추가했습니다 (새 애니메이션 추가, 무효화 문제 수정). (I1e5aa) - 문서에서 사용 가능한 경우
frameOverrunMs
가 추적에 선호되는 측정항목이며 그 이유를 명확히 했습니다. (I18749, b/329478323) - 트레이스 시작과 끝에 있는 종료되지 않은 프레임이 함께 페어링되어 매우 긴 단일 프레임으로 잘못 보고되는 문제를 수정했습니다. (I39353, b/322232828)
- 프레임이 생성되지 않을 때
FrameTimingMetric
오류를 개선하고 문제를 진단하는 데 도움이 되도록 측정항목 파싱에 실패할 때 항상 트레이스 링크를 출력합니다. (I956b9) - 특히 특정 OEM 기기에서 프레임 ID를 파싱하지 못하는
FrameTimingMetric
의 비정상 종료 문제를 수정했습니다. (Ia24bc, b/303823815, b/306235276) FrameMetrics
의 검사 엄격성을 완화하고 오류 메시지에 세부정보를 추가했습니다. (Iadede)
- 전원 -
1.2.0 이후 기준 프로필 캡처 / Gradle 플러그인 변경사항
- 권장되는 최대 AGP 버전을 9.0.0-alpha01로 높였습니다.
mergeArtProfile
및mergeStartupProfile
작업이 항상 기준 프로필 생성을 기다리도록 합니다. (I623d6, b/343086054)- 기준 프로필을 성공적으로 생성하면 변경된 사항의 요약이 출력됩니다. (I824c8, b/269484510)
- 경고를 사용 중지하는 DSL을 추가했습니다. (Ic4deb, b/331237001)
automaticGenerationDuringBuild
가 사용 중지된 경우 벤치마크가 생성된 기준 프로필을 사용하도록 수정했습니다. (Ic144f, b/333024280)nonMinified
또는 벤치마크 빌드 유형을 맞춤설정할 때 기준 프로필 생성 및 벤치마킹을 사용 설정하도록BaselineProfile
Gradle 플러그인 속성 재정의를 수정했습니다. (Ib8f05, b/324837887)- AGP 8.3.0-alpha15 이전에 AAR에 라이브러리 기준 프로필을 포함하는 문제를 수정했습니다. (I1d2af, b/313992099)
- 생성 작업이 끝날 때 기준 프로필 및 시작 프로필 출력 URL을 수정했습니다. (I802e5, b/313976958)
1.2.0 이후의 기타 중요한 변경사항
- 트레이스 캡처
- perfetto 시작 시 EXITCODE 2 오류를 오류에서 로깅된 경고로 줄임
- 벤치마크에서 기본적으로 AIDL 추적을 사용 설정합니다(API 28 필요). (Ia0af2, b/341852305)
- 벤치마크에서 기본적으로 포터 태그 추적을 사용 설정합니다. 예를 들어 wakelock 트레이스 포인트를 캡처합니다. (Icfe44, b/286551983)
- 느린 기기에서 추적을 시작할 때 비정상 종료를 방지하기 위해 트레이스 캡처 시작 제한 시간을 늘렸습니다. (I98841, b/329145808)
- JSON, textproto, proto 바이너리 (디코딩되지 않음) 변형이 있는 공개 API
PerfettoTraceProcessor.Session.queryMetrics
API를 추가했습니다. 이를 통해TraceProcessor
에 내장된 측정항목을 쿼리할 수 있습니다. (I54d7f, b/304038382) - Perfetto 트레이스 레코드에서 차단 시작을 사용 설정하여 트레이스 시작 시 데이터 누락 위험을 줄입니다. API 33 이상에서만 지원됩니다. (Ie6e41, b/310760059)
- JSON 출력
- JSON 출력의 벤치마크 컨텍스트에 추가 정보를 추가했습니다.
context.artMainlineVersion
- Art 메인라인 모듈의 정수 버전입니다 (기기에 있는 경우, 그렇지 않은 경우-1
).context.build.id
- android.os.Build.ID와 같습니다.context.build.version.codename
- android.os.Build.VERSION.CODENAME과 같습니다.context.build.version.abbreviatedCodename
- 출시 전 코드네임의 첫 글자 (출시 빌드 포함)에 해당(Ie5020)
- 프로파일링 트레이스 (예: Perfetto, 메서드 트레이스)를 더 쉽게 도구화할 수 있도록 JSON 출력에
profilerOutput
목록을 추가했습니다. (I05ddd, b/332604449) - 벤치마크 모듈에서 Android Test Orchestrator를 사용하면 모듈별 출력 JSON 파일이 반복적으로 덮어쓰기되므로 경고를 추가했습니다. (Ia1af6, b/286899049)
- 파일을 작성하거나 후처리할 때 불분명한 비정상 종료를 방지하기 위해 파일 이름이 200자 초과하면 발생합니다. (I4a5ab)
- JSON 출력의 벤치마크 컨텍스트에 추가 정보를 추가했습니다.
버전 1.3.0-rc01
2024년 8월 7일
androidx.benchmark:benchmark-*:1.3.0-rc01
이 출시되었습니다. 버전 1.3.0-rc01에는 이 커밋이 포함되어 있습니다.
버그 수정
- 명령이 아닌 이벤트에 손상된 값을 생성하는
androidx.benchmark.cpuEventCounter
를 수정했습니다. (I7386a, b/286306579) - 측정항목 우선순위 순서를 따르도록
resumeTiming
/runWithTimingDisabled
를 수정하고 우선순위가 낮은 측정항목 일시중지/재개가 우선순위가 높은 측정항목 결과에 미치는 영향을 크게 줄입니다. 예를 들어cpuEventCounter.enable
계측 인수를 통해 CPU 성능 카운터를 사용하는 경우 일시중지/재개가 발생할 때 timeNs가 더 이상 크게 줄어들지 않습니다. (I39c2e, b/286306579, b/307445225) - 스택 샘플링 변환을 기본 스레드 외부로 이동하여
measureRepeatedOnMainThread
가 기본 스레드 하드 제한 시간에 도달하지 못하도록 하는 스택 샘플링의 가능성을 줄였습니다. (I487a8, b/342237318) - 새 플랫폼 API에 대한 액세스 수동 개요가 삭제되었습니다. AGP 7.3 이상 (예: R8 버전 3.3)에서 R8을 사용하고 있을 때와 AGP 8.1 이상 (예: D8 버전 8.1)을 사용할 때 모든 빌드에서 API 모델링을 통해 자동으로 이루어지기 때문입니다. AGP를 사용하지 않는 클라이언트는 D8 버전 8.1 이상으로 업데이트하는 것이 좋습니다. 자세한 내용은 이 도움말을 참조하세요. (I9496c, b/345472586)
- 패키지 이름을 instr 인수로 전송하는 agp 버전 검사를 추가했습니다. AGP 8.4.0 이전에는 계측 인수를 통해 타겟 앱 패키지 이름을 계측 앱에 전송할 수 없습니다. (0c72a3f)
버전 1.3.0-beta02
2024년 7월 10일
androidx.benchmark:benchmark-*:1.3.0-beta02
이 출시되었습니다. 버전 1.3.0-beta02에는 이 커밋이 포함되어 있습니다.
버그 수정
- Perfetto를 시작할 때 경고를 기록하는 EXITCODE
2
를 적절하게 처리하지만 계속 진행합니다.
버전 1.3.0-beta01
2024년 6월 12일
androidx.benchmark:benchmark-*:1.3.0-beta01
이 출시되었습니다. 버전 1.3.0-beta01에는 이러한 커밋이 포함되어 있습니다.
API 변경사항
- 일관성을 위해
MethodTracing.affectsMeasurementOnThisDevice
의 이름을AFFECTS_MEASUREMENT_ON_THIS_DEVICE
로 변경했습니다. (I1bdfa) - 마이크로벤치마크에서 비활성 코드 제거를 방지하기 위한 실험용
BlackHole.consume()
API를 추가했습니다. (If6812, b/286091643) - 이제 메서드 추적이 측정을 방해하지 않도록 Microbenchmark가 올바르게 발생합니다. 이는 계측 인수 또는
MicrobenchmarkConfig
를 통해 메서드 추적이 강제로 사용 설정된 특정 기기에서 메서드 추적 후 측정을 시도할 때 발생합니다. 영향을 받는 기기는 API 26~30 또는 이 간섭의 영향을 받는 특정 ART 메인라인 모듈 버전을 실행 중이며ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
를 통해 런타임에 감지될 수 있습니다. (Iafb92, b/303660864)
버그 수정
- 권장되는 최대 AGP 버전을 9.0.0-alpha01로 범프했습니다. (I5bbb0)
- 벤치마크 컨텍스트에 컴파일 모드를 추가했습니다. (If5612, b/325512900)
- 기본적으로 AIDL 추적을 사용 설정합니다 (API 28 필요). (Ia0af2, b/341852305)
- JSON 출력의 벤치마크 컨텍스트에 추가 정보를 추가했습니다.
context.artMainlineVersion
- Art 메인라인 모듈의 정수 버전입니다 (기기에 있는 경우, 그렇지 않으면 -1).context.build.id
-android.os.Build.ID
와 같습니다.context.build.version.codename
-android.os.Build.VERSION.CODENAME
와 같습니다.context.build.version.abbreviatedCodename
- 출시 전 코드네임의 첫 글자와 일치합니다 (출시 빌드에서도 해당). (Ie5020)
androidx.benchmark.profiling.sampleDurationSeconds
를 따르도록StackSampling
를 수정했습니다. (Ib1d53)- macro->common 종속 항목을
api()
로 변경하여PerfettoTrace
및PerfettoConfig
를 더 쉽게 사용할 수 있도록 합니다. (Icdae3, b/341851833) mergeArtProfile
및mergeStartupProfile
작업이 항상 기준 프로필 생성을 기다리도록 합니다. (I623d6, b/343086054)- 변형을 사용 설정해야 하는지 결정할 때 변형 사용 설정 상태를 고려하세요. (I5d19e, b/343249144)
- perfetto 트레이스 프로세서의 기본 시작 제한 시간을 늘렸습니다. (I87e8c, b/329145808)
버전 1.3.0-alpha05
2024년 5월 14일
androidx.benchmark:benchmark-*:1.3.0-alpha05
이 출시되었습니다. 버전 1.3.0-alpha05에는 이 커밋이 포함되어 있습니다.
버그 수정
- macrobench 측정항목이 모든 반복에 대해 0 값을 반환할 때 더 명확한 예외를 발생시킵니다. (Iab58f, b/314931695)
- 리스너 규칙 및 기타 관찰된 경고 / 오류 지원을 비롯하여 microbench proguard 규칙에 추가 해결 방법 규칙이 추가되었습니다. (I14d8f, b/329126308, b/339085669)
- 메서드 추적은 Macrobenchmark 중에 별도의 단계로 실행되며 더 이상 측정에 영향을 미치지 않습니다. (If9a50, b/285912360, b/336588271)
- 셰이더 브로드캐스트 실패 메시지를 삭제하기 위한 추가 디버깅 제안을 추가했습니다. (I5efa6, b/325502725)
버전 1.3.0-alpha04
2024년 5월 1일
androidx.benchmark:benchmark-*:1.3.0-alpha04
이 출시되었습니다. 버전 1.3.0-alpha04에는 이 커밋이 포함되어 있습니다.
API 변경사항
- 완전히 맞춤설정된 Perfetto 트레이스 녹화를 위해 맞춤
PerfettoConfig
를 사용하는 실험용MacrobenchmarkRule#measureRepeated
변형을 추가했습니다. 구성이 잘못되면 내장 측정항목 클래스가 실패할 수 있습니다. (Idfd3d, b/309841164, b/304038384) - 명확히 하기 위해
PowerMetric.deviceSupportsPowerEnergy
의 이름을PowerMetric.deviceSupportsHighPrecisionTracking
으로 바꿈 (I5b82f 참조) - 기기 전원 측정 기능에 따라 벤치마크를 변경하거나 건너뛰는 기능을 사용 설정할 수 있도록
PowerMetric.deviceBatteryHasMinimumCharge()
및PowerMetric.deviceSupportsPowerEnergy()
를 추가했습니다. (I6a591, b/322121218)
버그 수정
- 이전 기준 프로필과의 비교를 추가했습니다. (I824c8, b/269484510)
- 경고를 사용 중지하는 DSL을 추가했습니다. (Ic4deb, b/331237001)
- 벤치마크 변형이 사용 중지된 경우 예외를 정보 로그로 변경했습니다. (I8a517, b/332772491)
- Macrobenchmark의 메서드 트레이스를 더 간단하게 캡처할 수 있도록 범위를 실제
measureBlock()
의 기간으로 제한합니다. 이전에는 타겟 프로세스 실행 시 시작되었으며 콜드 스타트만 지원했습니다. (Iee85a, b/300651094) - perfetto 트레이스 프로세서가 느리게 시작될 때 비정상 종료를 방지합니다. (I98841, b/329145808)
버전 1.3.0-alpha03
2024년 4월 17일
androidx.benchmark:benchmark-*:1.3.0-alpha03
이 출시되었습니다. 버전 1.3.0-alpha03에는 이러한 커밋이 포함되어 있습니다.
새로운 기능
- JSON, textproto, proto 바이너리 (디코딩되지 않음) 변형이 있는 공개 API
PerfettoTraceProcessor.Session.queryMetrics
API를 추가합니다. 이를 통해 TraceProcessor에 내장된 측정항목을 쿼리할 수 있습니다. (I54d7f, b/304038382) - 프로파일링 트레이스 (예: perfetto, 메서드 트레이스)를 더 쉽게 도구화할 수 있도록 JSON 출력에
profilerOutput
를 추가했습니다. (I05ddd, b/332604449) - 벤치마크 Perfetto 구성에 전원 태그를 추가했습니다. 예를 들어 wakelock 트레이스 포인트를 캡처합니다. (Icfe44, b/286551983)
- inst 인수
androidx.benchmark.profiling.skipWhenDurationRisksAnr
를 추가했습니다. 예상 기간이 ANR을 일으킬 수 있는 경우 메서드 트레이스를 건너뛰지 않도록 false로 설정할 수 있습니다. CI 실행에서는 사용하지 않는 것이 좋습니다. - 실험용 inst 인수
androidx.benchmark.profiling.perfCompare.enable
를 추가했습니다. 이를 true로 설정하면 측정 단계와 프로파일링 단계 간의 비교 타이밍을 실행할 수 있습니다. 메서드 추적의 오버헤드를 평가하는 데 유용합니다. (I61fb4, b/329146942)
API 변경사항
- 완전한 when 문을 중단하지 않고 향후 확장을 사용 설정하도록
TraceSectionMetric.Mode
를 봉인된 클래스로 변경했습니다. (I71f7b) TraceSectionMetric.Mode.Average
및.Count
를 추가하고 더 일반적인 인수 (모드)가 인수 목록의 앞쪽에 오도록 인수의 순서를 변경하여 매개변수 이름을 지정할 필요가 줄었습니다. (Ibf0b0, b/315830077, b/322167531)- 반환 유형과 일치하도록
Metric.getResult
의 이름을getMeasurements
로 바꿨습니다. (I42595)
버그 수정
automaticGenerationDuringBuild
가 사용 중지된 경우 벤치마크가 생성된 기준 프로필을 사용하도록 수정했습니다. (Ic144f, b/333024280)nonMinified
또는 벤치마크 빌드 유형을 맞춤설정할 때 기준 프로필 생성 및 벤치마킹을 사용 설정하도록BaselineProfile
Gradle 플러그인 속성 재정의를 수정했습니다. (Ib8f05, b/324837887)- 느린 기기에서도 메서드 트레이스가 완전히 캡처되고 유효하도록 macrobenchmark에서 메서드 트레이스 플러시를 수정했습니다. (I6349a, b/329904950)
- Perfetto 트레이스 레코드에서 차단 시작을 사용 설정하여 트레이스 시작 시 데이터 누락 위험을 줄입니다. API 33 이상에서만 지원됩니다. (Ie6e41, b/310760059)
- 벤치마크 모듈에서 Android Test Orchestrator를 사용하면 모듈별 출력 JSON 파일이 반복적으로 덮어쓰기되므로 경고를 추가했습니다. (Ia1af6, b/286899049)
- 스튜디오 출력의 일관성을 위해 기기 언어를 무시하고 ',' (쉼표)를 천 단위 구분자로 강제합니다. (I3e921, b/313496656)
- 이제
TraceSectionMetric
에서Trace.{begin|end}AsyncSection
를 사용하여 만든 슬라이스를 지원합니다. (I91b32, b/300434906) - 모든 시작 감지 실패에 log.w / 예외 라벨을 추가했습니다. 이렇게 해도 현재 동작은 변경되지 않으며 (따라서 일부 오류가 발생하고 다른 오류는 시작을 감지하지 못함) 더 이해하기 쉽게 됩니다. 일반적으로
Log.w()
이고 시작 측정항목을 보고하지 못하는 경우 프레임 외 이벤트가 누락된 경우입니다. 시작이 감지되면 프레임 타이밍 정보 (UI/RT 슬라이스에서 가져옴)를 제외하고 예외가 발생합니다. (Id240f, b/329145809) - Macrobenchmark를 실행하기 전에 백그라운드 dexopt 작업을 취소하여 간섭을 줄입니다. (I989ed)
- 생성된 프레임 수가 변경되어 측정이 변경되는 시나리오를 찾는 데 도움이 되도록
FrameTimingMetric
에frameCount
측정을 추가했습니다 (새 애니메이션 추가, 무효화 문제 수정). (I1e5aa) - 문서에서 사용 가능한 경우
frameOverrunMs
가 추적에 선호되는 측정항목이며 그 이유를 명확히 했습니다. (I18749, b/329478323)
버전 1.3.0-alpha02
2024년 3월 20일
androidx.benchmark:benchmark-*:1.3.0-alpha02
이 출시되었습니다. 버전 1.3.0-alpha02에는 이 커밋이 포함되어 있습니다.
새로운 기능
삽입된 proguard 규칙을 통한 마이크로벤치의 실험용 R8 지원 이 지원은 실험용이며 라이브러리 모듈 테스트를 축소하려면 AGP 8.3이 필요합니다. 다음을 사용하여 벤치마크 모듈의
build.gradle
에서 R8 축소/최적화를 사용 설정합니다. 그러면 워크로드에 따라 성능이 크게 향상됩니다. (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
버그 수정
- 메서드 추적 경고가 마이크로벤치 출력과 별도의 행에 표시되도록 수정했습니다. (I0455c, b/328308833)
버전 1.3.0-alpha01
2024년 2월 21일
androidx.benchmark:benchmark-*:1.3.0-alpha01
이 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.
API 변경사항
- 불필요한 'should' 단어를 피하기 위해
MicrobenchmarkConfig
불리언 매개변수의 이름을 바꿨습니다. (Ia8f00, b/303387299) - 특히 CI의 대규모 모음에서 기본 스레드 벤치마크 (예: 뷰 또는 Compose UI를 터치하는 벤치마크)가 ANR을 트리거하지 않도록
BenchmarkRule.measureRepeatedOnMainThread
를 추가했습니다. (I5c86d) - Perfetto 트레이스에서 추출하는 대신 플랫폼에서 직접 측정값을 가져오는
FrameTimingMetric
의 실험용 대체 구현인FrameTimingGfxInfoMetric
를 추가했습니다. (I457cb, b/322232828) - 개별
warmUp
반복 중에 ART 프로필을 덤프하는 기능을 추가합니다. (I17923) TraceSectionMetric
API의 몇 가지 변경사항:Mode.Min
,Mode.Max
추가- 섹션 이름을 측정항목 라벨로 재정의하는 라벨 인수 추가
- 측정항목의 의미를 명확히 하기 위해 출력에 모드 이름을 추가했습니다.
- 이 측정항목은 반복되는 이벤트에 주로 사용되므로 기본값을 합계로 변경했습니다. CI 사용량의 이러한 변경사항에 주의하세요. 중단이 발생하거나 파싱이 중단될 수 있습니다. (Ic1e82, b/301892382, b/301955938)
버그 수정
- 지정된 관리 기기가 없는 경우 기준 프로필 Gradle 플러그인의 오류 메시지를 개선했습니다. (Idea2b, b/313803289)
- AGP 8.3.0-alpha15 이전에 AAR에 라이브러리 기준 프로필을 포함하는 문제를 수정했습니다. (I1d2af, b/313992099)
- 생성 작업이 끝날 때 기준 및 시작 프로필 출력 URL을 수정했습니다. (I802e5, b/313976958)
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
를 수정하기 위해 데이터 소스 시간 제한을 조정했습니다. (I8dc7d, b/323601788)ProfileInstaller
1.3이 없는 앱을 벤치마킹할 때 비정상 종료를 해결하기 위해 셰이더 삭제 동작을 재정의하는 두 가지 계측 인수를 추가합니다.androidx.benchmark.dropShaders.enable=true/false
: 특히 아직 profileinstaller 1.3을 사용하지 않는 앱을 벤치마킹할 때 모든 셰이더 드롭 (StartupMode.Cold
실행 시 실행되는 드롭 포함)을 건너뛰는 데 사용할 수 있습니다.androidx.benchmark.dropShaders.throwOnFailure=true/false
: 셰이더를 삭제하려고 할 때 실패를 허용하도록 사용할 수 있습니다(예: profileinstaller 1.3(I4f573) 없이 앱을 벤치마킹할 때).
- 몇 초 이상 걸릴 것으로 예상되는 경우 UI 스레드에서 메서드 트레이스를 건너뛰고 발생 시 메서드 트레이스를 정리합니다. (I6e768)
- 파일을 작성하거나 후처리할 때 불분명한 비정상 종료를 방지하기 위해 파일 이름이 200자 초과하면 발생합니다. (I4a5ab)
- 트레이스 시작과 끝에 있는 종료되지 않은 프레임이 함께 페어링되어 매우 긴 단일 프레임으로 잘못 보고되는 문제를 수정했습니다. (I39353, b/322232828)
- API 30~33에서 패키지를 재설치할 때 API 30 이상에서
--skip verification
를 사용하여 사용자 빌드의 ART 프로필을 삭제합니다. 이렇게 하면 일부 기기 클래스에서 실패를 일으키는 Play 프로텍트 경고를 우회하는 데 도움이 됩니다. (Ic9e36) - 시스템 UI 또는 런처와 같은 시스템 앱이 아닌 경우
am force-stop
를 사용하여 앱을 종료합니다. (I5e028) - 이제 Macrobenchmark는 타겟 애플리케이션이 ART 프로필을 플러시할 때까지
1 second
를 기다립니다 (이전에는500 ms
를 기다렸음). (I85a50, b/316082056) - 프레임이 생성되지 않을 때
FrameTimingMetric
오류를 개선하고 문제를 진단하는 데 도움이 되도록 측정항목 파싱에 실패할 때 항상 트레이스 링크를 출력합니다. (I956b9) - 특히 특정 OEM 기기에서 프레임 ID를 파싱하지 못하는
FrameTimingMetric
의 비정상 종료 문제를 수정했습니다. (Ia24bc, b/303823815, b/306235276) FrameMetrics
의 검사 엄격성을 완화하고 오류 메시지에 세부정보를 추가했습니다. (Iadede)
버전 1.2
버전 1.2.4
2024년 4월 17일
androidx.benchmark:benchmark-*:1.2.4
이 출시되었습니다. 버전 1.2.4에는 이 커밋이 포함되어 있습니다.
버그 수정
- 벤치마크 변형에서 기준 프로필 srcset이 설정되지 않는 문제를 수정했습니다. 또한 순환 종속 항목을 일으키는 라이브러리의
automaticGenerationDuringBuild
도 수정합니다. (I28ab7, b/333024280) - 시스템 UI 또는 런처와 같은 시스템 앱이 아닌 경우
am force-stop
를 사용하여 앱을 종료합니다. 이렇게 하면 프로세스 종료가 완전히 완료되지 않아 'Package $package must not be running prior to cold start!' 오류로 인해 비정상 종료되는StartupMode.COLD
벤치마크가 수정됩니다. (I5e028)
버전 1.2.3
2024년 1월 24일
androidx.benchmark:benchmark-*:1.2.3
이 출시되었습니다. 버전 1.2.3에 포함된 커밋을 확인하세요.
버그 수정
- AGP 버전이 8.3.0 이상인 경우 기준 프로필 Gradle 플러그인에서 예외를 삭제했습니다.
- AGP 8.3.0-alpha15 이전에 AAR에 라이브러리 기준 프로필을 포함하는 문제를 수정했습니다.
버전 1.2.2
2023년 12월 1일
androidx.benchmark:benchmark-*:1.2.2
이 출시되었습니다. 버전 1.2.2에 포함된 커밋을 확인하세요.
기준 프로필
- 실행 로그에 기준 프로필 출력 파일 경로가 로컬 파일 URI로 표시됩니다. (aosp/2843918, aosp/2853665, b/313976958)
버전 1.2.1
2023년 11월 15일
androidx.benchmark:benchmark-*:1.2.1
이 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
새로운 기능
- 사용자가 테스트 변형을 사용 중지할 때의 오류 메시지를 개선했습니다. (b/307478189)
- AS 테스트 실행 통합을 지원하는 속성을 추가했습니다. (b/309805233), (b/309116324)
버전 1.2.0
2023년 10월 18일
androidx.benchmark:benchmark-*:1.2.0
이 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0 이후 중요 변경사항
기준 프로필
- 새로운 기준 프로필 Gradle 플러그인은 기준 프로필을 캡처하고 테스트 및 빌드 워크플로에 포함하는 작업을 자동화합니다.
BaselineProfileRule.collect
는 이제 이전 실험용BaselineProfileRule.collectBaselineProfile
API의 간소화된 버전으로 안정화되었습니다.packageName
를 지정하고 앱을 실행하기만 하면 됩니다.
- 이제 기준 프로필을 생성하는 라이브러리의 경우 코드 (
BaselineProfileRule.collect
인수) 또는 더 간단하게 Gradle 플러그인에서 생성된 규칙을 필터링할 수 있습니다. - 수정사항
- Android U+에서 기준 프로필 수집을 수정했습니다. (Id1392, b/277645214)
Macrobenchmark
- 컴파일
- 이제 Macrobenchmark가 각 컴파일의 컴파일 상태를 완전히 재설정합니다. 이렇게 하려면 Android 14 이전에 APK를 재설치해야 하므로 측정 대상에서 상태 (예: 사용자 로그인)를 유지하려면 Android 14 이상에서 벤치마킹하는 것이 좋습니다.
- 앱 컴파일을 별도로 제어하고
CompilationMode.Ignore()
또는 계측 인수를 사용하여 컴파일을 건너뛰는 방법으로 이 문제를 해결할 수도 있습니다.
계측 인수
- 빠른 유효성 검사 실행(예: 벤치마크 생성 시 또는 사전 제출 시)을 위한
androidx.benchmark.dryRunMode.enable
계측 인수 지원 (이미 microbenchmark에서 사용 가능) androidx.benchmark.profiling.mode=StackSampling
및MethodTracing
지원- 런타임 필터링 기준 프로필과 매크로벤치마크 규칙 테스트를 허용하도록
androidx.benchmark.enabledRules
를 추가했습니다. - tracing-perfetto를 사용한 추적(예: Compose 재구성 추적)을 사용 설정하는
androidx.benchmark.perfettoSdkTracing.enable
인수를 추가했습니다.StartupMode.COLD
와 함께 사용하면 앱 시작 중에 추적 라이브러리가 로드되고 사용 설정되므로 타이밍에 상당한 영향을 미칩니다.
- 빠른 유효성 검사 실행(예: 벤치마크 생성 시 또는 사전 제출 시)을 위한
요구사항
- 이제 프로필 캡처 / 재설정 및 셰이더 캐시 삭제를 사용 설정하려면 타겟 앱에
ProfileInstaller
1.3.0 이상이 필요합니다.
- 이제 프로필 캡처 / 재설정 및 셰이더 캐시 삭제를 사용 설정하려면 타겟 앱에
새로운 실험용 Metrics API
- 앱의
trace("") {}
블록에서 간단한 타이밍을 추출할 수 있는 실험용TraceSectionMetric
또는 PerfettoTraceProcessor
의 전체 쿼리 기능을 활용할 수 있는 TraceMetric을 추가했습니다. - 전원 사용량 정보를 캡처하는 실험용
PowerMetric
를 추가했습니다. - 페이지 오류를 계산하는 실험용
MemoryCountersMetric
를 추가했습니다. - 시스템 트레이스 (Perfetto 트레이스라고도 함)에서 측정항목을 추출하는 데 내부적으로 사용되는 실험용
PerfettoTraceProcessor
API를 추가했습니다.
- 앱의
수정
- 여러 APK (예: App Bundle)에서 설치된 앱에서 프로필을 설치하거나 추출할 때 발생하는 비정상 종료를 수정했습니다.
- 일관되지 않은 프레임 ID (일반적으로 API 31 이상에서 리플이 발생하는 동안의 프레임)가 있는 프레임을
FrameTimingMetric
에서 무시하는 문제를 수정했습니다. (I747d2, b/279088460) - 64MB를 초과하는 트레이스의 파싱 오류가 수정되었습니다. (Ief831, b/269949822)
- 기기 (특히 에뮬레이터) OS 이미지가 추적 또는 컴파일에 올바르게 구성되지 않은 경우의 오류를 명확히 했습니다.
- 배터리가 없는 기기 (마이크로 및 매크로)의 배터리 잔량 확인 건너뛰기
- 잘못된 출력 디렉터리에 대한 더 명확한 오류와 더 안전한 기본값으로 파일 출력이 개선되었습니다.
- 셰이더 캐시를 일관되게 삭제하여
StartupMode.COLD
의 안정성을 개선했습니다 (MacrobenchmarkScope.dropShaderCache
를 통해서도 노출됨). startActivityAndWait
의 Leanback 대체를 수정했습니다.
Microbenchmark
- 기능
- 프로파일링은 다른 측정항목 다음의 별도 단계로 이동되었으므로 한 번의 테스트 실행으로 정확한 타이밍 및 프로파일링 결과를 모두 표시할 수 있습니다.
- 실험용 API
- 맞춤 측정항목을 정의하고 추적 및 프로파일링을 구성하기 위한 실험용
MicrobenchmarkConfig
API를 추가했습니다. 메서드 트레이스를 캡처하거나 트레이스 포인트를 캡처하는 데 사용할 수 있습니다 (단, 추적 오버헤드를 주의하세요). - JUnit 없이
BenchmarkRule
과 별도로BenchmarkState
를 제어하기 위한 실험용 API를 추가했습니다. - 벤치마크 API와 별개로 맞춤 구성으로 Perfetto 트레이스를 캡처할 수 있는 실험용
PerfettoTrace
레코드를 추가했습니다.
- 맞춤 측정항목을 정의하고 추적 및 프로파일링을 구성하기 위한 실험용
- 수정사항
- Android 스튜디오 벤치마크 출력에서 선행 공백이 누락되는 문제를 해결합니다.
- Android 스튜디오 벤치마크 출력에서 경고가 출력되지 않을 수 있는 문제를 수정했습니다.
- Android 13 (API 33) 및 이후 버전에서
SampledProfiling
비정상 종료가 수정되었습니다. IsolationActivity
및 Perfetto 추적을 건너뛰어dryRunMode
의 성능을 대폭 개선했습니다 (이전 OS 버전에서 테스트 실행 모드가 최대 10배 더 빨라짐).
버전 1.2.0-rc02
2023년 10월 6일
androidx.benchmark:benchmark-*:1.2.0-rc02
이 출시되었습니다. 버전 1.2.0-rc02에 포함된 커밋을 확인하세요.
버그 수정
- 더 이상
BaselineProfile
플러그인 파일 복사가 중단되지 않도록 벤치마크 파일 출력을 수정합니다. 파일이 생성되고 기기에서 복사되었지만 gradle 플러그인이 파일을 인식하지 못하도록 이름이 변경되었습니다. (I8dbcc, b/303034735, b/296453339) - macrobenchmark 모듈에서 타겟 애플리케이션으로 삽입할 때
tracing-perfetto
로드 오류 메시지를 명확히 했습니다.
버전 1.2.0-rc01
2023년 9월 20일
androidx.benchmark:benchmark-*:1.2.0-rc01
이 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
- 이제 벤치마크에서 Perfetto SDK 추적이 초기화되지 않을 때 예외 (해결 방법 안내 포함)가 발생합니다. (I6c878, b/286228781)
- ART 메서드 트레이스 -> perfetto 형식을 변환할 때 발생하는 OOM 비정상 종료를 수정했습니다. (I106bd, b/296905344)
- (Macrobenchmark) 스튜디오 테스트 출력에서 연결될 때 메서드 추적 라벨을 명확히 했으며, 메서드 추적 파일 이름이 기기/호스트에서 고유하도록 수정하여 두 개 이상의 벤치마크가 실행될 때 덮어쓰지 않도록 했습니다. (I08e65, b/285912360)
- 기준 프로필을 캡처할 때 기기가 깨어 있는지 확인합니다. (I503fc)
버전 1.2.0-beta05
2023년 8월 30일
androidx.benchmark:benchmark-*:1.2.0-beta05
이 출시되었습니다. 버전 1.2.0-beta05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 기준 프로필 Gradle 플러그인이 Android Gradle 플러그인 8.3을 지원합니다. (aosp/2715214)
버전 1.2.0-beta04
2023년 8월 23일
androidx.benchmark:benchmark-*:1.2.0-beta04
이 출시되었습니다. 버전 1.2.0-beta04에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 기준 프로필 Gradle 플러그인이 Android Gradle 플러그인 8.3을 지원합니다. (aosp/2715214)
버그 수정
- 출력 파일 이름에서 '=' 및 ':'을 피하여 출력 파일 이름을 추가로 정리하여 파일 (특히 매개변수화된 테스트의 파일) 쓰기 / 이동 및 가져오기 실패를 수정합니다. (I759d8)
버전 1.2.0-beta03
2023년 8월 9일
androidx.benchmark:benchmark-*:1.2.0-beta03
이 출시되었습니다. 버전 1.2.0-beta03에 포함된 커밋을 확인하세요.
API 변경사항
TraceSectionMetric
를 타겟 패키지로만 필터링하는 인수를 추가했습니다(기본적으로 사용 설정됨). (Ia219b, b/292208786)
버그 수정
- 아티팩트 이름 및 기타 참조와 일관성을 유지하기 위해
fullTracing.enable
계측 인수의 이름을perfettoSdkTracing.enable
로 바꿨습니다.fullTracing.enable
는 대체 수단으로 계속 작동합니다. (I7cc00) - 이제 마이크로 벤치마크 루프/단계 추적을 비롯한 벤치마크 라이브러리 내부 트레이스 포인트가 스튜디오 시스템 트레이스 뷰어에 표시되고 Perfetto에서 올바른 프로세스 아래에 중첩됩니다. (I6b2e7, b/293510459)
- API 31 이상에서 macrobenchmark NOT-PROFILEABLE 오류를 삭제하고 eng/userdebug 루팅 기기에서 프로파일링 가능 여부 확인을 건너뜁니다. (I2abac, b/291722507)
- 이제 Dex 레이아웃 최적화를 사용할 때 시작 프로필 규칙도 기준 프로필 규칙으로 간주됩니다. (aosp/2684246, b/293889189)
버전 1.2.0-beta02
2023년 7월 26일
androidx.benchmark:benchmark-*:1.2.0-beta02
이 출시되었습니다. 버전 1.2.0-beta02에 포함된 커밋을 확인하세요.
API 변경사항
- 마이크로벤치 맞춤 측정항목 및 구성 (예: 프로파일러, 추적)을 위한 실험용 API를 추가했습니다. (I86101, b/291820856)
버그 수정
- 최근 API 26/28 ARM64 에뮬레이터에서 수정된 것처럼 OS가 추적을 위해 잘못 구성된 경우 macrobench에서 오류를 보고합니다. (I0a328, b/282191686)
- 일부 에뮬레이터에서 최근 이 문제를 해결했기 때문에 컴파일 재설정 실패에 에뮬레이터 업데이트를 제안하는 세부정보를 추가했습니다. (I8c815, b/282191686)
androidx.test.uiautomator:uiautomator:2.2.0
를implementation
종속 항목 대신api
로 만듭니다. (I1981e)
버전 1.2.0-beta01
2023년 7월 18일
androidx.benchmark:benchmark-*:1.2.0-beta01
이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.
버그 수정
- 스튜디오의 벤치마크 출력에서 경고가 억제되는 경우가 있는 문제를 수정하고 벤치마크 출력의 선행 공백이 스튜디오에 표시되지 않는 문제를 해결했습니다. (Ia61d0, b/227205461, b/286306579, b/285912360)
FrameTimingMetric
의 주석을 수정했습니다. 하위 측정항목의 이름은frameDurationCpuMs
입니다. (Ib097f, b/288830934).
버전 1.2.0-alpha16
2023년 6월 21일
androidx.benchmark:benchmark-*:1.2.0-alpha16
이 출시되었습니다. 버전 1.2.0-alpha16에 포함된 커밋을 확인하세요.
API 변경사항
BaselineProfileRule.collectBaselineProfile()
API의 이름이BaselineProfileRule.collect()
로 변경되었습니다. (I4b665)
버그 수정
androidx.benchmark.profiling.mode = MethodTracing
에 대한 Macrobenchmark 지원 (I7ad37, b/285912360)- 마이크로벤치마크 프로파일링이 별도의 단계로 이동되었으므로 측정을 대체하는 대신 측정 후에 시퀀스로 실행됩니다. 이제 캡처된 Perfetto 트레이스(있는 경우)에
MethodTracing
트레이스 섹션도 포함됩니다. (I9f657, b/285014599) Mode.Sum
를 사용하여TraceSectionMetric
에 개수 측정을 추가합니다. (Ic121a, b/264398606)
버전 1.2.0-alpha15
2023년 6월 7일
androidx.benchmark:benchmark-*:1.2.0-alpha15
이 출시되었습니다. 버전 1.2.0-alpha15에 포함된 커밋을 확인하세요.
새로운 기능
- 대상 애플리케이션의 메모리 사용량을 추적하기 위한 실험용
MemoryUsageMetric
를 추가했습니다. (I56453, b/133147125, b/281749311) PerfettoTrace.record
를 사용하여 완전히 맞춤설정된 Perfetto 구성 지원을 추가했습니다. (If9d75, b/280460183)- 기준 프로필 생성을 건너뛰는 속성을 추가했습니다. 사용법:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. (I37fda, b/283447020)
API 변경사항
collectBaselineProfile
API는 항상 안정적인 기준 프로필을 생성합니다.collectStableBaselineProfile
API가 삭제되었으며 대신collectBaselineProfile
를 사용해야 합니다. (I17262, b/281078707)- 문서에서 기본 필터 동작이 더 명확해지도록
BaselineProfileRule
의filterPredicate
인수를 null이 아닌 값으로 변경하고 이에 상응하는 기본값을 지정했습니다. (I3816e)
버그 수정
IsolationActivity
및 Perfetto 추적은 런타임의 대부분을 차지하므로dryRunMode
에서 사용 중지하여 성능을 크게 개선했습니다. (Ie4f7d)- 계측 테스트 인수
androidx.benchmark.profiling.mode=StackSampling
및androidx.benchmark.profiling.sampleFrequency
를 사용하여 Macrobenchmarks에서 호출 스택 샘플링을 지원합니다. (I1d13b, b/282188489) - Android U (API 34) 및 에뮬레이터에서 셰이더를 배치할 때 발생하는 비정상 종료를 수정했습니다. (I031ca, b/274314544)
버전 1.2.0-alpha14
2023년 5월 3일
androidx.benchmark:benchmark-*:1.2.0-alpha14
이 출시되었습니다. 버전 1.2.0-alpha14에 포함된 커밋을 확인하세요.
버그 수정
- 일치하지 않는 프레임 ID가 있는 프레임을 무시하는
FrameTimingMetric
를 수정했습니다. 이로 인해 최신 플랫폼 버전 (API 31 이상)의 일부 애니메이션이RenderThread
가 애니메이션되는 동안 (예: 물결 효과 중에) 많은 프레임을 무시하게 됩니다. (I747d2, b/279088460) - 64MB를 초과하는 트레이스의 트레이스 프로세서 파싱을 수정했습니다. (Ief831, b/269949822)
pm dump-profiles
명령어의 출력이 다르기 때문에 Android U에서 기준 프로필 생성이 실패하는 문제를 수정했습니다. (Id1392, b/277645214)- GPU 클록 잠금 스크립트를 수정하여 문자열을 올바르게 비교합니다. (I53e54, b/213935715)
버전 1.2.0-alpha13
2023년 4월 5일
androidx.benchmark:benchmark-*:1.2.0-alpha13
이 출시되었습니다. 버전 1.2.0-alpha13에 포함된 커밋을 확인하세요.
API 변경사항
- 향후 시작 프로필 기능을 지원하기 위해 기준 프로필을 생성할 때 프로필 유형 매개변수를 추가했습니다. (Ie20d7, b/275093123)
- Perfetto 트레이스의 콘텐츠를 기반으로 완전히 맞춤 측정항목을 정의하기 위한 새로운 실험용
TraceMetric
API를 추가했습니다. (I4ce31, b/219851406) - 벤치마크 중에 페이지 오류 수를 확인하는 실험용 측정항목을 추가합니다. (I48db0)
버전 1.2.0-alpha12
2023년 3월 22일
androidx.benchmark:benchmark-*:1.2.0-alpha12
이 출시되었습니다. 버전 1.2.0-alpha12에 포함된 커밋을 확인하세요.
새로운 기능
- 새로운 기준 프로필 Gradle 플러그인이 알파 버전으로 출시되어 기준 프로필을 더 쉽게 생성하고 개발자 워크플로를 간소화할 수 있습니다.
API 변경사항
- 마이크로벤치마크와 실험용
PerfettoTrace
API를 모두 포함하는 API 21 및 22에서 Perfetto 추적 지원을 삭제했습니다. 이 버전 이전에는 일부 기기에서UiAutomation
연결이 안정적이지 않았습니다. (I78e8c) - 추적 콘텐츠 파싱을 사용 설정하기 위한
PerfettoTraceProcessor
용 공개 실험용 API를 추가했습니다. 이는 Perfetto 트레이스 데이터를 기반으로 하는 완전히 맞춤설정된 측정항목을 향한 한 걸음입니다. (I2659e, b/219851406)
버전 1.2.0-alpha11
2023년 3월 8일
androidx.benchmark:benchmark-*:1.2.0-alpha11
이 출시되었습니다. 버전 1.2.0-alpha11에 포함된 커밋을 확인하세요.
버그 수정
- 여러 APK가 포함된 App Bundle에서 프로필을 재설치하거나 추출할 때
MacrobenchmarkRule
및BaselineProfileRule
에서 발생하는 비정상 종료가 수정되었습니다. (I0d8c8, b/270587281)
버전 1.2.0-alpha10
2023년 2월 22일
androidx.benchmark:benchmark-*:1.2.0-alpha10
이 출시되었습니다. 버전 1.2.0-alpha10에 포함된 커밋을 확인하세요.
새로운 기능
- Android 14 이상에서 Macrobenchmark는 컴파일 상태를 재설정하기 위해 타겟 애플리케이션을 더 이상 재설치하지 않습니다. 이는 새로운 플랫폼 기능 덕분입니다. 이전에는 루팅된 기기가 있어야 하거나 각 벤치마크가 실행되기 전에 삭제되는 모든 애플리케이션 상태(예: 사용자 로그인)를 처리해야 했습니다. (I9b08c, b/249143766)
버그 수정
- 컴파일 건너뛰기로 인해 더 이상 빈 프로필로 비정상 종료되지 않도록
DryRunMode
를 수정했습니다. 대신 단일 반복을 실행하고 프로필을 추출하여 무언가가 캡처되도록 합니다. (I2f05d, b/266403227) - 이전 API 수준에서 powerstats가 있는지 확인할 때 발생하는
PowerMetric
비정상 종료 문제를 수정했습니다. (5faaf9, b/268253898)
버전 1.2.0-alpha09
2023년 1월 11일
androidx.benchmark:benchmark-*:1.2.0-alpha09
가 출시되었습니다. 버전 1.2.0-alpha09에 포함된 커밋을 확인하세요.
버그 수정
- 모든 벤치마크 및 기준 프로필 생성을 사용 중지하기 위해
None
을androidx.benchmark.enabledRules
계측 인수에 전달하는 기능이 사용 설정되었습니다. (I3d7fd, b/258671856) - 앱 모듈의
PerfettoTrace
캡처(예: 비 자체 계측 테스트 APK)를 수정했습니다. (I12cfc) - 스튜디오에서 기준 프로필 adb pull 인수가 출력되는 순서를 수정했습니다. (I958d1, b/261781624)
- 이제 ARM 에뮬레이터 API 33이 Macrobenchmark를 실행하려고 할 때 올바르게 인식되고 경고를 올바르게 출력합니다. (69133b,b/262209591)
- Macrobenchmark에서 배터리가 없는 기기에서 배터리 수준 확인을 건너뜁니다. (fe4114, b/232448937)
버전 1.2.0-alpha08
2022년 12월 7일
androidx.benchmark:benchmark-*:1.2.0-alpha08
이 출시되었습니다. 버전 1.2.0-alpha08에 포함된 커밋을 확인하세요.
API 변경사항
- 테스트 동작 및 성능을 검사하기 위해 테스트의 일환으로 Perfetto 트레이스(시스템 트레이스라고도 함)를 캡처하는 실험용 새 API
PerfettoTrace.record {}
및PerfettoTraceRule
을 추가했습니다. (I3ba16) - 이제
BaselineProfileRule
은 패키지 접두사 목록 대신 필터 조건자를 허용합니다. 이렇게 하면 테스트가 필터링에 대한 완전한 제어 권한을 갖게 됩니다. (I93240) - N회 반복에서 기준 프로필이 안정될 때까지 기다리는 실험용 API
BaselineProfileRule.collectStableBaselineProfile
을 추가합니다. (I923f3) BaselineProfileRule
을 사용하여 기준 프로필을 생성할 때 출력 파일 이름 접두사를 지정하는 기능을 추가합니다. (I7b59f, b/260318655)
버그 수정
- 특히 API 21/22에서 출력 파일이 아무 오류 없이 작성/추가되지 않는 문제를 방지하는 파일 출력 쓰기의 안전성을 개선합니다. (If8c44, b/227510293)
simpleperf
트레이스 출력을 수정하여 파일을 올바르게 만들고 배치합니다. 이 방식은 gradle에서 파일을 가져오지 못하는 문제를 더 일반적인 방식으로 수정해야 합니다. (I12a1c, b/259424099)- profileinstaller가 너무 오래되었을 때 표시되는 profileinstaller 오류 메시지를 개선합니다. 이제 이 메시지를 통해 기준 프로필 측정을 지원하지 않는다고 하는 대신 API 31~33에서 기준 프로필을 측정하기 위해 profileinstaller 버전을 1.2.1로 업데이트하라고 알립니다. (Ia517f, b/253519888)
- 실패한 perfetto 캡처 바이너리 설정 및 트레이스 캡처 실패를 포함하여 API 23 이하에서 여러 셸 명령어 실패를 나타내는 오류 메시지 출력을 수정했습니다. (Ib6b87, b/258863685)
- 생성된 프로필 규칙을 자동으로 정렬하여 시간 경과에 따라 변경되는 변경 횟수를 최소화합니다(프로필 규칙을 소스 제어에 체크인할 때). (Ie2509)
- Android 13(API 33) 미만의 루팅되지 않은 빌드에서
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
메시지와 함께 비정상 종료되는 문제가 수정되었습니다. (I6c245, b/259508183)
알려진 문제
- 아직 출시되지 않은 profileinstaller 매니페스트에 브로드캐스트 레지스트리가 누락되어 MacrobenchmarkScope.dropShaderCache()
가 비정상 종료될 수 있습니다. (I5c728, b/258619948) profileinstaller:1.3.0-alpha02
의 문제를 해결하려면 애플리케이션 AndroidManifest.xml에 다음을 추가하세요(벤치마크 아님).
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
버전 1.2.0-alpha07
2022년 11월 9일
androidx.benchmark:benchmark-*:1.2.0-alpha07
이 출시되었습니다. 버전 1.2.0-alpha07에 포함된 커밋을 확인하세요.
API 변경사항
- Macrobenchmarks에서 에너지와 전력을 측정하기 위한
PowerMetric
API를 추가했습니다. (Ife601, b/220183779) - 셰이더 캐시를 실제로 드롭하도록
MacrobenchmarkScope.dropShaderCache()
를 수정했습니다. 이렇게 하면StartupMode.COLD
벤치마크에서 약 20ms의 노이즈가 삭제됩니다. 이제 셰이더가 각 반복에서 일관되게 삭제되기 때문입니다. 이전에는 준비 반복을 사용하는Partial
컴파일 시 빠르게 숫자가 잘못 보고되었습니다. 준비 중에 셰이더 캐싱이 발생할 가능성이 높았기 때문입니다. 이 수정사항을 적용하려면 루팅된 기기 또는 타겟 앱에서profileinstaller:1.3.0-alpha02
를 사용해야 합니다.ProfileInstaller
라이브러리의 API 변경사항은 ProfileInstaller 1.30-alpha02 페이지를 참고하세요. (Ia5171, b/231455742) TraceSectionMode("label", Mode.Sum)
을 추가하여 동일한 라벨이 있는 여러 트레이스 섹션에서 소요된 총시간을 측정할 수 있습니다. 예를 들어TraceSectionMetric("inflate", Mode.Sum)
은 확장에 사용된 macrobenchmark의 총시간에 관해inflateMs
측정항목을 보고합니다. 또한 API 29 요구사항을 삭제했습니다.TraceSectionMetric
이androidx.tracing.Trace
와 함께 더 낮은 API 수준으로 다시 작동하기 때문입니다. 이때 타겟 앱 내에서는forceEnableAppTracing
을 사용합니다. (Id7b68, b/231455742)
버그 수정
- 모든 출력/오류의 유효성을 검사하여 모든 내부 셸 명령어의 안전성을 개선했습니다. (I5984d, b/255402908, b/253094958)
- 기준 프로필
adb pull
명령어에 기기를 지정하므로 여러 기기가 연결된 경우(최대 하나의 에뮬레이터) pull 명령어를 간단히 복사할 수 있습니다. (I6ac6c, b/223359380) - macrobenchmark 테스트 APK가 자체 계측으로 설정되지 않은 경우 오류가 추가됩니다. 이 오류는 타겟 앱의 프로세스 내에서 매크로벤치마킹이 발생하지 않도록 합니다. 프로세스에서 매크로벤치는 앱을 컴파일/종료/콜드 스타트하거나 자체 권한을 제어할 수 없습니다. (I4279b)
measureRepeated()
에서StartupMode.COLD
가setupBlock
후에 타겟 프로세스를 종료하지 않는 문제를 수정했습니다. 이제 앱과 상호작용하는setupBlock
이 앱 프로세스가 실행되거나 잘못된 콜드 스타트가 측정되도록 하지 않습니다. (I8ebb7)
버전 1.2.0-alpha06
2022년 10월 24일
androidx.benchmark:benchmark-*:1.2.0-alpha06
이 출시되었습니다. 버전 1.2.0-alpha06에 포함된 커밋을 확인하세요.
API 변경사항
BaselineProfileRule
이 더 이상 Android 13(API 33)에서 루트가 필요하지 않으며 더 이상 실험용이 아닙니다. (Ie0a7d, b/250083467, b/253094958)- 이 변경으로 인해 앱의 프로필이 루팅되지 않은 기기의 디스크로 플러시되는 방식이 수정되지만 타겟 앱의 profileinstaller 종속 항목 업데이트가 필요합니다.
- 루팅되지 않은 기기에서
BaselineProfileRule
또는CompilationMode.Partial(warmupIterations)
을 사용하려면androidx.profileinstaller.profileinstaller:1.3.0-alpha01
을 사용하도록 타겟 앱도 업데이트해야 합니다. 이렇게 하면 프로필을 디스크에 올바르게 플러시하여 컴파일/추출할 수 있습니다.
버그 수정
- API 33 이상에서 발생하는
SampledProfiling
비정상 종료 문제를 수정했습니다. (I40743, b/236109374)
버전 1.2.0-alpha05
2022년 10월 5일
androidx.benchmark:benchmark-*:1.2.0-alpha05
가 출시되었습니다. 버전 1.2.0-alpha05에 포함된 커밋을 확인하세요.
버그 수정
- 스튜디오 시스템 트레이스 뷰어에서 트레이스를 캡처한 벤치마크의 프레임 분석을 수정했습니다. (I3f3ae, b/239677443)
FrameTimingMetric
을 수정하여FrameOverrun
이 API 29 대신 31이 필요한 것으로 표시됩니다. (I716dd, b/220702554)BaselineProfileRule
에서 반복을 설정하고 타겟 패키지가 설치되지 않은 경우 확실히 오류가 발생합니다(MacrobenchmarkRule에 맞게 이미 실행됨). (Ic09a3, b/227991471)
버전 1.2.0-alpha04
2022년 9월 21일
androidx.benchmark:benchmark-*:1.2.0-alpha04
가 출시되었습니다. 버전 1.2.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
로컬 개발 속도를 높이고 앱 자동화의 유효성을 검사(예: 사전 제출)하기 위해 macrobenchmark에
dryRunMode.enable
계측 인수 지원을 추가합니다(이미 microbenchmark에서 사용 가능). 그러면 반복이 1로 재정의되고, 컴파일을 건너뜁니다. 또한, 모든 구성 오류가 표시되지 않고, 측정과 관련된 .json 파일 출력이 사용 중지됩니다. (Ib51b4, b/175149857)Gradle 명령줄에서 다음을 실행합니다.
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
build.gradle에 다음을 추가합니다.
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
버그 수정
StartupTimingMetric
에서 더 이상MacrobenchmarkScope.startActivityAndWait()
을 통해 실행되는 측정된 활동이 필요하지 않도록 수정했습니다. 즉, 측정항목이 알림,Context.startActivity()
, 탐색 기반의 인앱 활동 또는 셸 명령어 등에서 실행을 선택할 수 있습니다. (Ia2de6, b/245414235)- 프레임 감지의 엄격한 정도를 낮춰
startActivityAndWait
이 에뮬레이터에서 실행 완료를 기다리는 동안 시간 초과가 발생하는 버그를 수정했습니다. (Ibe2c6, b/244594339, b/228946895)
버전 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의 각 시스템 카테고리에서 총 전력과 에너지를 측정하는
TotalPowerMetric
과TotalEnergyMetric
을 추가했습니다(I3b26b, b/224557371).
버그 수정
- 컴파일된 메서드가 루팅되지 않은 빌드의 각 벤치마크 간에 올바르게 재설정되지 않는 문제를 수정했습니다. 이를 위해서는 반복할 때마다 APK를 다시 설치해야 하고 그러면 각 macrobenchmark의 애플리케이션 데이터가 삭제됩니다(I31c74, b/230665435).
- API 21/22에서 트레이스 기록 비정상 종료 문제를 해결했습니다(If7fd6, b/227509388, b/227510293, b/227512788).
- 활동 실행 완료 감지를 점검하여 시작 macrobenchmark에서 '측정항목을 읽을 수 없음' 예외 문제를 해결했습니다. (Ia517c)
버전 1.1.1
버전 1.1.1
2022년 11월 9일
androidx.benchmark:benchmark-*:1.1.1
이 출시되었습니다. 버전 1.1.1에 포함된 커밋을 확인하세요.
버그 수정
- 일부 Android11(API 30) 이상 기기에서 발생하는
android.system.ErrnoException: open failed: EACCES
를 수정했습니다. 이는1.2.0-alpha01
에서 선별된 수정사항입니다. (aosp/2072249)
버전 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 이후 중요 변경사항
시작 및 스크롤과 같은 전체 앱 상호작용을 측정할 수 있는 Jetpack Macrobenchmark 지원을 통해 트레이스 캡처 기능과 트레이스 섹션 측정 기능을 제공합니다.
기준 프로필을 지원합니다.
CompilationMode.Partial
: 기준 프로필의 효과를 측정합니다.@BaselineProfileRule
: 지정된 중요한 사용자 여정을 위한 기준 프로필을 자동으로 생성합니다.
Microbenchmark 실행 시 할당 측정항목 및 프로파일링을 지원합니다.
버전 1.1.0-rc03
2022년 6월 1일
androidx.benchmark:benchmark-*:1.1.0-rc03
이 출시되었습니다. 버전 1.1.0-rc03에 포함된 커밋을 확인하세요.
버그 수정
벤치마크를 반복할 때마다 타겟 패키지를 재설치하지 않아야 합니다. ( aosp/2093027, b/231976084)
pressHome()
에서300ms
지연을 삭제합니다. (aosp/2086030, b/231322975)내부적으로 사용되는 Shell 명령어를 최적화하여 Macrobenchmark 반복 속도를 개선합니다. (aosp/2086023, b/231323582)
Macrobenchmark를 사용하여 기준 프로필을 생성할 때 관리 Gradle 기기를 지원합니다. (aosp/2062228, b/228926421)
버전 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에 포함된 커밋을 확인하세요.
버그 수정
CompilationMode.None
사용 시 프로필 설치를 건너뛴 다음 패키지를 종료합니다. (aosp/1991373)StartupMode.COLD
사용 시 매크로 밴치마크에서 시작 측정항목을 수집할 수 없는 문제를 해결했습니다. (aosp/2012227 b/218668335)
버전 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.Speed
가None
으로 잘못 처리되는 문제를 해결했습니다. (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의
minSdkVersion
이23
입니다. (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에 포함된 커밋을 확인하세요.
새로운 기능
- Jetpack ProfileInstaller 라이브러리를 사용하여 설치된 프로필을 지원하는 새로운
CompilationMode.BaselineProfile
을 추가했습니다. (aosp/1720930)
버그 수정
벤치마크 오류를 억제하는 샘플 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-junit4
및 androidx.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-alpha01
및 androidx.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.0
및 androidx.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-beta01
및 androidx.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-alpha06
및 androidx.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-alpha05
및 androidx.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-alpha04
및 androidx.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 종속 항목이 있는 클래스인AndroidBenchmarkRunner
및BenchmarkRule
이 포함되며 두 클래스 모두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-alpha03
및 androidx.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-alpha02
및 androidx.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
이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.