Skip to content

Commit 6ec2755

Browse files
committed
Pull CPU statistics code out of threadLoop()
This is to prepare for the threadLoop() merge Change-Id: I118c7d5c6b011b5d5b95ec7d63fb03feb166a9cf
1 parent be3835c commit 6ec2755

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
@@ -1932,6 +1932,46 @@ AudioFlinger::MixerThread::~MixerThread()
19321932
delete mAudioMixer;
19331933
}
19341934

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

19581995
acquireWakeLock();
19591996

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

19912002
mixerStatus = MIXER_IDLE;

0 commit comments

Comments
 (0)