mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-20 22:27:31 +09:00
Bug 1309147 - Part 5: Eliminate performance cliff when accessing CEReactions code.
Tag UXP Issue #1344
This commit is contained in:
parent
cc71e21e02
commit
f7154d573b
2 changed files with 19 additions and 5 deletions
|
|
@ -905,7 +905,11 @@ CustomElementReactionsStack::PopAndInvokeElementQueue()
|
||||||
"Reaction stack shouldn't be empty");
|
"Reaction stack shouldn't be empty");
|
||||||
|
|
||||||
ElementQueue& elementQueue = mReactionsStack.LastElement();
|
ElementQueue& elementQueue = mReactionsStack.LastElement();
|
||||||
InvokeReactions(elementQueue);
|
// Check element queue size in order to reduce function call overhead.
|
||||||
|
if (!elementQueue.IsEmpty()) {
|
||||||
|
InvokeReactions(elementQueue);
|
||||||
|
}
|
||||||
|
|
||||||
DebugOnly<bool> isRemovedElement = mReactionsStack.RemoveElement(elementQueue);
|
DebugOnly<bool> isRemovedElement = mReactionsStack.RemoveElement(elementQueue);
|
||||||
MOZ_ASSERT(isRemovedElement,
|
MOZ_ASSERT(isRemovedElement,
|
||||||
"Reaction stack should have an element queue to remove");
|
"Reaction stack should have an element queue to remove");
|
||||||
|
|
@ -954,7 +958,10 @@ CustomElementReactionsStack::Enqueue(Element* aElement,
|
||||||
void
|
void
|
||||||
CustomElementReactionsStack::InvokeBackupQueue()
|
CustomElementReactionsStack::InvokeBackupQueue()
|
||||||
{
|
{
|
||||||
InvokeReactions(mBackupQueue);
|
// Check backup queue size in order to reduce function call overhead.
|
||||||
|
if (!mBackupQueue.IsEmpty()) {
|
||||||
|
InvokeReactions(mBackupQueue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,8 @@ public:
|
||||||
// nsWeakPtr is a weak pointer of Element
|
// nsWeakPtr is a weak pointer of Element
|
||||||
// The element reaction queues are stored in ElementReactionQueueMap.
|
// The element reaction queues are stored in ElementReactionQueueMap.
|
||||||
// We need to lookup ElementReactionQueueMap again to get relevant reaction queue.
|
// We need to lookup ElementReactionQueueMap again to get relevant reaction queue.
|
||||||
typedef nsTArray<nsWeakPtr> ElementQueue;
|
// The choice of 1 for the auto size here is based on gut feeling.
|
||||||
|
typedef AutoTArray<nsWeakPtr, 1> ElementQueue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enqueue a custom element upgrade reaction
|
* Enqueue a custom element upgrade reaction
|
||||||
|
|
@ -201,13 +202,19 @@ public:
|
||||||
private:
|
private:
|
||||||
~CustomElementReactionsStack() {};
|
~CustomElementReactionsStack() {};
|
||||||
|
|
||||||
typedef nsTArray<nsAutoPtr<CustomElementReaction>> ReactionQueue;
|
// There is 1 reaction in reaction queue, when 1) it becomes disconnected,
|
||||||
|
// 2) it’s adopted into a new document, 3) its attributes are changed,
|
||||||
|
// appended, removed, or replaced.
|
||||||
|
// There are 3 reactions in reaction queue when doing upgrade operation,
|
||||||
|
// e.g., create an element, insert a node.
|
||||||
|
typedef AutoTArray<nsAutoPtr<CustomElementReaction>, 3> ReactionQueue;
|
||||||
typedef nsClassHashtable<nsISupportsHashKey, ReactionQueue>
|
typedef nsClassHashtable<nsISupportsHashKey, ReactionQueue>
|
||||||
ElementReactionQueueMap;
|
ElementReactionQueueMap;
|
||||||
|
|
||||||
ElementReactionQueueMap mElementReactionQueueMap;
|
ElementReactionQueueMap mElementReactionQueueMap;
|
||||||
|
|
||||||
nsTArray<ElementQueue> mReactionsStack;
|
// The choice of 8 for the auto size here is based on gut feeling.
|
||||||
|
AutoTArray<ElementQueue, 8> mReactionsStack;
|
||||||
ElementQueue mBackupQueue;
|
ElementQueue mBackupQueue;
|
||||||
// https://html.spec.whatwg.org/#enqueue-an-element-on-the-appropriate-element-queue
|
// https://html.spec.whatwg.org/#enqueue-an-element-on-the-appropriate-element-queue
|
||||||
bool mIsBackupQueueProcessing;
|
bool mIsBackupQueueProcessing;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue