mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-04 14:58:37 +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");
|
||||
|
||||
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);
|
||||
MOZ_ASSERT(isRemovedElement,
|
||||
"Reaction stack should have an element queue to remove");
|
||||
|
|
@ -954,7 +958,10 @@ CustomElementReactionsStack::Enqueue(Element* aElement,
|
|||
void
|
||||
CustomElementReactionsStack::InvokeBackupQueue()
|
||||
{
|
||||
InvokeReactions(mBackupQueue);
|
||||
// Check backup queue size in order to reduce function call overhead.
|
||||
if (!mBackupQueue.IsEmpty()) {
|
||||
InvokeReactions(mBackupQueue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -179,7 +179,8 @@ public:
|
|||
// nsWeakPtr is a weak pointer of Element
|
||||
// The element reaction queues are stored in ElementReactionQueueMap.
|
||||
// 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
|
||||
|
|
@ -201,13 +202,19 @@ public:
|
|||
private:
|
||||
~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>
|
||||
ElementReactionQueueMap;
|
||||
|
||||
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;
|
||||
// https://html.spec.whatwg.org/#enqueue-an-element-on-the-appropriate-element-queue
|
||||
bool mIsBackupQueueProcessing;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue