Skip to content

Commit baad42e

Browse files
gkastenAndroid (Google) Code Review
authored andcommitted
Merge "Pull CPU statistics code out of threadLoop()"
2 parents 1a9e08e + 6ec2755 commit baad42e

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

services/audioflinger/AudioFlinger.cpp

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,46 @@ AudioFlinger::MixerThread::~MixerThread()
19331933
delete mAudioMixer;
19341934
}
19351935

1936+
class CpuStats {
1937+
public:
1938+
void sample();
1939+
#ifdef DEBUG_CPU_USAGE
1940+
private:
1941+
ThreadCpuUsage mCpu;
1942+
#endif
1943+
};
1944+
1945+
void CpuStats::sample() {
1946+
#ifdef DEBUG_CPU_USAGE
1947+
const CentralTendencyStatistics& stats = mCpu.statistics();
1948+
mCpu.sampleAndEnable();
1949+
unsigned n = stats.n();
1950+
// mCpu.elapsed() is expensive, so don't call it every loop
1951+
if ((n & 127) == 1) {
1952+
long long elapsed = mCpu.elapsed();
1953+
if (elapsed >= DEBUG_CPU_USAGE * 1000000000LL) {
1954+
double perLoop = elapsed / (double) n;
1955+
double perLoop100 = perLoop * 0.01;
1956+
double mean = stats.mean();
1957+
double stddev = stats.stddev();
1958+
double minimum = stats.minimum();
1959+
double maximum = stats.maximum();
1960+
mCpu.resetStatistics();
1961+
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",
1962+
elapsed * .000000001, n, perLoop * .000001,
1963+
mean * .001,
1964+
stddev * .001,
1965+
minimum * .001,
1966+
maximum * .001,
1967+
mean / perLoop100,
1968+
stddev / perLoop100,
1969+
minimum / perLoop100,
1970+
maximum / perLoop100);
1971+
}
1972+
}
1973+
#endif
1974+
};
1975+
19361976
bool AudioFlinger::MixerThread::threadLoop()
19371977
{
19381978
Vector< sp<Track> > tracksToRemove;
@@ -1951,42 +1991,13 @@ bool AudioFlinger::MixerThread::threadLoop()
19511991
uint32_t sleepTime = idleSleepTime;
19521992
uint32_t sleepTimeShift = 0;
19531993
Vector< sp<EffectChain> > effectChains;
1954-
#ifdef DEBUG_CPU_USAGE
1955-
ThreadCpuUsage cpu;
1956-
const CentralTendencyStatistics& stats = cpu.statistics();
1957-
#endif
1994+
CpuStats cpuStats;
19581995

19591996
acquireWakeLock();
19601997

19611998
while (!exitPending())
19621999
{
1963-
#ifdef DEBUG_CPU_USAGE
1964-
cpu.sampleAndEnable();
1965-
unsigned n = stats.n();
1966-
// cpu.elapsed() is expensive, so don't call it every loop
1967-
if ((n & 127) == 1) {
1968-
long long elapsed = cpu.elapsed();
1969-
if (elapsed >= DEBUG_CPU_USAGE * 1000000000LL) {
1970-
double perLoop = elapsed / (double) n;
1971-
double perLoop100 = perLoop * 0.01;
1972-
double mean = stats.mean();
1973-
double stddev = stats.stddev();
1974-
double minimum = stats.minimum();
1975-
double maximum = stats.maximum();
1976-
cpu.resetStatistics();
1977-
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",
1978-
elapsed * .000000001, n, perLoop * .000001,
1979-
mean * .001,
1980-
stddev * .001,
1981-
minimum * .001,
1982-
maximum * .001,
1983-
mean / perLoop100,
1984-
stddev / perLoop100,
1985-
minimum / perLoop100,
1986-
maximum / perLoop100);
1987-
}
1988-
}
1989-
#endif
2000+
cpuStats.sample();
19902001
processConfigEvents();
19912002

19922003
mixerStatus = MIXER_IDLE;

0 commit comments

Comments
 (0)