在traceview中,Incl CPU Time、Excl CPU Time、Incl Real CPU Time、Excl Real CPU Time的含义是什么?

31

1)独占时间是在方法中花费的时间 2)包含时间是在方法中花费的时间加上调用的任何函数中花费的时间 3)我们将调用方法称为“父级”,被调用方法称为“子级”。 参考链接:点击这里

这里的问题是:

什么是以下两者之间的区别

  • 包含 CPU 时间和实际包含 CPU 时间?
  • 不包含 CPU 时间和实际不包含 CPU 时间?

在我的一个示例跟踪文件中, 对于 Method1():Incl CPU Time = 242 毫秒 & Incl Real CPU Time = 5012 毫秒。

  • 我无法确定以上两个时间之间的 5012-242 = 4770 毫秒差异的原因。

如果您有任何想法,请帮助我。

4个回答

40

这里是DDMS文档

Incl CPU time是指函数的总CPU时间,包括函数本身及其调用的所有函数的时间之和。

Excl CPU time是指函数自身独占的CPU时间。它只计算函数本身使用的时间,不包括其子函数的时间。你会发现它总是等于其“self”子项的"incl time"。

文档没有明确说明CPU时间实际时间的区别,但我同意Neetesh的观点,即CPU时间是函数实际运行的时间(不包括等待IO),而实际时间是墙钟时间(包括执行IO所需的时间)。


10

CPU时间是进程使用CPU的时间,而CPU实时时间是进程从开始到结束所用的总时间,包括等待执行进程的时间。


我会检查我的日志,并与你的回答进行比较。从你的回答中我们可以看到CPU实际运行时间小于CPU时间。在确认这些细节后,我会接受你的回答。感谢你的帮助。 - VISHAL VIRADIA

0
从.trace的源代码中,您可以看到CPU时间的详细信息与实际CPU时间不同,这与Android文档的描述相同: CPU时间仅考虑线程实际使用CPU时间的时间,而实际时间提供了绝对的时间信息,从您的应用程序进入方法到退出该方法的时刻——无论线程是活动的还是睡眠的。

0

就像Chris和David所说的,我进行了一项测试。

#include <unistd.h>

#define S ((long long)1000 * 1000 * 1000)

// My CPU frequency is 3 GHz
void run()  {
    for (int i = 0; i < S; ++i);
}

void g() {
    run();
    run();
    run();

    for (int i = 0; i < S; ++i);
}

int main() {
    g();
    // run();

    return 0;
}

正如您所看到的,函数g的包含时间为8秒,其独占时间为2秒: CPU Time


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接