Jetpack 基准库测试--微基准

Jetpack 基准库测试--微基准,第1张

Jetpack 基准测试--微基准 概述:

使用 Jetpack 基准库可以对基于 Kotlin 或 Java 的代码进行基准化分析,适用于测试小块代码。

官网:https://developer.android.com/studio/profile/benchmark#kts

在编写基准之前先剖析代码性能,可以先利用trace找到耗时 *** 作。

然后使用微基准库测试滚动 RecyclerView、执行数据库查询,以及衡量代码中任何运行速度慢而您希望提高其运行速度的部分。

对哪些内容进行基准化分析

基准化分析最适用于应用中频繁运行的 CPU 工作,例如 RecyclerView 滚动、数据转换/处理以及反复使用的代码段。

其他类型的代码较难以通过基准化分析进行衡量。由于基准循环运行,因此任何不经常运行或在多次调用时以不同方式执行的代码都可能不适合进行基准化分析。

步骤一:环境搭建

参考官网:https://developer.android.com/studio/profile/benchmark

步骤二:定义微基准测试

引入基准化测试环境后,编写基准化测试用例:

 我们拿BitmapBenchmark举例,测试Bitmap获取像素点的耗时,进行两组性能对比:

1、获取一行像素,一次拿一个像素

2、获取一行像素,一次拿100个像素

完成后点击左侧运行按钮,即可

步骤三:得到测试结果的产物 1、Android studio中的产物:

一次获取1个像素耗时如下:

一次取100个像素耗时如下:

2、项目目录中

包含额外指标和设备信息的完整基准报告以 JSON 格式提供。

androidx.benchmark Gradle 插件默认会启用 JSON 输出,跑完测试后生成的产物有JSON以及trace文件

生成的JSON文件:

生成的trace文件:

基准测试相关概念:

相关概念见官网:https://developer.android.com/studio/profile/benchmark

时钟稳定性

移动设备上的时钟会动态地从高频状态(高性能)变为低频状态(以节省电量,或者在设备变热时)。这些变化的时钟可能会使您的基准数据大幅变化,因此基准库提供了解决此问题的方法。

锁定时钟(需要 root 权限)

锁定时钟是获得稳定性能的最佳方式。它可以确保时钟频率绝不会过高而导致设备过热,也不会过低而导致基准不能充分利用 CPU。虽然这是确保稳定性能的最佳方法,但大部分设备都不支持这样做,因为它需要 adb root 权限。

持续性能模式

某些设备支持 Window.setSustainedPerformanceMode() 功能,该功能可让应用选择降低 CPU 频率上限。在受支持的设备上运行时,基准库会组合使用此 API 和启动自己的 Activity 这两种方式,以防止出现温控降频并获得稳定的结果。

自动暂停执行

如果既未使用时钟锁定也未使用持续性能模式,基准库会执行自动温控降频检测。启用后,内部基准将会定期运行,以确定设备温度何时达到了足以导致 CPU 性能降低的程度。当检测到 CPU 性能降低时,基准库会暂停执行以便设备冷却,然后重试当前的基准。

设备配置

为了保证稳定的测试环境,基准库会检测以下条件是否得到满足,确保项目和环境设置达到发布性能:

  • Debuggable 已设为 false。
  • 正在使用的是物理设备,而不是模拟器。
  • 如果设备启用了 root 权限,时钟已被锁定。
  • 设备的电池电量充足。

如果上述任一项检查失败,基准将抛出错误以避免不准确的测量结果。

使用结论:

限于较为独立方法运行耗时测试,整体作用不大。针对这种场景我们可以自己打log测试

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5637623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存