зеркало из 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);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
PRUint32 callbackTimeMS = 0;
|
PRUint32 callbackTimeMS = 0;
|
||||||
if (idleObserver.mTimeInS * 1000 > userIdleTimeMS) {
|
if (idleObserver.mTimeInS * 1000 + mIdleFuzzFactor > userIdleTimeMS) {
|
||||||
callbackTimeMS = idleObserver.mTimeInS * 1000 - userIdleTimeMS;
|
callbackTimeMS = idleObserver.mTimeInS * 1000 - userIdleTimeMS + mIdleFuzzFactor;
|
||||||
}
|
}
|
||||||
|
|
||||||
mIdleTimer->Cancel();
|
mIdleTimer->Cancel();
|
||||||
|
@ -8568,7 +8568,7 @@ nsGlobalWindow::GetFuzzTimeMS()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PRUint32 randNum = 0;
|
PRUint32 randNum = MAX_IDLE_FUZZ_TIME_MS;
|
||||||
PRSize nbytes = PR_GetRandomNoise(&randNum, sizeof(randNum));
|
PRSize nbytes = PR_GetRandomNoise(&randNum, sizeof(randNum));
|
||||||
if (nbytes != sizeof(randNum)) {
|
if (nbytes != sizeof(randNum)) {
|
||||||
NS_WARNING("PR_GetRandomNoise(...) Not implemented or no available noise!");
|
NS_WARNING("PR_GetRandomNoise(...) Not implemented or no available noise!");
|
||||||
|
@ -8605,23 +8605,6 @@ nsGlobalWindow::ScheduleActiveTimerCallback()
|
||||||
return NS_OK;
|
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
|
nsresult
|
||||||
nsGlobalWindow::NotifyIdleObserversOfIdleActiveEvent()
|
nsGlobalWindow::NotifyIdleObserversOfIdleActiveEvent()
|
||||||
{
|
{
|
||||||
|
@ -8629,12 +8612,15 @@ nsGlobalWindow::NotifyIdleObserversOfIdleActiveEvent()
|
||||||
|
|
||||||
if (mCurrentlyIdle) {
|
if (mCurrentlyIdle) {
|
||||||
mIdleCallbackIndex = 0;
|
mIdleCallbackIndex = 0;
|
||||||
|
mIdleFuzzFactor = GetFuzzTimeMS();
|
||||||
nsresult rv = ScheduleNextIdleObserverCallback();
|
nsresult rv = ScheduleNextIdleObserverCallback();
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
mIdleCallbackIndex = -1;
|
mIdleCallbackIndex = -1;
|
||||||
|
MOZ_ASSERT(mIdleTimer);
|
||||||
|
mIdleTimer->Cancel();
|
||||||
nsTObserverArray<IdleObserverHolder>::ForwardIterator iter(mIdleObservers);
|
nsTObserverArray<IdleObserverHolder>::ForwardIterator iter(mIdleObservers);
|
||||||
while (iter.HasMore()) {
|
while (iter.HasMore()) {
|
||||||
IdleObserverHolder& idleObserver = iter.GetNext();
|
IdleObserverHolder& idleObserver = iter.GetNext();
|
||||||
|
@ -8682,8 +8668,6 @@ nsGlobalWindow::RegisterIdleObserver(nsIIdleObserver* aIdleObserver)
|
||||||
} else {
|
} else {
|
||||||
mIdleTimer->Cancel();
|
mIdleTimer->Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
mIdleFuzzFactor = GetFuzzTimeMS();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MOZ_ASSERT(mIdleService);
|
MOZ_ASSERT(mIdleService);
|
||||||
|
@ -8730,20 +8714,7 @@ nsGlobalWindow::RegisterIdleObserver(nsIIdleObserver* aIdleObserver)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (static_cast<PRInt32>(insertAtIndex) == mIdleCallbackIndex) {
|
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();
|
mIdleTimer->Cancel();
|
||||||
|
|
||||||
rv = ScheduleNextIdleObserverCallback();
|
rv = ScheduleNextIdleObserverCallback();
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
}
|
}
|
||||||
|
@ -8860,7 +8831,7 @@ nsGlobalWindow::Observe(nsISupports* aSubject, const char* aTopic,
|
||||||
mNotifyIdleObserversIdleOnThaw = true;
|
mNotifyIdleObserversIdleOnThaw = true;
|
||||||
mNotifyIdleObserversActiveOnThaw = false;
|
mNotifyIdleObserversActiveOnThaw = false;
|
||||||
} else if (mOuterWindow && mOuterWindow->GetCurrentInnerWindow() == this) {
|
} else if (mOuterWindow && mOuterWindow->GetCurrentInnerWindow() == this) {
|
||||||
ScheduleIdleTimerCallback();
|
NotifyIdleObserversOfIdleActiveEvent();
|
||||||
}
|
}
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -9046,7 +9017,7 @@ nsGlobalWindow::FireDelayedDOMEvents()
|
||||||
|
|
||||||
if (mNotifyIdleObserversIdleOnThaw) {
|
if (mNotifyIdleObserversIdleOnThaw) {
|
||||||
mNotifyIdleObserversIdleOnThaw = false;
|
mNotifyIdleObserversIdleOnThaw = false;
|
||||||
ScheduleIdleTimerCallback();
|
NotifyIdleObserversOfIdleActiveEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mNotifyIdleObserversActiveOnThaw) {
|
if (mNotifyIdleObserversActiveOnThaw) {
|
||||||
|
|
|
@ -769,7 +769,6 @@ protected:
|
||||||
nsresult ScheduleNextIdleObserverCallback();
|
nsresult ScheduleNextIdleObserverCallback();
|
||||||
PRUint32 GetFuzzTimeMS();
|
PRUint32 GetFuzzTimeMS();
|
||||||
nsresult ScheduleActiveTimerCallback();
|
nsresult ScheduleActiveTimerCallback();
|
||||||
nsresult ScheduleIdleTimerCallback();
|
|
||||||
PRUint32 FindInsertionIndex(IdleObserverHolder* aIdleObserver);
|
PRUint32 FindInsertionIndex(IdleObserverHolder* aIdleObserver);
|
||||||
virtual nsresult RegisterIdleObserver(nsIIdleObserver* aIdleObserverPtr);
|
virtual nsresult RegisterIdleObserver(nsIIdleObserver* aIdleObserverPtr);
|
||||||
nsresult FindIndexOfElementToRemove(nsIIdleObserver* aIdleObserver,
|
nsresult FindIndexOfElementToRemove(nsIIdleObserver* aIdleObserver,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче