【问题标题】:Measuring performance using Android instrumentation test使用 Android 仪器测试测量性能
【发布时间】:2017-12-10 22:01:17
【问题描述】:

我的目标是使用工具测试 (AndroidJUnitRunner) 为 Android CPU 密集型代码编写自动性能测试。

我很惊讶的发现测试结果不可靠,模拟CPU密集型代码,我想测试,我写了如下循环

for(int i=0;i<1000000;i++){
    Math.pow(2,i);
}

代码作为工具测试在 Android 应用中进行了测试

我得到的结果如下:

仪器测试显示完成循环约 230 毫秒 而同一设备 (G5) 上的相同代码需要大约 600 毫秒

我会很感激为什么在 AndroidJUnitRunner 上执行相同代码所花费的时间比在真实设备上少三倍,而它们最终都在同一设备上执行

【问题讨论】:

  • AndroidJUnitRunner 的优先级可能比您应用中的代码高
  • 这引出了一个问题,是否有可能将特定代码设置为更高优先级
  • 应用程序中的代码在主线程上执行,我认为它具有最高优先级
  • 我尝试使用 Thread.currentThread().setPriority(Thread.MAX_PRIORITY) 并从后台线程运行它,我得到了相同的结果:(
  • 假设,当你运行一个标准应用程序时,还有很多其他的事情发生,而当你运行一个插桩测试时——只有这么多的代码块被执行。

标签: android performance-testing android-instrumentation


【解决方案1】:

速度仅来自 CPU,当您执行一些代码时,如果 CPU 没有做任何繁重的工作并且所有 CPU 内核都已启动,它会非常快地执行您的代码。在 android 中,“UI 渲染”是 AndroidJUnitRunner 没有做的最密集的工作,这就是为什么它很快。

如果你想了解android在不同场景下的表现,看看这个:https://www.youtube.com/playlist?list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

【讨论】:

    【解决方案2】:

    我认为导致结果不同的原因是设备需要与测试并行执行的工作不同。 (开销)。

    我建议您尝试使用开销大于AndroidJUnitRunner 的测试框架。你可以试试Robotium

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      相关资源
      最近更新 更多