LibWeb: Only set prototype once for object with IDL interface

Before this change, we were going through the chain of base classes for
each IDL interface object and having them set the prototype to their
prototype.

Instead of doing that, reorder things so that we set the right prototype
immediately in Foo::initialize(), and then don't bother in all the base
class overrides.

This knocks off a ~1% profile item on Speedometer 3.
This commit is contained in:
Andreas Kling 2025-04-20 16:22:57 +02:00 committed by Andreas Kling
commit a6dfc74e93
Notes: github-actions[bot] 2025-04-20 16:44:17 +00:00
417 changed files with 423 additions and 423 deletions

View file

@ -32,8 +32,8 @@ AnimationEvent::AnimationEvent(JS::Realm& realm, FlyString const& type, Animatio
void AnimationEvent::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AnimationEvent);
Base::initialize(realm);
}
}

View file

@ -75,8 +75,8 @@ CSSAnimation::CSSAnimation(JS::Realm& realm)
void CSSAnimation::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSAnimation);
Base::initialize(realm);
}
}

View file

@ -24,8 +24,8 @@ void CSSConditionRule::for_each_effective_rule(TraversalOrder order, Function<vo
void CSSConditionRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSConditionRule);
Base::initialize(realm);
}
}

View file

@ -30,8 +30,8 @@ CSSFontFaceDescriptors::~CSSFontFaceDescriptors() = default;
void CSSFontFaceDescriptors::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSFontFaceDescriptors);
Base::initialize(realm);
}
// https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-length

View file

@ -30,8 +30,8 @@ CSSFontFaceRule::CSSFontFaceRule(JS::Realm& realm, GC::Ref<CSSFontFaceDescriptor
void CSSFontFaceRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSFontFaceRule);
Base::initialize(realm);
}
bool CSSFontFaceRule::is_valid() const

View file

@ -24,8 +24,8 @@ CSSGroupingRule::CSSGroupingRule(JS::Realm& realm, CSSRuleList& rules, Type type
void CSSGroupingRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSGroupingRule);
Base::initialize(realm);
}
void CSSGroupingRule::visit_edges(Cell::Visitor& visitor)

View file

@ -39,8 +39,8 @@ CSSImportRule::CSSImportRule(JS::Realm& realm, URL url, GC::Ptr<DOM::Document> d
void CSSImportRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSImportRule);
Base::initialize(realm);
}
void CSSImportRule::visit_edges(Cell::Visitor& visitor)

View file

@ -34,8 +34,8 @@ void CSSKeyframeRule::visit_edges(Visitor& visitor)
void CSSKeyframeRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSKeyframeRule);
Base::initialize(realm);
}
String CSSKeyframeRule::serialized() const

View file

@ -36,8 +36,8 @@ void CSSKeyframesRule::visit_edges(Visitor& visitor)
void CSSKeyframesRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSKeyframesRule);
Base::initialize(realm);
}
String CSSKeyframesRule::serialized() const

View file

@ -37,8 +37,8 @@ CSSLayerBlockRule::CSSLayerBlockRule(JS::Realm& realm, FlyString name, CSSRuleLi
void CSSLayerBlockRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSLayerBlockRule);
Base::initialize(realm);
}
String CSSLayerBlockRule::serialized() const

View file

@ -26,8 +26,8 @@ CSSLayerStatementRule::CSSLayerStatementRule(JS::Realm& realm, Vector<FlyString>
void CSSLayerStatementRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSLayerStatementRule);
Base::initialize(realm);
}
String CSSLayerStatementRule::serialized() const

View file

@ -27,8 +27,8 @@ CSSMediaRule::CSSMediaRule(JS::Realm& realm, MediaList& media, CSSRuleList& rule
void CSSMediaRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSMediaRule);
Base::initialize(realm);
}
void CSSMediaRule::visit_edges(Cell::Visitor& visitor)

View file

@ -30,8 +30,8 @@ GC::Ref<CSSNamespaceRule> CSSNamespaceRule::create(JS::Realm& realm, Optional<Fl
void CSSNamespaceRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSNamespaceRule);
Base::initialize(realm);
}
// https://www.w3.org/TR/cssom/#serialize-a-css-rule

View file

@ -27,8 +27,8 @@ CSSNestedDeclarations::CSSNestedDeclarations(JS::Realm& realm, CSSStylePropertie
void CSSNestedDeclarations::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSNestedDeclarations);
Base::initialize(realm);
}
void CSSNestedDeclarations::visit_edges(Cell::Visitor& visitor)

View file

@ -36,8 +36,8 @@ Optional<String> CSSPropertyRule::initial_value() const
void CSSPropertyRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSPropertyRule);
Base::initialize(realm);
}
// https://www.w3.org/TR/cssom-1/#serialize-a-css-rule

View file

@ -42,8 +42,8 @@ GC::Ref<CSSRuleList> CSSRuleList::create_empty(JS::Realm& realm)
void CSSRuleList::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSRuleList);
Base::initialize(realm);
}
void CSSRuleList::visit_edges(Cell::Visitor& visitor)

View file

@ -29,8 +29,8 @@ CSSStyleDeclaration::CSSStyleDeclaration(JS::Realm& realm, Computed computed, Re
void CSSStyleDeclaration::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSStyleDeclaration);
Base::initialize(realm);
}
// https://drafts.csswg.org/cssom/#update-style-attribute-for

View file

@ -77,8 +77,8 @@ CSSStyleProperties::CSSStyleProperties(JS::Realm& realm, Computed computed, Read
void CSSStyleProperties::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSStyleProperties);
Base::initialize(realm);
}
void CSSStyleProperties::visit_edges(Visitor& visitor)

View file

@ -32,8 +32,8 @@ CSSStyleRule::CSSStyleRule(JS::Realm& realm, SelectorList&& selectors, CSSStyleP
void CSSStyleRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSStyleRule);
Base::initialize(realm);
}
void CSSStyleRule::visit_edges(Cell::Visitor& visitor)

View file

@ -114,8 +114,8 @@ CSSStyleSheet::CSSStyleSheet(JS::Realm& realm, CSSRuleList& rules, MediaList& me
void CSSStyleSheet::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSStyleSheet);
Base::initialize(realm);
}
void CSSStyleSheet::visit_edges(Cell::Visitor& visitor)

View file

@ -26,8 +26,8 @@ CSSSupportsRule::CSSSupportsRule(JS::Realm& realm, NonnullRefPtr<Supports>&& sup
void CSSSupportsRule::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSSupportsRule);
Base::initialize(realm);
}
String CSSSupportsRule::condition_text() const

View file

@ -126,8 +126,8 @@ CSSTransition::CSSTransition(JS::Realm& realm, DOM::Element& element, PropertyID
void CSSTransition::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSTransition);
Base::initialize(realm);
}
void CSSTransition::visit_edges(Cell::Visitor& visitor)

View file

@ -186,9 +186,8 @@ FontFace::~FontFace() = default;
void FontFace::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(FontFace);
Base::initialize(realm);
}
void FontFace::visit_edges(JS::Cell::Visitor& visitor)

View file

@ -56,9 +56,8 @@ FontFaceSet::FontFaceSet(JS::Realm& realm, GC::Ref<WebIDL::Promise> ready_promis
void FontFaceSet::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(FontFaceSet);
Base::initialize(realm);
}
void FontFaceSet::visit_edges(Cell::Visitor& visitor)

View file

@ -30,8 +30,8 @@ MediaList::MediaList(JS::Realm& realm, Vector<NonnullRefPtr<MediaQuery>>&& media
void MediaList::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(MediaList);
Base::initialize(realm);
}
void MediaList::visit_edges(Visitor& visitor)

View file

@ -32,8 +32,8 @@ MediaQueryList::MediaQueryList(DOM::Document& document, Vector<NonnullRefPtr<Med
void MediaQueryList::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(MediaQueryList);
Base::initialize(realm);
}
void MediaQueryList::visit_edges(Cell::Visitor& visitor)

View file

@ -35,8 +35,8 @@ MediaQueryListEvent::~MediaQueryListEvent() = default;
void MediaQueryListEvent::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(MediaQueryListEvent);
Base::initialize(realm);
}
}

View file

@ -29,8 +29,8 @@ Screen::Screen(HTML::Window& window)
void Screen::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(Screen);
Base::initialize(realm);
}
void Screen::visit_edges(Cell::Visitor& visitor)

View file

@ -20,8 +20,8 @@ ScreenOrientation::ScreenOrientation(JS::Realm& realm)
void ScreenOrientation::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(ScreenOrientation);
Base::initialize(realm);
}
GC::Ref<ScreenOrientation> ScreenOrientation::create(JS::Realm& realm)

View file

@ -155,8 +155,8 @@ StyleSheetList::StyleSheetList(GC::Ref<DOM::Node> document_or_shadow_root)
void StyleSheetList::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(StyleSheetList);
Base::initialize(realm);
}
void StyleSheetList::visit_edges(Cell::Visitor& visitor)

View file

@ -36,8 +36,8 @@ TransitionEvent::~TransitionEvent() = default;
void TransitionEvent::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(TransitionEvent);
Base::initialize(realm);
}
}

View file

@ -30,8 +30,8 @@ VisualViewport::VisualViewport(DOM::Document& document)
void VisualViewport::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(VisualViewport);
Base::initialize(realm);
}
void VisualViewport::visit_edges(Cell::Visitor& visitor)