mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
Bug 1283616 - part 2 - micro-optimize inserting microtask runnables into the queue; r=khuey
We can save an AddRef/Release pair by passing in the reference to the queue.
This commit is contained in:
parent
985851ccca
commit
2c2b9296bc
@ -1252,8 +1252,8 @@ Animation::DoFinishNotification(SyncNotifyFlag aSyncNotifyFlag)
|
||||
} else if (!mFinishNotificationTask.IsPending()) {
|
||||
RefPtr<nsRunnableMethod<Animation>> runnable =
|
||||
NewRunnableMethod(this, &Animation::DoFinishNotificationImmediately);
|
||||
runtime->DispatchToMicroTask(runnable);
|
||||
mFinishNotificationTask = runnable;
|
||||
runtime->DispatchToMicroTask(do_AddRef(runnable));
|
||||
mFinishNotificationTask = runnable.forget();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2697,7 +2697,7 @@ Promise::ResolveInternal(JSContext* aCx,
|
||||
new PromiseInit(nullptr, thenObj, mozilla::dom::GetIncumbentGlobal());
|
||||
RefPtr<PromiseResolveThenableJob> task =
|
||||
new PromiseResolveThenableJob(this, valueObj, thenCallback);
|
||||
runtime->DispatchToMicroTask(task);
|
||||
runtime->DispatchToMicroTask(task.forget());
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -2812,7 +2812,7 @@ Promise::TriggerPromiseReactions()
|
||||
for (uint32_t i = 0; i < callbacks.Length(); ++i) {
|
||||
RefPtr<PromiseReactionJob> task =
|
||||
new PromiseReactionJob(this, callbacks[i], mResult);
|
||||
runtime->DispatchToMicroTask(task);
|
||||
runtime->DispatchToMicroTask(task.forget());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -948,10 +948,12 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
virtual void DispatchToMicroTask(nsIRunnable* aRunnable) override
|
||||
virtual void DispatchToMicroTask(already_AddRefed<nsIRunnable> aRunnable) override
|
||||
{
|
||||
RefPtr<nsIRunnable> runnable(aRunnable);
|
||||
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
MOZ_ASSERT(aRunnable);
|
||||
MOZ_ASSERT(runnable);
|
||||
|
||||
std::queue<nsCOMPtr<nsIRunnable>>* microTaskQueue = nullptr;
|
||||
|
||||
@ -973,7 +975,7 @@ public:
|
||||
microTaskQueue = &mDebuggerPromiseMicroTaskQueue;
|
||||
}
|
||||
|
||||
microTaskQueue->push(aRunnable);
|
||||
microTaskQueue->push(runnable.forget());
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -975,7 +975,7 @@ CycleCollectedJSRuntime::EnqueuePromiseJobCallback(JSContext* aCx,
|
||||
global = xpc::NativeGlobal(aIncumbentGlobal);
|
||||
}
|
||||
nsCOMPtr<nsIRunnable> runnable = new PromiseJobRunnable(aJob, aAllocationSite, global);
|
||||
self->DispatchToMicroTask(runnable);
|
||||
self->DispatchToMicroTask(runnable.forget());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1680,12 +1680,14 @@ CycleCollectedJSRuntime::PrepareWaitingZonesForGC()
|
||||
}
|
||||
|
||||
void
|
||||
CycleCollectedJSRuntime::DispatchToMicroTask(nsIRunnable* aRunnable)
|
||||
CycleCollectedJSRuntime::DispatchToMicroTask(already_AddRefed<nsIRunnable> aRunnable)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aRunnable);
|
||||
RefPtr<nsIRunnable> runnable(aRunnable);
|
||||
|
||||
mPromiseMicroTaskQueue.push(aRunnable);
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(runnable);
|
||||
|
||||
mPromiseMicroTaskQueue.push(runnable.forget());
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -372,7 +372,7 @@ public:
|
||||
void PrepareWaitingZonesForGC();
|
||||
|
||||
// Queue an async microtask to the current main or worker thread.
|
||||
virtual void DispatchToMicroTask(nsIRunnable* aRunnable);
|
||||
virtual void DispatchToMicroTask(already_AddRefed<nsIRunnable> aRunnable);
|
||||
|
||||
// Storage for watching rejected promises waiting for some client to
|
||||
// consume their rejection.
|
||||
|
Loading…
x
Reference in New Issue
Block a user