Macrobenchmark 插桩参数

您可以使用以下插桩参数配置库的行为。这些参数既可以添加到 Gradle 配置中,也可以在从命令行运行插桩时直接应用。如需针对所有 Android Studio 和命令行测试运行来设置这些参数,请将所需参数添加到 testInstrumentationRunnerArguments 中:

android {
    defaultConfig {
        // ...
        testInstrumentationRunnerArguments["androidx.benchmark.dryRunMode.enable"] = "true"
    }
}

您还可以在从 Android Studio 运行基准测试时设置插桩参数。如需更改参数,请执行以下操作:

  1. 点击修改,然后点击相应配置,以修改运行配置。
    修改运行配置
    图 1. 修改运行配置。
  2. 点击插桩参数所对应的 更多来修改插桩参数。
    修改插桩参数
    图 2. 修改插桩参数。
  3. 点击 Instrumentation Extra Params 下的 Add,添加所需的插桩参数。
    添加所需的插桩参数
    图 3. 添加所需的插桩参数。

如果您要从命令行运行 macrobenchmark,请使用 -P android.testInstrumentationRunnerArguments.[name of the argument]

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

如果您直接调用 am instrument 命令(在 CI 测试环境中可能就是这种情况),请使用 -e 将参数传递给 am instrument

adb shell am instrument -e androidx.benchmark.enabledRules BaselineProfile -w com.example.macrobenchmark/androidx.test.runner.AndroidJUnitRunner

如需详细了解如何在持续集成环境中配置基准测试,请参阅在持续集成环境中运行基准测试

androidx.benchmark.compilation.enabled

此参数可允许您在基准测试的每次迭代之间停用编译。默认情况下,系统会在每次基准测试之间重新安装和重新编译目标应用,以遵循传入 measureRepeatedCompilationMode。停用此参数后,您可以跳过重新安装和编译过程(例如,如果您想要在运行测试套件之前完全编译目标应用,并针对该完全编译的目标运行所有基准测试)。

  • 参数类型:布尔值
  • 默认为true

androidx.benchmark.dryRunMode.enable

此参数可允许您在单个循环中运行基准测试,以验证基准测试是否正常运行。在验证过程中,您可以将此参数与常规测试搭配使用。

  • 参数类型:布尔值
  • 默认为false

androidx.benchmark.enabledRules

允许仅过滤一种类型的测试:基准配置文件生成或 Macrobenchmark 测试。还支持逗号分隔列表。

  • 参数类型:字符串
  • 可用选项:
    • Macrobenchmark
    • BaselineProfile
  • 默认为:未指定

androidx.benchmark.junit4.SideEffectRunListener

如果在运行基准测试期间执行了不相关的后台工作,基准测试结果可能会不一致。

如需在基准测试期间停用后台工作,请将 listener 插桩参数类型设置为 androidx.benchmark.junit4.SideEffectRunListener

  • 参数类型:字符串
  • 可用选项:
    • androidx.benchmark.junit4.SideEffectRunListener
  • 默认为:未指定

androidx.benchmark.fullTracing.enable

启用 androidx.tracing.perfetto 跟踪点,例如 Jetpack Compose 组合跟踪。

您需要设置自己的项目,才能从基准捕获组合跟踪。如需了解详情,请参阅使用 Jetpack Macrobenchmark 捕获轨迹

  • 参数类型:布尔值
  • 默认为false

androidx.benchmark.profiling.mode

允许在运行基准测试时捕获轨迹文件。可用选项与 Microbenchmark 库的选项相同。如需了解详情,请参阅对 Microbenchmark 进行性能分析中的说明。

  • 参数类型:字符串
  • 可用选项:
    • MethodTracing
    • StackSampling
    • None
  • 默认为None

androidx.benchmark.startupProfiles.enable

允许您在基准测试期间禁止生成启动配置文件。

  • 参数类型:布尔值
  • 默认为true

androidx.benchmark.suppressErrors

接受以逗号分隔的错误列表,以供转换为警告。

  • 参数类型:字符串列表
  • 可用选项:

    • DEBUGGABLE

      DEBUGGABLE 错误表示目标软件包是在其清单中设置了 debuggable=true 的情况下运行的,这会大幅降低运行时性能以支持调试功能。为避免此错误,请使用 debuggable=false 运行基准测试。可调试的参数会对执行速度产生影响,也就是说,基准测试改进可能不会反映到真实用户的体验中,或者可能会降低发布性能。

    • LOW-BATTERY

      当电池电量不足时,设备通常会降低性能以节省电量,例如停用大核心。即使设备已接通电源,也会发生这种情况。只有在您有意降低应用性能的情况下,才应忽略此错误。

    • EMULATOR

      EMULATOR 错误表示基准测试是在模拟器上运行,并不代表真实的用户设备。模拟器基准测试改进可能不会反映到用户的实际体验中,或者可能会降低设备的实际性能。您应改用实体设备来进行基准测试。忽略此错误时需要慎之又慎。

    • NOT-PROFILEABLE

      目标软件包 $packageName 在未设置 <profileable shell=true> 的情况下运行。Android 10 和 11 中要求启用配置文件功能,以便 Macrobenchmark 从目标进程中捕获详细的跟踪信息,例如应用或库中定义的系统跟踪部分。忽略此错误时需要慎之又慎。

    • METHOD-TRACING-ENABLED

      针对要进行基准测试的应用运行的 Macrobenchmark 已启用方法跟踪。这会减慢虚拟机的运行速度,因此请仅考虑跟踪文件中的相对指标,例如比较首次运行与第二次运行的速度。如果您在具有不同方法追踪选项的 build 之间比较基准测试,则忽略此错误可能会导致结果不准确。

  • 默认为:一个空列表

additionalTestOutputDir

配置在设备上保存 JSON 基准测试报告和性能分析结果的位置。

  • 参数类型:路径字符串
  • 默认为:测试 APK 的外部目录