// mCpu.elapsed() is expensive, so don't call it every loop
}
voidCpuStats::sample(constString8&title){
#ifdef DEBUG_CPU_USAGE
// get current thread's delta CPU time in wall clock ns
doublewcNs;
boolvalid=mCpuUsage.sampleAndEnable(wcNs);
// record sample for wall clock statistics
if(valid){
mWcStats.sample(wcNs);
}
// get the current CPU number
intcpuNum=sched_getcpu();
// get the current CPU frequency in kHz
intcpukHz=mCpuUsage.getCpukHz(cpuNum);
// check if either CPU number or frequency changed
if(cpuNum!=mCpuNum||cpukHz!=mCpukHz){
mCpuNum=cpuNum;
mCpukHz=cpukHz;
// ignore sample for purposes of cycles
valid=false;
}
// if no change in CPU number or frequency, then record sample for cycle statistics
if(valid&&mCpukHz>0){
doublecycles=wcNs*cpukHz*0.000001;
mHzStats.sample(cycles);
}
unsignedn=mWcStats.n();
// mCpuUsage.elapsed() is expensive, so don't call it every loop
if((n&127)==1){
if((n&127)==1){
longlongelapsed=mCpu.elapsed();
longlongelapsed=mCpuUsage.elapsed();
if(elapsed>=DEBUG_CPU_USAGE*1000000000LL){
if(elapsed>=DEBUG_CPU_USAGE*1000000000LL){
doubleperLoop=elapsed/(double)n;
doubleperLoop=elapsed/(double)n;
doubleperLoop100=perLoop*0.01;
doubleperLoop100=perLoop*0.01;
doublemean=stats.mean();
doubleperLoop1k=perLoop*0.001;
doublestddev=stats.stddev();
doublemean=mWcStats.mean();
doubleminimum=stats.minimum();
doublestddev=mWcStats.stddev();
doublemaximum=stats.maximum();
doubleminimum=mWcStats.minimum();
mCpu.resetStatistics();
doublemaximum=mWcStats.maximum();
ALOGI("CPU usage over past %.1f secs (%u mixer loops at %.1f mean ms per loop):\n us per mix loop: mean=%.0f stddev=%.0f min=%.0f max=%.0f\n %% of wall: mean=%.1f stddev=%.1f min=%.1f max=%.1f",
doublemeanCycles=mHzStats.mean();
doublestddevCycles=mHzStats.stddev();
doubleminCycles=mHzStats.minimum();
doublemaxCycles=mHzStats.maximum();
mCpuUsage.resetElapsed();
mWcStats.reset();
mHzStats.reset();
ALOGD("CPU usage for %s over past %.1f secs\n"
" (%u mixer loops at %.1f mean ms per loop):\n"
" us per mix loop: mean=%.0f stddev=%.0f min=%.0f max=%.0f\n"
" %% of wall: mean=%.1f stddev=%.1f min=%.1f max=%.1f\n"