// ---------------------------------------------------------------------------
AudioRecord::AudioRecord()
- : mStatus(NO_INIT), mSessionId(0)
+ : mStatus(NO_INIT), mSessionId(0),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
{
}
void* user,
int notificationFrames,
int sessionId)
- : mStatus(NO_INIT), mSessionId(0)
+ : mStatus(NO_INIT), mSessionId(0),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
{
mStatus = set(inputSource, sampleRate, format, channelMask,
frameCount, flags, cbf, user, notificationFrames, sessionId);
cblk->bufferTimeoutMs = MAX_RUN_TIMEOUT_MS;
cblk->waitTimeMs = 0;
if (t != 0) {
- t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO);
+ t->run("ClientRecordThread", ANDROID_PRIORITY_AUDIO);
} else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO);
+ mPreviousPriority = getpriority(PRIO_PROCESS, 0);
+ mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0);
+ androidSetThreadPriority(0, ANDROID_PRIORITY_AUDIO);
}
} else {
mActive = 0;
if (t != 0) {
t->requestExit();
} else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL);
+ setpriority(PRIO_PROCESS, 0, mPreviousPriority);
+ androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup);
}
}
// ---------------------------------------------------------------------------
AudioTrack::AudioTrack()
- : mStatus(NO_INIT)
+ : mStatus(NO_INIT),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
{
}
void* user,
int notificationFrames,
int sessionId)
- : mStatus(NO_INIT)
+ : mStatus(NO_INIT),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
{
mStatus = set(streamType, sampleRate, format, channelMask,
frameCount, flags, cbf, user, notificationFrames,
void* user,
int notificationFrames,
int sessionId)
- : mStatus(NO_INIT)
+ : mStatus(NO_INIT),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(ANDROID_TGROUP_DEFAULT)
{
mStatus = set(streamType, sampleRate, format, channelMask,
0, flags, cbf, user, notificationFrames,
cblk->waitTimeMs = 0;
android_atomic_and(~CBLK_DISABLED_ON, &cblk->flags);
if (t != 0) {
- t->run("AudioTrackThread", ANDROID_PRIORITY_AUDIO);
+ t->run("AudioTrackThread", ANDROID_PRIORITY_AUDIO);
} else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO);
+ mPreviousPriority = getpriority(PRIO_PROCESS, 0);
+ mPreviousSchedulingGroup = androidGetThreadSchedulingGroup(0);
+ androidSetThreadPriority(0, ANDROID_PRIORITY_AUDIO);
}
ALOGV("start %p before lock cblk %p", this, mCblk);
if (t != 0) {
t->requestExit();
} else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL);
+ setpriority(PRIO_PROCESS, 0, mPreviousPriority);
+ androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup);
}
}
}
if (t != 0) {
t->requestExit();
} else {
- setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_NORMAL);
+ setpriority(PRIO_PROCESS, 0, mPreviousPriority);
+ androidSetThreadSchedulingGroup(0, mPreviousSchedulingGroup);
}
}