Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DDMS探查器中的本机代码是什么样子的?_Android_Profiling_Ddms - Fatal编程技术网

Android DDMS探查器中的本机代码是什么样子的?

Android DDMS探查器中的本机代码是什么样子的?,android,profiling,ddms,Android,Profiling,Ddms,我知道DDMS探查器不评测本机方法调用,我知道我可以使用多种方法评测本机代码,但我真正想知道的是本机代码与Java代码的比例 特别是,当调用本机方法时,DDMS方法评测做什么?时间是否仍被记录下来?所讨论的应用程序有一个长的阻塞本机调用,但它显示为只需要118毫秒,并且在可视跟踪查看器中显示为一个长的“下划线”(与Java代码中显示的实心“块”相反)。我猜在本机代码中花费的时间没有添加到配置文件中函数的总时间中,对吗?每个方法调用都会记录两个时间戳。一个来自CLOCK\u THREAD\u CP

我知道DDMS探查器不评测本机方法调用,我知道我可以使用多种方法评测本机代码,但我真正想知道的是本机代码与Java代码的比例

特别是,当调用本机方法时,DDMS方法评测做什么?时间是否仍被记录下来?所讨论的应用程序有一个长的阻塞本机调用,但它显示为只需要118毫秒,并且在可视跟踪查看器中显示为一个长的“下划线”(与Java代码中显示的实心“块”相反)。我猜在本机代码中花费的时间没有添加到配置文件中函数的总时间中,对吗?

每个方法调用都会记录两个时间戳。一个来自
CLOCK\u THREAD\u CPUTIME\u ID
计时器,另一个只是墙上的时钟时间(
gettimeofday()
)。前者是线程执行代码所花费时间的粗略度量

线程休眠时(例如,在互斥锁上被阻塞),线程cputime时钟不会提前,但在执行或(IIRC)等待磁盘I/O完成时,线程cputime时钟会提前。最初的分析代码只是记录了线程cputime——前一段时间,挂钟时间被添加到了混合中,因此您可以看到该方法实际执行所需的时间以及它的繁忙程度


对于托管代码和本机代码,在输入方法和返回方法时都会创建一个条目。在这方面没有什么真正的区别。

谢谢你,特别是提供了到档案器的链接。信息量很大。然而,这使得DDMS将本机函数调用显示为只需要几毫秒(显然需要更长的时间)的原因更加令人困惑。我在安卓2.3.3上评测这一事实有什么不同吗?是的——评测器直到安卓4.0才开始记录墙上的时钟时间。在此之前,它只有每个线程的累积CPU时间。因此,如果您的本地方法被阻止了两秒钟,然后做了100毫秒的工作,那么配置文件将只显示100毫秒的使用时间。(这就是添加第二个时间戳的原因。)