Bug 1499726 - make main-thread XHR timer setting slightly more efficient; r=baku

Instead of creating a timer and then setting the timer's target, we can
determine the timer's target and pass it in directly when the timer is
created.  This reordering of steps is slightly more efficient, since
SetTarget() is both a virtual call and requires locking, both of which
can be skipped if we know the target at timer creation time.
This commit is contained in:
Nathan Froyd
2018-10-17 19:57:36 -04:00
parent 078a15207a
commit c56ee7cd54
2 changed files with 8 additions and 11 deletions

View File

@@ -3142,13 +3142,13 @@ XMLHttpRequestMainThread::SetTimeout(uint32_t aTimeout, ErrorResult& aRv)
}
}
void
XMLHttpRequestMainThread::SetTimerEventTarget(nsITimer* aTimer)
nsIEventTarget*
XMLHttpRequestMainThread::GetTimerEventTarget()
{
if (nsCOMPtr<nsIGlobalObject> global = GetOwnerGlobal()) {
nsCOMPtr<nsIEventTarget> target = global->EventTargetFor(TaskCategory::Other);
aTimer->SetTarget(target);
return global->EventTargetFor(TaskCategory::Other);
}
return nullptr;
}
nsresult
@@ -3183,8 +3183,7 @@ XMLHttpRequestMainThread::StartTimeoutTimer()
}
if (!mTimeoutTimer) {
mTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mTimeoutTimer);
mTimeoutTimer = NS_NewTimer(GetTimerEventTarget());
}
uint32_t elapsed =
(uint32_t)((PR_Now() - mRequestSentTime) / PR_USEC_PER_MSEC);
@@ -3601,8 +3600,7 @@ void
XMLHttpRequestMainThread::StartProgressEventTimer()
{
if (!mProgressNotifier) {
mProgressNotifier = NS_NewTimer();
SetTimerEventTarget(mProgressNotifier);
mProgressNotifier = NS_NewTimer(GetTimerEventTarget());
}
if (mProgressNotifier) {
mProgressTimerIsActive = true;
@@ -3628,8 +3626,7 @@ XMLHttpRequestMainThread::MaybeStartSyncTimeoutTimer()
return eErrorOrExpired;
}
mSyncTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mSyncTimeoutTimer);
mSyncTimeoutTimer = NS_NewTimer(GetTimerEventTarget());
if (!mSyncTimeoutTimer) {
return eErrorOrExpired;
}