зеркало из https://github.com/mozilla/gecko-dev.git
fixing bug 770656, idle fuzz time for idle notifications. r=jst@mozilla.com
This commit is contained in:
Родитель
eb8a11b1a8
Коммит
d43d53eaee
|
@ -8545,8 +8545,8 @@ nsGlobalWindow::ScheduleNextIdleObserverCallback()
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
PRUint32 callbackTimeMS = 0;
|
||||
if (idleObserver.mTimeInS * 1000 > userIdleTimeMS) {
|
||||
callbackTimeMS = idleObserver.mTimeInS * 1000 - userIdleTimeMS;
|
||||
if (idleObserver.mTimeInS * 1000 + mIdleFuzzFactor > userIdleTimeMS) {
|
||||
callbackTimeMS = idleObserver.mTimeInS * 1000 - userIdleTimeMS + mIdleFuzzFactor;
|
||||
}
|
||||
|
||||
mIdleTimer->Cancel();
|
||||
|
@ -8568,7 +8568,7 @@ nsGlobalWindow::GetFuzzTimeMS()
|
|||
return 0;
|
||||
}
|
||||
|
||||
PRUint32 randNum = 0;
|
||||
PRUint32 randNum = MAX_IDLE_FUZZ_TIME_MS;
|
||||
PRSize nbytes = PR_GetRandomNoise(&randNum, sizeof(randNum));
|
||||
if (nbytes != sizeof(randNum)) {
|
||||
NS_WARNING("PR_GetRandomNoise(...) Not implemented or no available noise!");
|
||||
|
@ -8605,23 +8605,6 @@ nsGlobalWindow::ScheduleActiveTimerCallback()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGlobalWindow::ScheduleIdleTimerCallback()
|
||||
{
|
||||
MOZ_ASSERT(IsInnerWindow(), "Must be an inner window!");
|
||||
MOZ_ASSERT(mIdleTimer);
|
||||
|
||||
nsRefPtr<nsGlobalWindow> kungFuDeathGrip(this);
|
||||
mIdleTimer->Cancel();
|
||||
mIdleFuzzFactor = GetFuzzTimeMS();
|
||||
nsresult rv = mIdleTimer->InitWithFuncCallback(IdleActiveTimerCallback,
|
||||
this,
|
||||
mIdleFuzzFactor,
|
||||
nsITimer::TYPE_ONE_SHOT);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsGlobalWindow::NotifyIdleObserversOfIdleActiveEvent()
|
||||
{
|
||||
|
@ -8629,12 +8612,15 @@ nsGlobalWindow::NotifyIdleObserversOfIdleActiveEvent()
|
|||
|
||||
if (mCurrentlyIdle) {
|
||||
mIdleCallbackIndex = 0;
|
||||
mIdleFuzzFactor = GetFuzzTimeMS();
|
||||
nsresult rv = ScheduleNextIdleObserverCallback();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
mIdleCallbackIndex = -1;
|
||||
MOZ_ASSERT(mIdleTimer);
|
||||
mIdleTimer->Cancel();
|
||||
nsTObserverArray<IdleObserverHolder>::ForwardIterator iter(mIdleObservers);
|
||||
while (iter.HasMore()) {
|
||||
IdleObserverHolder& idleObserver = iter.GetNext();
|
||||
|
@ -8682,8 +8668,6 @@ nsGlobalWindow::RegisterIdleObserver(nsIIdleObserver* aIdleObserver)
|
|||
} else {
|
||||
mIdleTimer->Cancel();
|
||||
}
|
||||
|
||||
mIdleFuzzFactor = GetFuzzTimeMS();
|
||||
}
|
||||
|
||||
MOZ_ASSERT(mIdleService);
|
||||
|
@ -8730,20 +8714,7 @@ nsGlobalWindow::RegisterIdleObserver(nsIIdleObserver* aIdleObserver)
|
|||
}
|
||||
|
||||
if (static_cast<PRInt32>(insertAtIndex) == mIdleCallbackIndex) {
|
||||
PRUint32 userIdleTimeMS;
|
||||
rv = mIdleService->GetIdleTime(&userIdleTimeMS);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (tmpIdleObserver.mTimeInS*1000 <= userIdleTimeMS) {
|
||||
NotifyIdleObserver(tmpIdleObserver.mIdleObserver,
|
||||
tmpIdleObserver.mTimeInS,
|
||||
true);
|
||||
mIdleCallbackIndex++;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
mIdleTimer->Cancel();
|
||||
|
||||
rv = ScheduleNextIdleObserverCallback();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
@ -8860,7 +8831,7 @@ nsGlobalWindow::Observe(nsISupports* aSubject, const char* aTopic,
|
|||
mNotifyIdleObserversIdleOnThaw = true;
|
||||
mNotifyIdleObserversActiveOnThaw = false;
|
||||
} else if (mOuterWindow && mOuterWindow->GetCurrentInnerWindow() == this) {
|
||||
ScheduleIdleTimerCallback();
|
||||
NotifyIdleObserversOfIdleActiveEvent();
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -9046,7 +9017,7 @@ nsGlobalWindow::FireDelayedDOMEvents()
|
|||
|
||||
if (mNotifyIdleObserversIdleOnThaw) {
|
||||
mNotifyIdleObserversIdleOnThaw = false;
|
||||
ScheduleIdleTimerCallback();
|
||||
NotifyIdleObserversOfIdleActiveEvent();
|
||||
}
|
||||
|
||||
if (mNotifyIdleObserversActiveOnThaw) {
|
||||
|
|
|
@ -769,7 +769,6 @@ protected:
|
|||
nsresult ScheduleNextIdleObserverCallback();
|
||||
PRUint32 GetFuzzTimeMS();
|
||||
nsresult ScheduleActiveTimerCallback();
|
||||
nsresult ScheduleIdleTimerCallback();
|
||||
PRUint32 FindInsertionIndex(IdleObserverHolder* aIdleObserver);
|
||||
virtual nsresult RegisterIdleObserver(nsIIdleObserver* aIdleObserverPtr);
|
||||
nsresult FindIndexOfElementToRemove(nsIIdleObserver* aIdleObserver,
|
||||
|
|
Загрузка…
Ссылка в новой задаче