mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 22:48:11 +00:00
LibWeb: Allocate list of registered intersection observers on demand
This shrinks most DOM elements by 16 bytes.
This commit is contained in:
parent
bdac94870c
commit
ac8bb89f50
2 changed files with 12 additions and 6 deletions
|
@ -97,8 +97,10 @@ void Element::visit_edges(Cell::Visitor& visitor)
|
|||
for (auto& pseudo_element_layout_node : *m_pseudo_element_nodes)
|
||||
visitor.visit(pseudo_element_layout_node);
|
||||
}
|
||||
for (auto& registered_intersection_observers : m_registered_intersection_observers)
|
||||
visitor.visit(registered_intersection_observers.observer);
|
||||
if (m_registered_intersection_observers) {
|
||||
for (auto& registered_intersection_observers : *m_registered_intersection_observers)
|
||||
visitor.visit(registered_intersection_observers.observer);
|
||||
}
|
||||
}
|
||||
|
||||
// https://dom.spec.whatwg.org/#dom-element-getattribute
|
||||
|
@ -2068,19 +2070,23 @@ bool Element::id_reference_exists(DeprecatedString const& id_reference) const
|
|||
|
||||
void Element::register_intersection_observer(Badge<IntersectionObserver::IntersectionObserver>, IntersectionObserver::IntersectionObserverRegistration registration)
|
||||
{
|
||||
m_registered_intersection_observers.append(move(registration));
|
||||
if (!m_registered_intersection_observers)
|
||||
m_registered_intersection_observers = make<Vector<IntersectionObserver::IntersectionObserverRegistration>>();
|
||||
m_registered_intersection_observers->append(move(registration));
|
||||
}
|
||||
|
||||
void Element::unregister_intersection_observer(Badge<IntersectionObserver::IntersectionObserver>, JS::NonnullGCPtr<IntersectionObserver::IntersectionObserver> observer)
|
||||
{
|
||||
m_registered_intersection_observers.remove_first_matching([&observer](IntersectionObserver::IntersectionObserverRegistration const& entry) {
|
||||
VERIFY(m_registered_intersection_observers);
|
||||
m_registered_intersection_observers->remove_first_matching([&observer](IntersectionObserver::IntersectionObserverRegistration const& entry) {
|
||||
return entry.observer == observer;
|
||||
});
|
||||
}
|
||||
|
||||
IntersectionObserver::IntersectionObserverRegistration& Element::get_intersection_observer_registration(Badge<DOM::Document>, IntersectionObserver::IntersectionObserver const& observer)
|
||||
{
|
||||
auto registration_iterator = m_registered_intersection_observers.find_if([&observer](IntersectionObserver::IntersectionObserverRegistration const& entry) {
|
||||
VERIFY(m_registered_intersection_observers);
|
||||
auto registration_iterator = m_registered_intersection_observers->find_if([&observer](IntersectionObserver::IntersectionObserverRegistration const& entry) {
|
||||
return entry.observer.ptr() == &observer;
|
||||
});
|
||||
VERIFY(!registration_iterator.is_end());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue