Benchmark

作者: ____Rainbow | 来源:发表于2022-09-23 16:56 被阅读0次

Benchmark基准

基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。

Microbenchmark微基准

微基准测试(Micro-benchmarks)是基准测试中的一种方法,用来测试微小代码单元的性能,通常这个微小代码单元可以是一段算法,一个方法,一个数据结构。
选择性能分析器配置的方法如下:添加插桩运行程序参数 androidx.benchmark.profiling.mode,并指定 MethodTracingStackSamplingNone 参数之一

testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling'

MethodTracing

对于方法跟踪,基准测试会在捕获方法轨迹之前进行预热,并记录基准测试调用的每种方法。不过,捕获每种方法进入/退出操作的开销会显著影响性能结果。

StackSampling

对于堆栈采样,基准测试会在预热完成后对调用堆栈进行采样。您可以使用插桩参数控制采样频率采样时长
在 Android 10 (API 29) 及更高版本中,堆栈采样使用 Simpleperf 对应用调用堆栈(包括 C++ 代码)进行采样。在 Android 9 (API 28) 及更低版本中,它使用 Debug.startMethodTracingSampling 来捕获堆栈样本。
您可以通过添加其他插桩参数来配置此性能分析模式:

  • androidx.benchmark.profiling.sampleFrequency
    • 每秒要捕获的堆栈样本数
    • 参数类型:整数
    • 默认为每秒 1000 个样本。
  • androidx.benchmark.profiling.sampleDurationSeconds
    • 基准测试的运行时长。
    • 参数类型:整数
    • 默认为 5 秒。

None

不捕获性能分析文件,但仍然会测量有关时间和分配情况的信息。

Macrobenchmark宏基准

适用于测试较大的用例,而非小块代码。使用 Macrobenchmark 的示例包括应用启动和运行时性能用例,例如滚动 RecyclerView。
若要对应用(称为该宏基准测试的目标)进行基准测试,该应用必须处于可分析状态,这样系统才能读取详细的跟踪信息。需要在应用的 AndroidManifest.xml 的<application> 标记中启用此状态:

<application ... >
    <!-- Profileable to enable Macrobenchmark profiling -->
    <!-- Suppress AndroidElementNotAllowed -->
    <profileable android:shell="true"/>
    ...
</application>

(1)StartupTimingMetric 启动指标

StartupTimingMetric 可使用以下值捕获应用启动时间指标:

  • timeToInitialDisplayMs - 从系统收到启动 intent 到渲染目标 activity 的第一帧的时间。
  • timeToFullDisplayMs - 从系统收到启动 intent 到通过 reportFullyDrawn 方法完整绘制应用报告的时间。当跟随在 reportFullyDrawn() 调用之后(或包含该调用)的第一帧完成渲染时,测量即会停止。Android 10(API 级别 29)及更低版本可能不支持此测量功能。

(2)FrameTimingMetric 帧基准

FrameTimingMetric 会捕获基准测试所生成帧(如滚动或动画)的时间信息,并输出以下值:

  • frameOverrunMs - 给定帧错过其截止时间多长时间。正数表示丢帧和可见的卡顿,负数表示帧比其截止时间早多少时间结束。仅适用于 Android 12(API 级别 31)及更高版本。
  • frameDurationCpuMs - 在 CPU(界面线程和 RenderThread)上生成帧所花费的时间。
    系统会按以下分布来收集这些测量值:第 50 个、第 90 个、第 95 个和第 99 个百分位。

(3)TraceSectionMetric 轨迹基准

TraceSectionMetric会捕获与提供的 sectionName 匹配的轨迹部分所花费的时间,并输出该时间的最小值、中位数和最大值(以毫秒为单位)。轨迹部分是通过 trace(sectionName){} 函数调用或者 Trace.beginSection(sectionName) 和 Trace.endSection()(或其异步变体)之间的代码来定义。该指标始终选择测量期间所捕获轨迹部分的第一个实例。

相关文章

  • 使用JMH进行性能测试

    一、背景 在benchmark的世界里头,分为广义的benchmark和狭义的benchmark(即microbe...

  • java基准测试之JMH

    什么是Benchmark? Benchmark是一个评价方式,在整个计算机领域有着长期的应用。Benchmark在...

  • rapidxml库的使用示例

    xml benchmark 参考 XML Benchmark Results 10.10.2009 的结果 初步选...

  • Redis-性能测试

    /root/redis-5.0.0/src/redis-benchmark 1、redis-benchmark -...

  • 04. Test之benchmark

    benchmark函数一般以Benchmark开头 benchmark的case一般会跑b.N次,而且每次执行都会...

  • benchmark

    函数性能测试工具 经常,我们在设计一个架构或者技术方案的时候,需要应用到某个容器或者算法,这个时候,我们往往会考虑...

  • Benchmark

    Benchmark基准 基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进...

  • IM 消息的数据库操作性能测试

    1.参考demo⾥里里⾯面的benchmark模块⾥里里⾯面的WCDB-Benchmark.xcodeproj⼯工...

  • redis 性能测试

    1、使用redis-benchmark工具 redis-benchmark 工具是 redis 自带性能测试工具,...

  • JMH微基准测试快速入门

    前言JMH是一个微基准测试框架,什么是微基准测试? Micro benchmark is a benchmark ...

网友评论

    本文标题:Benchmark

    本文链接:https://www.haomeiwen.com/subject/ojajnrtx.html