fixing bug 770656, idle fuzz time for idle notifications. r=jst@mozilla.com

This commit is contained in:
Bonnie Surender 2012-07-04 13:21:40 -07:00
Родитель eb8a11b1a8
Коммит d43d53eaee
2 изменённых файлов: 8 добавлений и 38 удалений

Просмотреть файл

@ -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,