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

Commit 9236fc5b authored by Steve Kondik's avatar Steve Kondik Committed by Steve Kondik
Browse files

audioflinger: Power hints for audio activity

 * Take 2, now with 100% less crashes!

Change-Id: I48fb0d2e3cfc64f46d99f177b4cf3fe842d06df4
parent 9a326595
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ status_t AudioPolicyService::startOutput(audio_io_handle_t output,
        }
    }
    Mutex::Autolock _l(mLock);
    setPowerHint(true);
    return mAudioPolicyManager->startOutput(output, stream, session);
}

@@ -208,7 +209,9 @@ status_t AudioPolicyService::doStopOutput(audio_io_handle_t output,
        }
    }
    Mutex::Autolock _l(mLock);
    return mAudioPolicyManager->stopOutput(output, stream, session);
    status_t ret = mAudioPolicyManager->stopOutput(output, stream, session);
    setPowerHint(false);
    return ret;
}

void AudioPolicyService::releaseOutput(audio_io_handle_t output)
@@ -276,6 +279,7 @@ status_t AudioPolicyService::startInput(audio_io_handle_t input,
    }
    Mutex::Autolock _l(mLock);

    setPowerHint(true);
    return mAudioPolicyManager->startInput(input, session);
}

@@ -287,7 +291,9 @@ status_t AudioPolicyService::stopInput(audio_io_handle_t input,
    }
    Mutex::Autolock _l(mLock);

    return mAudioPolicyManager->stopInput(input, session);
    status_t ret = mAudioPolicyManager->stopInput(input, session);
    setPowerHint(false);
    return ret;
}

void AudioPolicyService::releaseInput(audio_io_handle_t input,
+8 −2
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ status_t AudioPolicyService::startOutput(audio_io_handle_t output,
    }

    Mutex::Autolock _l(mLock);
    setPowerHint(true);
    return mpAudioPolicy->start_output(mpAudioPolicy, output, stream, session);
}

@@ -198,7 +199,9 @@ status_t AudioPolicyService::doStopOutput(audio_io_handle_t output,
        }
    }
    Mutex::Autolock _l(mLock);
    return mpAudioPolicy->stop_output(mpAudioPolicy, output, stream, session);
    status_t ret = mpAudioPolicy->stop_output(mpAudioPolicy, output, stream, session);
    setPowerHint(false);
    return ret;
}

void AudioPolicyService::releaseOutput(audio_io_handle_t output)
@@ -272,6 +275,7 @@ status_t AudioPolicyService::startInput(audio_io_handle_t input,
    }
    Mutex::Autolock _l(mLock);

    setPowerHint(true);
    return mpAudioPolicy->start_input(mpAudioPolicy, input);
}

@@ -283,7 +287,9 @@ status_t AudioPolicyService::stopInput(audio_io_handle_t input,
    }
    Mutex::Autolock _l(mLock);

    return mpAudioPolicy->stop_input(mpAudioPolicy, input);
    status_t ret = mpAudioPolicy->stop_input(mpAudioPolicy, input);
    setPowerHint(false);
    return ret;
}

void AudioPolicyService::releaseInput(audio_io_handle_t input,
+10 −0
Original line number Diff line number Diff line
@@ -80,6 +80,9 @@ void AudioPolicyService::onFirstRef()
        // start output activity command thread
        mOutputCommandThread = new AudioCommandThread(String8("ApmOutput"), this);

        rc = hw_get_module(POWER_HARDWARE_MODULE_ID, (const hw_module_t **)&mPowerModule);
        ALOGW_IF(rc, "couldn't get power module (%s)", strerror(-rc));

#ifdef USE_LEGACY_AUDIO_POLICY
        ALOGI("AudioPolicyService CSTOR in legacy mode");

@@ -263,6 +266,13 @@ void AudioPolicyService::binderDied(const wp<IBinder>& who) {
            IPCThreadState::self()->getCallingPid());
}

void AudioPolicyService::setPowerHint(bool active) {
    if (mPowerModule && mPowerModule->powerHint) {
        mPowerModule->powerHint(mPowerModule, POWER_HINT_AUDIO,
                active ? (void *)"state=1" : (void *)"state=0");
    }
}

static bool tryLock(Mutex& mutex)
{
    bool locked = false;
+4 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <system/audio.h>
#include <system/audio_policy.h>
#include <hardware/audio_policy.h>
#include <hardware/power.h>
#include <media/IAudioPolicyService.h>
#include <media/ToneGenerator.h>
#include <media/AudioEffect.h>
@@ -483,6 +484,7 @@ private:
    // Internal dump utilities.
    status_t dumpPermissionDenial(int fd);

    void setPowerHint(bool active);

    mutable Mutex mLock;    // prevents concurrent access to AudioPolicy manager functions changing
                            // device connection state  or routing
@@ -499,6 +501,8 @@ private:
    // Manage all effects configured in audio_effects.conf
    sp<AudioPolicyEffects> mAudioPolicyEffects;
    audio_mode_t mPhoneState;

    power_module_t *mPowerModule;
};

}; // namespace android