Bug 1436074 - Reduce turn-off timer by time since we turned on. r=jib

MozReview-Commit-ID: 2AvnJxUSTmy

--HG--
extra : rebase_source : a9251389dac3fd0d0552de28463decb80fa3de3f
extra : source : 1aff350b83b8d504dbaa3d5d8d4fe6cd99512786
extra : histedit_source : 6ffb6b65d3e0a8ecf2744d9b3e758de417c3d727
This commit is contained in:
Andreas Pehrson 2018-02-14 16:35:45 +01:00
parent 411e973fab
commit 8edbfe79d6

View File

@ -174,6 +174,10 @@ struct DeviceState {
// MainThread only.
bool mTrackEnabled = false;
// Time when the application last enabled mDevice.
// MainThread only.
TimeStamp mTrackEnabledTime;
// true if an operation to Start() or Stop() mDevice has been dispatched to
// the media thread and is not finished yet.
// MainThread only.
@ -3868,6 +3872,7 @@ SourceListener::InitializeAsync()
state->mDeviceEnabled = true;
state->mTrackEnabled = true;
state->mTrackEnabledTime = TimeStamp::Now();
}
return InitPromise::CreateAndResolve(true, __func__);
}, [self = RefPtr<SourceListener>(this), this](RefPtr<MediaMgrError>&& aResult)
@ -4043,14 +4048,20 @@ SourceListener::SetEnabledFor(TrackID aTrackID, bool aEnable)
RefPtr<MediaTimerPromise> timerPromise;
if (aEnable) {
timerPromise = MediaTimerPromise::CreateAndResolve(true, __func__);
state.mTrackEnabledTime = TimeStamp::Now();
} else {
const TimeDuration offDelay = TimeDuration::FromMilliseconds(
const TimeDuration maxDelay = TimeDuration::FromMilliseconds(
Preferences::GetUint(
aTrackID == kAudioTrack
? "media.getusermedia.microphone.off_while_disabled.delay_ms"
: "media.getusermedia.camera.off_while_disabled.delay_ms",
3000));
timerPromise = state.mDisableTimer->WaitFor(offDelay, __func__);
const TimeDuration durationEnabled =
TimeStamp::Now() - state.mTrackEnabledTime;
const TimeDuration delay =
TimeDuration::Max(TimeDuration::FromMilliseconds(0),
maxDelay - durationEnabled);
timerPromise = state.mDisableTimer->WaitFor(delay, __func__);
}
typedef MozPromise<nsresult, bool, /* IsExclusive = */ true> DeviceOperationPromise;