【问题标题】:How to get CPU usage of certain function in android app?如何获取android应用程序中某些功能的CPU使用率?
【发布时间】:2015-05-13 19:47:39
【问题描述】:

我正在尝试在某个运行应用程序时获取 CPU 使用率。我需要像我用来测量时间的东西。

在调用函数(我想测量的女巫)之前,我使用System.currentTimeMillis() 来获取函数结束后相同值的开始时间和差异。

这个函数的运行时间可以是1到1000ms。

矿山解决方案:

我可以使用 adb top 命令每毫秒触发一次(但我认为它不能正常工作)adb shell top -m 15 -d 0.001 > C:\something\something\results.txt

或者,我正在考虑从另一个线程中运行的应用程序调用此命令(如果 函数 将结束,那么线程将结束)。如果您认为这可能是正确的方法,我还可以将命令结果发送到手机中的某个文件吗?
或者我应该使用 adb shell top -m 15 -d 0.001 -n 1 并在 while 循环中调用它,直到线程结束?

【问题讨论】:

  • 投反对票毫无意义。我很确定我的问题不是重复的,而且答案也不容易找到。还有一次,请仔细阅读问题,如果您仍然不满意,请在下方评论为什么。谢谢。

标签: android performance cpu-usage


【解决方案1】:

如果函数是指 java 函数,那么为什么不测量其执行的 CPU 时间(结束和开始测量的差异)?您可以使用System.currentTimeMillis(),但这也将测量获得 CPU 量子的其他线程的时间。所以我相信你在 Debug.threadCpuTimeNanos() 之后,它只会测量 CPU 执行你的函数代码的时间,你可以通过查看源来调查它是如何工作的:

http://androidxref.com/5.1.0_r1/xref/art/runtime/utils.cc#177

【讨论】:

  • 我不太确定你是否听不懂我的意思,反之亦然。但我需要获取 java 函数的 CPU 使用率。不是执行的时间。我有时间测量。现在我需要 CPU 使用率,然后,我会找到测量这个 java 函数的电池消耗的方法。然后在 14 个测试文件上测试这个功能。它可以加密从 1000 个字符到 1100 万个字符。所以结果将类似于 java encrypt 函数的基准。
  • @Amphoru 你是对的,我不太明白,所以我可以建议同时使用System.currentTimeMillis() 来测量总功能时间(又名墙时间)和Debug.threadCpuTimeNanos() 只测量你的时间函数在 CPU 上执行。因此,假设 CTS 是 currentTimeMillis 的计时,TCTN 是 threadCpuTimeNanos 的计时(您需要将其转换为 ms)。 TCTN 应始终小于 CTS。要计算 CPU 使用率,您需要计算 TCTN/CTS * 100%。当然,如果你想自己做而不是使用一些外部工具,这是一种方法。
  • @marcinj - 这是做 TCTN/CTS *100% 的正确方法吗?我试过这个,我的结果有时超过 100%
【解决方案2】:

我不确定这是否是你要找的,我最近一直在研究 Android 调试,但我自己没有尝试过。

这是链接:Traceview War Story,来自 Android 开发者的博客。

它描述了使用 Traceview 工具分析函数以及系统为该函数中的每个进程投入了多少时间。

【讨论】:

  • 非常感谢,但我要使用 marcinj 的解决方案,因为我希望它在应用解决方案中。
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多