зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1087330. Make the data structure we use for our promise microtask queue have O(1) first element removal, not O(N). r=khuey
This commit is contained in:
Родитель
25dceb01f1
Коммит
b8ba520783
|
@ -482,10 +482,10 @@ bool
|
|||
Promise::PerformMicroTaskCheckpoint()
|
||||
{
|
||||
CycleCollectedJSRuntime* runtime = CycleCollectedJSRuntime::Get();
|
||||
nsTArray<nsCOMPtr<nsIRunnable>>& microtaskQueue =
|
||||
std::queue<nsCOMPtr<nsIRunnable>>& microtaskQueue =
|
||||
runtime->GetPromiseMicroTaskQueue();
|
||||
|
||||
if (microtaskQueue.IsEmpty()) {
|
||||
if (microtaskQueue.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -495,11 +495,11 @@ Promise::PerformMicroTaskCheckpoint()
|
|||
}
|
||||
|
||||
do {
|
||||
nsCOMPtr<nsIRunnable> runnable = microtaskQueue.ElementAt(0);
|
||||
nsCOMPtr<nsIRunnable> runnable = microtaskQueue.front();
|
||||
MOZ_ASSERT(runnable);
|
||||
|
||||
// This function can re-enter, so we remove the element before calling.
|
||||
microtaskQueue.RemoveElementAt(0);
|
||||
microtaskQueue.pop();
|
||||
nsresult rv = runnable->Run();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return false;
|
||||
|
@ -507,7 +507,7 @@ Promise::PerformMicroTaskCheckpoint()
|
|||
if (cx.isSome()) {
|
||||
JS_CheckForInterrupt(cx.ref());
|
||||
}
|
||||
} while (!microtaskQueue.IsEmpty());
|
||||
} while (!microtaskQueue.empty());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1168,10 +1168,10 @@ Promise::DispatchToMicroTask(nsIRunnable* aRunnable)
|
|||
MOZ_ASSERT(aRunnable);
|
||||
|
||||
CycleCollectedJSRuntime* runtime = CycleCollectedJSRuntime::Get();
|
||||
nsTArray<nsCOMPtr<nsIRunnable>>& microtaskQueue =
|
||||
std::queue<nsCOMPtr<nsIRunnable>>& microtaskQueue =
|
||||
runtime->GetPromiseMicroTaskQueue();
|
||||
|
||||
microtaskQueue.AppendElement(aRunnable);
|
||||
microtaskQueue.push(aRunnable);
|
||||
}
|
||||
|
||||
#if defined(DOM_PROMISE_DEPRECATED_REPORTING)
|
||||
|
|
|
@ -961,7 +961,7 @@ CycleCollectedJSRuntime::SetPendingException(nsIException* aException)
|
|||
mPendingException = aException;
|
||||
}
|
||||
|
||||
nsTArray<nsCOMPtr<nsIRunnable>>&
|
||||
std::queue<nsCOMPtr<nsIRunnable>>&
|
||||
CycleCollectedJSRuntime::GetPromiseMicroTaskQueue()
|
||||
{
|
||||
return mPromiseMicroTaskQueue;
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
#ifndef mozilla_CycleCollectedJSRuntime_h__
|
||||
#define mozilla_CycleCollectedJSRuntime_h__
|
||||
|
||||
#include <queue>
|
||||
|
||||
#include "mozilla/DeferredFinalize.h"
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "jsapi.h"
|
||||
|
@ -261,7 +263,7 @@ public:
|
|||
already_AddRefed<nsIException> GetPendingException() const;
|
||||
void SetPendingException(nsIException* aException);
|
||||
|
||||
nsTArray<nsCOMPtr<nsIRunnable>>& GetPromiseMicroTaskQueue();
|
||||
std::queue<nsCOMPtr<nsIRunnable>>& GetPromiseMicroTaskQueue();
|
||||
|
||||
nsCycleCollectionParticipant* GCThingParticipant();
|
||||
nsCycleCollectionParticipant* ZoneParticipant();
|
||||
|
@ -322,7 +324,7 @@ private:
|
|||
|
||||
nsCOMPtr<nsIException> mPendingException;
|
||||
|
||||
nsTArray<nsCOMPtr<nsIRunnable>> mPromiseMicroTaskQueue;
|
||||
std::queue<nsCOMPtr<nsIRunnable>> mPromiseMicroTaskQueue;
|
||||
|
||||
OOMState mOutOfMemoryState;
|
||||
OOMState mLargeAllocationFailureState;
|
||||
|
|
Загрузка…
Ссылка в новой задаче