您当前的位置: 首页 > 
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Jetpack 基准测试库--宏基准

沙漠一只雕得儿得儿 发布时间:2021-12-02 10:02:49 ,浏览量:0

概述:

与 Jetpack Benchmark 库不同,Macrobenchmark 适用于测试较大的用例,而非小块代码。

使用 Macrobenchmark 的示例包括应用启动、运行时性能用例,例如滚动 RecyclerView

步骤一:环境搭建

1、Android studio需要使用预览版,下载地址:Android Studio Preview  |  Android Developers

2、运行设备要在Android Q(Android10.0)及以上

相关库的引入配置参考官网:https://developer.android.com/studio/profile/macrobenchmark

步骤二:定义宏基准测试

环境配置完成后,新建一个macrobenchmark的module,用来测试我们的目标工程APP。如下图:在模块macrobenchmark中定义一个新的测试类,并填入要测试应用的软件包名称,

如需执行 activity 启动,您可以向 measureRepeated() 函数传递一种预定义的启动模式(COLD、WARM 或 HOT 中的一种)。此参数会更改 activity 的启动方式,以及测试开始时的进程状态。

类似于测试用例编写,本次测试冷启动的代码如下:

@LargeTest

@RunWith(Parameterized::class)

class SmallListStartupBenchmark(private val startupMode: StartupMode) {

    @get:Rule

    val benchmarkRule = MacrobenchmarkRule()

    @Test

    fun startup() = benchmarkRule.measureStartup(

        profileCompiled = true,

        startupMode = startupMode

    ) {

        action = "com.example.macrobenchmark.target.RECYCLER_VIEW_ACTIVITY"

        putExtra("ITEM_COUNT"5)

    }

    companion object {

        @Parameterized.Parameters(name = "mode={0}")

        @JvmStatic

        fun parameters(): List {

            return listOf(StartupMode.COLD, StartupMode.WARM)

                .map { arrayOf(it) }

        }

    }

}

const val TARGET_PACKAGE = "com.example.macrobenchmark.target"

fun MacrobenchmarkRule.measureStartup(

    profileCompiled: Boolean,

    startupMode: StartupMode,

    iterations: Int = 3,

    setupIntent: Intent.() -> Unit = {}

) = measureRepeated(

    packageName = TARGET_PACKAGE,

    metrics = listOf(StartupTimingMetric()),

    compilationMode = if (profileCompiled) {

        CompilationMode.SpeedProfile(warmupIterations = 3)

    else {

        CompilationMode.None

    },

    iterations = iterations,

    startupMode = startupMode

) {

    pressHome()

    val intent = Intent()

    intent.setPackage(TARGET_PACKAGE)

    setupIntent(intent)

    startActivityAndWait(intent)

}

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

可以看到几次启动测试的最快,最慢值

 点击Traces:Iteration 0 1 2后可跳转到对应trace:

 

2、项目的build/output目录中:

Test results saved as file:/F:/benchmark/performance-samples/MacrobenchmarkSample/macrobenchmark/build/outputs/androidTest-results/connected/M2011K2C%20-%2011/test-result.pb. Inspect these results in Android Studio by selecting Run > Import Tests From File from the menu bar and importing test-result.pb.

会有相关的日志,trace文件等信息。

JSON文件中记录设备,及测试用例相关信息:

{

    "context": {

        "build": {

            "brand""Xiaomi",

            "device""venus",

            "fingerprint""Xiaomi/venus/venus:11/RKQ1.200928.002/V12.5.13.0.RKBCNXM:user/release-keys",

            "model""M2011K2C",

            "version": {

                "sdk"30

            }

        },

        "cpuCoreCount"8,

        "cpuLocked"false,

        "cpuMaxFreqHz"2841600000,

        "memTotalBytes"7652691968,

        "sustainedPerformanceModeEnabled"false

    },

    "benchmarks": [

        {

            "name""startup[mode=COLD]",

            "params": {

                "mode""COLD"

            },

            "className""com.example.macrobenchmark.SmallListStartupBenchmark",

            "totalRunTimeNs"30471050717,

            "metrics": {

                "startupMs": {

                    "minimum"187.015833,

                    "maximum"217.015365,

                    "median"208.226459,

                    "runs": [

                        208.226459,

                        217.015365,

                        187.015833

                    ]

                }

            },

            "sampledMetrics": {},

            "warmupIterations"3,

            "repeatIterations"3,

            "thermalThrottleSleepSeconds"0

        },

        {

            "name""startup[mode=WARM]",

            "params": {

                "mode""WARM"

            },

            "className""com.example.macrobenchmark.SmallListStartupBenchmark",

            "totalRunTimeNs"31034628321,

            "metrics": {

                "startupMs": {

                    "minimum"145.8775,

                    "maximum"183.948385,

                    "median"159.618177,

                    "runs": [

                        159.618177,

                        183.948385,

                        145.8775

                    ]

                }

            },

            "sampledMetrics": {},

            "warmupIterations"3,

            "repeatIterations"3,

            "thermalThrottleSleepSeconds"0

        }

    ]

}

相关结论:

宏基准测试适用场景类似于自动化测试,我们可以编写执行脚本,获取执行路径的运行时间。

总体来说使用成本较高,也不利于大规模测试,了解相关功能即可,暂不使用。

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0436s