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

Commit 276fa43b authored by Eric Laurent's avatar Eric Laurent
Browse files

Limit AudioFlinger log.

AudioFlinger logs a warning when a write to the audio HAL
takes too long to return. The threshold for this warning is
a rule of thumb based on the assumption that the audio HAL will consume
buffers at a regular pace.
The introduction of low power audio mode with larger buffers and writes
occuring in bursts makes that this threshold is often exceeded resulting
in excessive and misleading warnings.

The threshold is raised to remove unwanted warnings but we should reconsider
the usefulness of this warning altogether.

Change-Id: I5ef6898ea28d879cede3e47da542a64092a3cca4
parent 11116b80
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -1832,7 +1832,9 @@ bool AudioFlinger::MixerThread::threadLoop()
    size_t mixBufferSize = mFrameCount * mFrameSize;
    size_t mixBufferSize = mFrameCount * mFrameSize;
    // FIXME: Relaxed timing because of a certain device that can't meet latency
    // FIXME: Relaxed timing because of a certain device that can't meet latency
    // Should be reduced to 2x after the vendor fixes the driver issue
    // Should be reduced to 2x after the vendor fixes the driver issue
    nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 3;
    // increase threshold again due to low power audio mode. The way this warning threshold is
    // calculated and its usefulness should be reconsidered anyway.
    nsecs_t maxPeriod = seconds(mFrameCount) / mSampleRate * 15;
    nsecs_t lastWarning = 0;
    nsecs_t lastWarning = 0;
    bool longStandbyExit = false;
    bool longStandbyExit = false;
    uint32_t activeSleepTime = activeSleepTimeUs();
    uint32_t activeSleepTime = activeSleepTimeUs();
@@ -1886,7 +1888,9 @@ bool AudioFlinger::MixerThread::threadLoop()
                mixBufferSize = mFrameCount * mFrameSize;
                mixBufferSize = mFrameCount * mFrameSize;
                // FIXME: Relaxed timing because of a certain device that can't meet latency
                // FIXME: Relaxed timing because of a certain device that can't meet latency
                // Should be reduced to 2x after the vendor fixes the driver issue
                // Should be reduced to 2x after the vendor fixes the driver issue
                maxPeriod = seconds(mFrameCount) / mSampleRate * 3;
                // increase threshold again due to low power audio mode. The way this warning
                // threshold is calculated and its usefulness should be reconsidered anyway.
                maxPeriod = seconds(mFrameCount) / mSampleRate * 15;
                activeSleepTime = activeSleepTimeUs();
                activeSleepTime = activeSleepTimeUs();
                idleSleepTime = idleSleepTimeUs();
                idleSleepTime = idleSleepTimeUs();
            }
            }
@@ -1983,7 +1987,7 @@ bool AudioFlinger::MixerThread::threadLoop()
            mInWrite = false;
            mInWrite = false;
            nsecs_t now = systemTime();
            nsecs_t now = systemTime();
            nsecs_t delta = now - mLastWriteTime;
            nsecs_t delta = now - mLastWriteTime;
            if (delta > maxPeriod) {
            if (!mStandby && delta > maxPeriod) {
                mNumDelayedWrites++;
                mNumDelayedWrites++;
                if ((now - lastWarning) > kWarningThrottle) {
                if ((now - lastWarning) > kWarningThrottle) {
                    LOGW("write blocked for %llu msecs, %d delayed writes, thread %p",
                    LOGW("write blocked for %llu msecs, %d delayed writes, thread %p",