Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c28f684 authored by Phil Burk's avatar Phil Burk Committed by Automerger Merge Worker
Browse files

Merge "aaudio: prevent very short sleeps in callback thread" into tm-dev am: a641b58b

parents 480da160 a641b58b
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -202,10 +202,18 @@ aaudio_result_t AudioStreamInternalPlay::processDataNow(void *buffer, int32_t nu
                break;
            case AAUDIO_STREAM_STATE_STARTED:
            {
                // Sleep until the readCounter catches up and we only have
                // the getBufferSize() frames of data sitting in the buffer.
                int64_t nextReadPosition = mAudioEndpoint->getDataWriteCounter() - getBufferSize();
                wakeTime = mClockModel.convertPositionToTime(nextReadPosition);
                // Calculate when there will be room available to write to the buffer.
                // If the appBufferSize is smaller than the endpointBufferSize then
                // we will have room to write data beyond the appBufferSize.
                // That is a technique used to reduce glitches without adding latency.
                const int32_t appBufferSize = getBufferSize();
                // The endpoint buffer size is set to the maximum that can be written.
                // If we use it then we must carve out some room to write data when we wake up.
                const int32_t endBufferSize = mAudioEndpoint->getBufferSizeInFrames()
                        - getFramesPerBurst();
                const int32_t bestBufferSize = std::min(appBufferSize, endBufferSize);
                int64_t targetReadPosition = mAudioEndpoint->getDataWriteCounter() - bestBufferSize;
                wakeTime = mClockModel.convertPositionToTime(targetReadPosition);
            }
                break;
            default:
+3 −1
Original line number Diff line number Diff line
@@ -562,7 +562,9 @@ int32_t AAudioProperty_getWakeupDelayMicros() {
int32_t AAudioProperty_getMinimumSleepMicros() {
    const int32_t minMicros = 1; // arbitrary
    // Higher values can increase latency for moderate workloads.
    const int32_t defaultMicros = 1; // arbitrary
    // Short values can cause the CPU to short cycle if there is a bug in
    // calculating the wakeup times.
    const int32_t defaultMicros = 100; // arbitrary
    const int32_t maxMicros = 200; // arbitrary
    int32_t prop = property_get_int32(AAUDIO_PROP_MINIMUM_SLEEP_USEC, defaultMicros);
    if (prop < minMicros) {