diff options
author | Glenn Kasten <gkasten@google.com> | 2012-02-24 14:25:15 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-02-24 14:25:15 -0800 |
commit | 5ce96d97feafc6989f6141bb2633eae3d87ddf28 (patch) | |
tree | 4a38a92123c13a19107d0b73d8ec877f50e87011 /services/audioflinger | |
parent | 7fb5e8832f582ec515550696e9dabc3a8d9de14d (diff) | |
parent | 83efdd0fc08cd5aedf50b45741a8a87be8dc4b41 (diff) | |
download | frameworks_av-5ce96d97feafc6989f6141bb2633eae3d87ddf28.zip frameworks_av-5ce96d97feafc6989f6141bb2633eae3d87ddf28.tar.gz frameworks_av-5ce96d97feafc6989f6141bb2633eae3d87ddf28.tar.bz2 |
Merge "Pull CPU statistics code out of threadLoop()"
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 73 |
1 files changed, 42 insertions, 31 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 469468e..2c3329e 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1933,6 +1933,46 @@ AudioFlinger::MixerThread::~MixerThread() delete mAudioMixer; } +class CpuStats { +public: + void sample(); +#ifdef DEBUG_CPU_USAGE +private: + ThreadCpuUsage mCpu; +#endif +}; + +void CpuStats::sample() { +#ifdef DEBUG_CPU_USAGE + const CentralTendencyStatistics& stats = mCpu.statistics(); + mCpu.sampleAndEnable(); + unsigned n = stats.n(); + // mCpu.elapsed() is expensive, so don't call it every loop + if ((n & 127) == 1) { + long long elapsed = mCpu.elapsed(); + if (elapsed >= DEBUG_CPU_USAGE * 1000000000LL) { + double perLoop = elapsed / (double) n; + double perLoop100 = perLoop * 0.01; + double mean = stats.mean(); + double stddev = stats.stddev(); + double minimum = stats.minimum(); + double maximum = stats.maximum(); + mCpu.resetStatistics(); + 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", + elapsed * .000000001, n, perLoop * .000001, + mean * .001, + stddev * .001, + minimum * .001, + maximum * .001, + mean / perLoop100, + stddev / perLoop100, + minimum / perLoop100, + maximum / perLoop100); + } + } +#endif +}; + bool AudioFlinger::MixerThread::threadLoop() { Vector< sp<Track> > tracksToRemove; @@ -1951,42 +1991,13 @@ bool AudioFlinger::MixerThread::threadLoop() uint32_t sleepTime = idleSleepTime; uint32_t sleepTimeShift = 0; Vector< sp<EffectChain> > effectChains; -#ifdef DEBUG_CPU_USAGE - ThreadCpuUsage cpu; - const CentralTendencyStatistics& stats = cpu.statistics(); -#endif + CpuStats cpuStats; acquireWakeLock(); while (!exitPending()) { -#ifdef DEBUG_CPU_USAGE - cpu.sampleAndEnable(); - unsigned n = stats.n(); - // cpu.elapsed() is expensive, so don't call it every loop - if ((n & 127) == 1) { - long long elapsed = cpu.elapsed(); - if (elapsed >= DEBUG_CPU_USAGE * 1000000000LL) { - double perLoop = elapsed / (double) n; - double perLoop100 = perLoop * 0.01; - double mean = stats.mean(); - double stddev = stats.stddev(); - double minimum = stats.minimum(); - double maximum = stats.maximum(); - cpu.resetStatistics(); - 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", - elapsed * .000000001, n, perLoop * .000001, - mean * .001, - stddev * .001, - minimum * .001, - maximum * .001, - mean / perLoop100, - stddev / perLoop100, - minimum / perLoop100, - maximum / perLoop100); - } - } -#endif + cpuStats.sample(); processConfigEvents(); mixerStatus = MIXER_IDLE; |