上下文切换是否耗费了大量时间?

Mic*_*ick 9 android profiling opencv android-ndk android-traceview

我一直遇到app(使用java和C++以及OpenCV)的问题,这似乎与执行各种任务所花费的时间非常不一致.为了帮助诊断这个,我在java(被调用one_off_speed_test())中创建了一个函数,它只需要一个循环中的一系列整数数学问题,大约需要半秒钟,然后打印到日志所需的时间.如果我从内部重复调用此函数,onCreate()则每次调用所用的时间非常一致(+ = 3%),但如果我从内部调用它onCameraFrame(),则OpenCV在从相机准备好图像时调用的函数,则每个框架中进行数学测试所花费的时间因任何因素而异.我决定在eclipse/DDMS中尝试执行采样器,看看我是否可以解决发生的事情.我看到当我点击one_off_speed_test()它时,它列出了该功能的父母和孩子,以及一行说" (上下文切换) ".然后在该行上,在标有" Incl Real Time " 的列下,它显示"66%".现在我对使用DDMS并不是很专业,而且我对上下文切换只有一个朦胧的想法,但是到目前为止的描述中,看起来我的上下文切换问题需要花费很多时间吗?或者我误解了DDMS输出.

在此输入图像描述

Ale*_*ohn 2

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

另请参阅答案/sf/answers/767883021/,/sf/answers/1253187771/

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