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

@ -331,8 +331,8 @@ WebIDL::ExceptionOr<GC::Ref<AnalyserNode>> AnalyserNode::construct_impl(JS::Real
void AnalyserNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AnalyserNode);
Base::initialize(realm);
}
}

View file

@ -148,8 +148,8 @@ AudioBuffer::AudioBuffer(JS::Realm& realm, AudioBufferOptions const& options)
void AudioBuffer::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioBuffer);
Base::initialize(realm);
}
void AudioBuffer::visit_edges(Cell::Visitor& visitor)

View file

@ -166,8 +166,8 @@ WebIDL::ExceptionOr<GC::Ref<AudioBufferSourceNode>> AudioBufferSourceNode::const
void AudioBufferSourceNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioBufferSourceNode);
Base::initialize(realm);
}
void AudioBufferSourceNode::visit_edges(Cell::Visitor& visitor)

View file

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

View file

@ -50,8 +50,8 @@ WebIDL::ExceptionOr<GC::Ref<AudioDestinationNode>> AudioDestinationNode::constru
void AudioDestinationNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioDestinationNode);
Base::initialize(realm);
}
void AudioDestinationNode::visit_edges(Cell::Visitor& visitor)

View file

@ -73,8 +73,8 @@ WebIDL::ExceptionOr<void> AudioListener::set_orientation(float x, float y, float
void AudioListener::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioListener);
Base::initialize(realm);
}
void AudioListener::visit_edges(Cell::Visitor& visitor)

View file

@ -216,8 +216,8 @@ Bindings::ChannelInterpretation AudioNode::channel_interpretation()
void AudioNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioNode);
Base::initialize(realm);
}
void AudioNode::visit_edges(Cell::Visitor& visitor)

View file

@ -141,8 +141,8 @@ WebIDL::ExceptionOr<GC::Ref<AudioParam>> AudioParam::cancel_and_hold_at_time(dou
void AudioParam::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioParam);
Base::initialize(realm);
}
void AudioParam::visit_edges(Cell::Visitor& visitor)

View file

@ -72,8 +72,8 @@ WebIDL::ExceptionOr<void> AudioScheduledSourceNode::stop(double when)
void AudioScheduledSourceNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(AudioScheduledSourceNode);
Base::initialize(realm);
}
void AudioScheduledSourceNode::visit_edges(Cell::Visitor& visitor)

View file

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

View file

@ -102,8 +102,8 @@ WebIDL::ExceptionOr<GC::Ref<BiquadFilterNode>> BiquadFilterNode::construct_impl(
void BiquadFilterNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(BiquadFilterNode);
Base::initialize(realm);
}
void BiquadFilterNode::visit_edges(Cell::Visitor& visitor)

View file

@ -50,8 +50,8 @@ WebIDL::ExceptionOr<GC::Ref<ChannelSplitterNode>> ChannelSplitterNode::construct
void ChannelSplitterNode::initialize(JS::Realm& realm)
{
AudioNode::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(ChannelSplitterNode);
AudioNode::initialize(realm);
}
WebIDL::ExceptionOr<void> ChannelSplitterNode::set_channel_count(WebIDL::UnsignedLong channel_count)

View file

@ -34,8 +34,8 @@ WebIDL::ExceptionOr<GC::Ref<ConstantSourceNode>> ConstantSourceNode::construct_i
void ConstantSourceNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(ConstantSourceNode);
Base::initialize(realm);
}
void ConstantSourceNode::visit_edges(Cell::Visitor& visitor)

View file

@ -51,8 +51,8 @@ WebIDL::ExceptionOr<GC::Ref<DelayNode>> DelayNode::construct_impl(JS::Realm& rea
void DelayNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(DelayNode);
Base::initialize(realm);
}
void DelayNode::visit_edges(Cell::Visitor& visitor)

View file

@ -51,8 +51,8 @@ DynamicsCompressorNode::DynamicsCompressorNode(JS::Realm& realm, GC::Ref<BaseAud
void DynamicsCompressorNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(DynamicsCompressorNode);
Base::initialize(realm);
}
void DynamicsCompressorNode::visit_edges(Cell::Visitor& visitor)

View file

@ -47,8 +47,8 @@ GainNode::GainNode(JS::Realm& realm, GC::Ref<BaseAudioContext> context, GainOpti
void GainNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(GainNode);
Base::initialize(realm);
}
void GainNode::visit_edges(Cell::Visitor& visitor)

View file

@ -34,8 +34,8 @@ WebIDL::ExceptionOr<GC::Ref<MediaElementAudioSourceNode>> MediaElementAudioSourc
void MediaElementAudioSourceNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(MediaElementAudioSourceNode);
Base::initialize(realm);
}
void MediaElementAudioSourceNode::visit_edges(Cell::Visitor& visitor)

View file

@ -99,8 +99,8 @@ OfflineAudioContext::OfflineAudioContext(JS::Realm& realm, WebIDL::UnsignedLong
void OfflineAudioContext::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(OfflineAudioContext);
Base::initialize(realm);
}
void OfflineAudioContext::visit_edges(Cell::Visitor& visitor)

View file

@ -83,8 +83,8 @@ void OscillatorNode::set_periodic_wave(GC::Ptr<PeriodicWave> periodic_wave)
void OscillatorNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(OscillatorNode);
Base::initialize(realm);
}
void OscillatorNode::visit_edges(Cell::Visitor& visitor)

View file

@ -80,8 +80,8 @@ PannerNode::PannerNode(JS::Realm& realm, GC::Ref<BaseAudioContext> context, Pann
void PannerNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(PannerNode);
Base::initialize(realm);
}
void PannerNode::visit_edges(Cell::Visitor& visitor)

View file

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

View file

@ -72,8 +72,8 @@ StereoPannerNode::StereoPannerNode(JS::Realm& realm, GC::Ref<BaseAudioContext> c
void StereoPannerNode::initialize(JS::Realm& realm)
{
Base::initialize(realm);
WEB_SET_PROTOTYPE_FOR_INTERFACE(StereoPannerNode);
Base::initialize(realm);
}
void StereoPannerNode::visit_edges(Cell::Visitor& visitor)