android - 上下文切换是否占用了大量时间?

标签 android opencv android-ndk profiling android-traceview

我一直在使用一个应用程序(它同时使用 java 和 C++ 以及 OpenCV)时遇到问题,该应用程序在执行各种任务所需的时间上似乎非常不一致。为了帮助诊断这个问题,我在 java 中创建了一个函数(称为 one_off_speed_test() ),它只在一个循环中执行一系列整数数学问题,大约需要半秒,然后将所花费的时间打印到日志中。如果我从 onCreate() 中重复调用此函数那么每次调用所用的时间非常一致 (+= 3%),但如果我从 onCameraFrame() 内调用它,当 OpenCV 从相机准备好图像时调用的一个函数,那么每个帧中数学测试所花费的时间变化最大为两倍。我决定在 eclipse/DDMS 中尝试执行采样器,看看我是否能弄清楚发生了什么。当我点击 one_off_speed_test() 时我看到了,它列出了该函数的父函数和子函数,以及一行“(上下文切换)”。然后在该行的标有“Incl Real Time”的列下,显示“66%”。现在我对DDMS的使用不是很熟练,对上下文切换也只有一个模糊的概念,但是从目前的描述来看,我是不是遇到了上下文切换占用大量时间的问题?还是我误解了 DDMS 的输出。

enter image description here

最佳答案

上下文切换描述了花费在执行其他线程上的时间。因此,当从 onCameraFrame() 调用您的函数时,它会与其他线程共享 CPU,不一定是属于您应用的线程。

另请参阅答案 https://stackoverflow.com/a/10969757/192373 , https://stackoverflow.com/a/17902682/192373

在发布的示例中,onCameraFrame() 在挂钟上花费了 14.413665 秒,其中 4.814454 秒用于 one_off_speed_test()(大概是 10 帧) ,并且 9.596984 秒用于等待其他线程。这是有道理的,因为 onCameraFrame() 回调与在单独的系统进程中运行的相机服务竞争 CPU 资源。

关于android - 上下文切换是否占用了大量时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703352/

相关文章:

android - 如何将旧的 Cordova 项目更新到最新版本?

python - 使用opencv检测复选框是否被选中

c++ - 简单的 OpenCV 命令在 Debug 模式下工作,但在 Release 模式下不工作

c++ - OpenCV 人体追踪

Android NDK 应用程序无法达到任何断点

android - 在 windows "C compiler cannot create executables"上编译 pjsip

android - 优化抽屉和 Activity 启动速度

android - 在 SSL 环境中使用 Cordova 文件传输上传文件时出错

android - react- native : 'adb' is not recognized as an internal or external command, 可运行程序或批处理文件

android - APK打包过程中文件重复或Android UnsatisfiedLinkError