1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 06:47:34 +00:00

LibCore+LibGUI: Make it fast to check if a Core::Object is a Widget

This check happens very often in LibGUI code. 25% of time spent
layouting the emoji input dialog was wasted on RTTI. Adding a simple
fast_is<Widget>() melts almost all of that away.
This commit is contained in:
Andreas Kling 2022-09-30 17:59:41 +02:00
parent 1cff5fe2ff
commit 30815c25a2
2 changed files with 10 additions and 0 deletions

View file

@ -404,6 +404,8 @@ protected:
void show_or_hide_tooltip();
private:
virtual bool is_widget() const final { return true; }
void handle_paint_event(PaintEvent&);
void handle_resize_event(ResizeEvent&);
void handle_mousedown_event(MouseEvent&);
@ -466,6 +468,9 @@ inline Widget const* Widget::parent_widget() const
}
}
template<>
inline bool Core::Object::fast_is<GUI::Widget>() const { return is_widget(); }
template<>
struct AK::Formatter<GUI::Widget> : AK::Formatter<Core::Object> {
};