mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 07:13:20 +00:00
4265f72859
Deletion of mutation observers from a list resulted in O(n^2) behavior and could lead to massive freezes. This is resolved by using a LinkedList instead, reducing complexity to O(n). A safely iterable doubly linked list was implemented based on `mozilla::DoublyLinkedList`, allowing to insert and remove elements while iterating the list. Due to the nature of `mozilla::DoublyLinkedList`, every Mutation Observer now inherits `mozilla::DoublyLinkedListElement<T>`. This implies that a Mutation Observer can only be part of one DoublyLinkedList. This conflicts with some Mutation Observers, which are being added to multiple `nsINode`s. To continue supporting this, new MutationObserver base classes `nsMultiMutationObserver` and `nsStubMultiMutationObserver` are introduced, which create `MutationObserverWrapper` objects each time they are added to a `nsINode`. The wrapper objects forward every call to the actual observer. Differential Revision: https://phabricator.services.mozilla.com/D157031 |
||
---|---|---|
.. | ||
double-conversion | ||
lz4 | ||
tests | ||
Algorithm.h | ||
Alignment.h | ||
AllocPolicy.h | ||
AlreadyAddRefed.h | ||
Array.h | ||
ArrayUtils.h | ||
Assertions.cpp | ||
Assertions.h | ||
AtomicBitfields.h | ||
Atomics.h | ||
Attributes.h | ||
BinarySearch.h | ||
BitSet.h | ||
BloomFilter.h | ||
Buffer.h | ||
BufferList.h | ||
Casting.h | ||
ChaosMode.cpp | ||
ChaosMode.h | ||
Char16.h | ||
CheckedInt.h | ||
CompactPair.h | ||
Compiler.h | ||
Compression.cpp | ||
Compression.h | ||
DbgMacro.h | ||
DebugOnly.h | ||
DefineEnum.h | ||
DoublyLinkedList.h | ||
EndianUtils.h | ||
EnumeratedArray.h | ||
EnumeratedRange.h | ||
EnumSet.h | ||
EnumTypeTraits.h | ||
fallible.h | ||
FastBernoulliTrial.h | ||
FloatingPoint.cpp | ||
FloatingPoint.h | ||
FStream.h | ||
FunctionRef.h | ||
FunctionTypeTraits.h | ||
Fuzzing.h | ||
HashFunctions.cpp | ||
HashFunctions.h | ||
HashTable.h | ||
HelperMacros.h | ||
InitializedOnce.h | ||
IntegerRange.h | ||
IntegerTypeTraits.h | ||
JSONWriter.cpp | ||
JSONWriter.h | ||
JsRust.h | ||
Latin1.h | ||
Likely.h | ||
LinkedList.h | ||
MacroArgs.h | ||
MacroForEach.h | ||
MathAlgorithms.h | ||
Maybe.h | ||
MaybeOneOf.h | ||
MaybeStorageBase.h | ||
MemoryChecking.h | ||
MemoryReporting.h | ||
MoveOnlyFunction.h | ||
moz.build | ||
NonDereferenceable.h | ||
NotNull.h | ||
Opaque.h | ||
OperatorNewExtensions.h | ||
PairHash.h | ||
Path.h | ||
PodOperations.h | ||
Poison.cpp | ||
Poison.h | ||
RandomNum.cpp | ||
RandomNum.h | ||
Range.h | ||
RangedArray.h | ||
RangedPtr.h | ||
ReentrancyGuard.h | ||
RefCounted.h | ||
RefCountType.h | ||
RefPtr.h | ||
Result.h | ||
ResultExtensions.h | ||
ResultVariant.h | ||
ReverseIterator.h | ||
RollingMean.h | ||
Saturate.h | ||
Scoped.h | ||
ScopeExit.h | ||
SegmentedVector.h | ||
SHA1.cpp | ||
SHA1.h | ||
SharedLibrary.h | ||
SmallPointerArray.h | ||
Span.h | ||
SplayTree.h | ||
SPSCQueue.h | ||
StaticAnalysisFunctions.h | ||
STYLE | ||
TaggedAnonymousMemory.cpp | ||
TaggedAnonymousMemory.h | ||
Tainting.h | ||
TemplateLib.h | ||
TextUtils.h | ||
ThreadLocal.h | ||
ThreadSafety.h | ||
ThreadSafeWeakPtr.h | ||
ToString.h | ||
TsanOptions.h | ||
Tuple.h | ||
TypedEnumBits.h | ||
Types.h | ||
TypeTraits.h | ||
UniquePtr.h | ||
UniquePtrExtensions.cpp | ||
UniquePtrExtensions.h | ||
Unused.cpp | ||
Unused.h | ||
Utf8.cpp | ||
Utf8.h | ||
Variant.h | ||
Vector.h | ||
WasiAtomic.h | ||
WeakPtr.h | ||
WindowsVersion.h | ||
WrappingOperations.h | ||
XorShift128PlusRNG.h |