Benchmark
最近更新时间 | 当前稳定版 | 下一候选版本 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2020 年 6 月 10 日 | 1.0.0 | - | - | 1.1.0-alpha01 |
声明依赖项
如需添加 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。如果您发现了新问题,或对库的改进有某些建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.1.0
版本 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 - 在 Nexus5X 上测量,时钟处于锁定状态)。该指标显示以下位置:在 Android Studio 控制台输出以及
- 性能剖析支持 - 您现在可以捕获基准运行的性能剖析数据,以检查代码运行缓慢的原因。Benchmark 支持捕获方法跟踪记录或 ART 中的方法采样。您可以使用 Android Studio 中的性能剖析器(依次选择“File > Open”)来检查这些文件。
- Benchmark Gradle 插件现在提供默认设置,以便简化设置过程:
testBuildType
默认设置为发布,以避免使用内置代码覆盖率的依赖项。发布 buildType 也会配置为默认 buildType,以便让 Android Studio 能够在首次打开某个项目时自动选择正确的构建变体。(b/138808399)signingConfig.debug
用作默认的签名配置 (b/153583269)
** 问题修复 **
- 显著降低了预热过渡开销,其中每个基准的首次测量值都因人为原因而高于其他测量值。该问题在非常小的基准(1 毫秒或更短)中更加明显。(b/142058671)
- 修复了从命令行运行时针对每个基准输出的
InstrumentationResultParser
错误。(I64988、b/154248456)
已知问题
- 命令行、Benchmark 的 Gradle 调用不直接输出结果。若要解决该问题,您可以查看 Studio,也可以解析 JSON 输出文件以获取结果。
- Benchmark 报告无法从已安装应用 ID 以“android”或“download”(不区分大小写)结尾的应用的设备中提取报告。遇到该问题的用户应将 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 Studio 中或在持续集成中运行基准化分析,以观察代码性能随时间的变化情况,并防止出现回归。
主要功能包括:
- 时钟稳定
- 自动设置线程优先级
- 支持界面性能测试,例如在 RecyclerView 示例中
- 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
依赖项,以便在未使用实验性 API 时,Java 代码将正确生成 lint 错误,类似于 Kotlin 实验性注释针对 Kotlin 调用方提供的内容。 - 现在可正确检测 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
shell 实用程序的设备上将失败。 - 修复了
./gradlew lockClocks
任务的问题,在以 su 实用程序的较旧版本(不支持-c
标记)启用 root 权限的设备上该任务会暂挂。
版本 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
。点击此处可查看此版本中包含的提交内容。
此外还添加了有关如何在不使用 Gradle 的情况下使用 Benchmark 库的新文档,两者可用于不同的构建系统(例如 Bazel 或 Buck),以及在 CI 中运行时。如需了解详情,请参阅在不使用 Gradle 的情况下构建基准和在持续集成中运行基准。
新功能
- Gradle 插件
- 现在自动停用测试覆盖范围,并默认设置
AndroidBenchmarkRunner
(b/138374050) - 增加了在运行基准和使用 AGP 3.6+ 时,对基于 AGP 的新数据副本的支持
- 现在自动停用测试覆盖范围,并默认设置
- 添加了 JSON 格式
- 输出总基准测试运行时间 (b/133147694)
- 现在,使用名称字符串(例如
@Parameters(name = "size={0},depth={1}")
)的@Parameterized
基准以 JSON 输出格式输出每个基准的参数名称和值 (b/132578772)
- 模拟运行模式 (b/138785848)
- 添加了“模拟运行”模式,仅运行每个基准循环一次以检查是否有错误/崩溃,而不捕获测量值。该模式非常有用,例如可在预提交中快速运行基准,以确认它们未损坏。
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 设备上的外部存储空间时出现的错误会提供更具描述性的消息,并提供有关如何解决相应问题的建议
- 在基准运行期间,屏幕会自动打开,而不是在屏幕关闭时失败
外部贡献
- 感谢 Sergey Zakharov 为 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 相同的稳定性约束:进入 Beta 版后架构即告稳定(极偶尔会有例外情况),最终版本中会修复所有相关问题,次要版本中只会添加新特性,而只会在主要版本中更改/移除特性。
API 变更
翻新了 JSON 架构。对 JSON 架构的后续更改很可能仅限于新增特性:
- 重新组织了结果对象结构,以支持将来的更多指标组 (b/132713021)
- 在顶级对象中添加了测试运行上下文信息(例如,设备和 build 信息以及时钟是否处于锁定状态)(b/132711920)
- 现在,时间指标名称中带有“ns”(b/132714527)
- 扩充了每个报告指标的统计信息(最大值、中位数、最小值),并移除了简化的“nanos”摘要统计信息 (b/132713851)
移除了 XML 输出 (b/132714414)
从
BenchmarkState.reportData
API 中移除了热限制检测 (b/132887006)
问题修复
- 修复了
./gradlew lockClocks
在某些最新的操作系统设备上不粘滞的问题 (b/133424037) - 停用了模拟器的限制检测 (b/132880807)
版本 1.0.0-alpha01
2019 年 5 月 7 日
发布了 androidx.benchmark:benchmark:1.0.0-alpha01
。点击此处可查看此版本中包含的提交内容。