Bug 1373888 - part5 : only request audio wake lock when it's audible.
No need to prevent sleeping for non-audible audio.
MozReview-Commit-ID: 6p3azSUWTU2
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -4167,18 +4167,21 @@ HTMLMediaElement::WakeLockBoolWrapper::o
void
HTMLMediaElement::WakeLockBoolWrapper::UpdateWakeLock()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mOuter);
bool playing = !mValue;
-
- if (playing) {
+ bool isAudible = mOuter->Volume() > 0.0 &&
+ !mOuter->mMuted &&
+ mOuter->mIsAudioTrackAudible;
+ // when playing audible media.
+ if (playing && isAudible) {
mOuter->WakeLockCreate();
} else {
mOuter->WakeLockRelease();
}
}
void
HTMLMediaElement::WakeLockCreate()
@@ -7162,16 +7165,18 @@ HTMLMediaElement::SetAudibleState(bool a
}
void
HTMLMediaElement::NotifyAudioPlaybackChanged(AudibleChangedReasons aReason)
{
if (mAudioChannelWrapper) {
mAudioChannelWrapper->NotifyAudioPlaybackChanged(aReason);
}
+ // only request wake lock for audible media.
+ mPaused.UpdateWakeLock();
}
bool
HTMLMediaElement::ShouldElementBePaused()
{
// Bfcached page or inactive document.
if (!IsActive()) {
return true;
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -826,19 +826,18 @@ protected:
void SetOuter(HTMLMediaElement* outer) { mOuter = outer; }
MOZ_IMPLICIT operator bool() const { return mValue; }
WakeLockBoolWrapper& operator=(bool val);
bool operator !() const { return !mValue; }
+ void UpdateWakeLock();
private:
- void UpdateWakeLock();
-
bool mValue;
HTMLMediaElement* mOuter;
};
// Holds references to the DOM wrappers for the MediaStreams that we're
// writing to.
struct OutputMediaStream {
OutputMediaStream();