ladybird/Userland/Libraries/LibWeb/CSS
Andreas Kling 646b37d1a9 LibWeb: Cache CSS rules in buckets to reduce number of rules checked
This patch introduces the StyleComputer::RuleCache, which divides all of
our (author) CSS rules into buckets.

Currently, there are two buckets:
- Rules where a specific class must be present.
- All other rules.

This allows us to check a significantly smaller set of rules for each
element, since we can skip over any rule that requires a class attribute
not present on the element.

This takes the typical numer of rules tested per element on Discord from
~16000 to ~550. :^)

We can definitely improve the cache invalidation. It currently happens
too often due to media queries. And we also need to make sure we
invalidate when mutating style through CSSOM APIs.
2022-02-10 20:52:11 +01:00
..
Parser LibWeb: Parse multiple box-shadows :^) 2022-02-08 17:45:51 +01:00
SyntaxHighlighter LibWeb: Implement first draft of CSS syntax highlighting :^) 2021-10-23 19:07:44 +02:00
.gitignore Libraries: Move to Userland/Libraries/ 2021-01-12 12:17:46 +01:00
ComputedValues.h LibWeb: Incorporate spread-distance into box-shadow rendering 2022-02-08 17:45:51 +01:00
CSSConditionRule.cpp LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSConditionRule.h LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSConditionRule.idl LibWeb: Add CSSConditionRule 2021-09-29 18:57:48 +02:00
CSSGroupingRule.cpp LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSGroupingRule.h LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSGroupingRule.idl LibWeb: Add CSSGroupingRule 2021-09-29 18:57:48 +02:00
CSSImportRule.cpp LibWeb: Make CSSImportRule::m_document a WeakPtr 2021-12-06 19:22:16 +01:00
CSSImportRule.h Everywhere: Fix -Winconsistent-missing-override warnings from Clang 2021-12-11 13:14:15 -08:00
CSSMediaRule.cpp LibWeb: Add serialization code for CSS{Media,Supports}Rule 2021-10-15 18:12:20 +01:00
CSSMediaRule.h LibWeb: Add serialization code for CSS{Media,Supports}Rule 2021-10-15 18:12:20 +01:00
CSSRule.cpp LibWeb: Use W3C urls for CSSOM spec links 2021-10-15 21:05:35 +01:00
CSSRule.h LibWeb: Make CSSStyleSheet::m_owner_css_rule a WeakPtr 2021-12-06 19:22:16 +01:00
CSSRule.idl LibWeb: Implement CSSRule and CSSStyleDeclaration serialization 2021-10-01 20:17:15 +02:00
CSSRuleList.cpp LibWeb: Remove duplicate checks in for_each_effective_style_rule() 2022-01-23 01:22:41 +01:00
CSSRuleList.h LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSRuleList.idl LibWeb: Make CSSRule and CSSRuleList available to JavaScript :^) 2021-09-29 21:21:57 +02:00
CSSStyleDeclaration.cpp LibWeb: Use W3C urls for CSSOM spec links 2021-10-15 21:05:35 +01:00
CSSStyleDeclaration.h LibWeb: Include custom properties in CSS dump 2021-12-09 21:30:31 +01:00
CSSStyleDeclaration.idl LibWeb: Support simplest form of CSSStyleDeclaration.setProperty() 2021-09-26 19:07:03 +02:00
CSSStyleRule.cpp LibWeb: Serialize selectors only in CSSStyleRule::selector_text() 2021-10-16 15:16:27 +01:00
CSSStyleRule.h LibWeb: Implement CSSRule and CSSStyleDeclaration serialization 2021-10-01 20:17:15 +02:00
CSSStyleRule.idl LibWeb: Have CSSStyleRule inherit from CSSRule in IDL 2021-10-03 16:39:17 +02:00
CSSStyleSheet.cpp LibWeb: Remove for_first_not_loaded_import_rule() :^) 2021-11-18 21:11:19 +01:00
CSSStyleSheet.h LibWeb: Make StyleSheet::m_parent_style_sheet a WeakPtr 2021-12-06 19:22:16 +01:00
CSSStyleSheet.idl LibWeb: Add CSSStyleSheet.{insert,delete,remove}Rule() APIs 2021-09-29 21:21:57 +02:00
CSSSupportsRule.cpp LibWeb: Add serialization code for CSS{Media,Supports}Rule 2021-10-15 18:12:20 +01:00
CSSSupportsRule.h LibWeb: Add serialization code for CSS{Media,Supports}Rule 2021-10-15 18:12:20 +01:00
Default.css LibWeb: Make attribute hidden have an effect; hide some other elements 2022-01-22 01:28:42 +00:00
Display.h LibWeb: Add missing headers 2021-10-20 09:20:18 +01:00
GeneralEnclosed.h LibWeb: Implement independent GeneralEnclosed class 2021-11-24 22:57:46 +01:00
Identifiers.json LibWeb: Parse display: inline-flex 2022-02-07 21:55:12 +01:00
Length.cpp LibWeb: Replace Length::set_calculated_style() with ::make_calculated() 2022-02-04 13:52:02 +01:00
Length.h LibWeb: Replace Length::set_calculated_style() with ::make_calculated() 2022-02-04 13:52:02 +01:00
LengthBox.h LibWeb: Convert width/height and min-/max- versions to LengthPercentage 2022-01-20 00:04:10 +01:00
MediaList.cpp LibWeb: Move media-query-list serialization code to MediaQuery.{h,cpp} 2021-10-15 18:12:20 +01:00
MediaList.h LibWeb: Implement MediaQuery matching :^) 2021-10-05 18:51:39 +02:00
MediaList.idl LibWeb: Add MediaList 2021-10-01 20:03:03 +02:00
MediaQuery.cpp AK+Everywhere: Make Variant::visit() respect the Variant's constness 2022-01-14 11:35:40 +03:30
MediaQuery.h LibWeb: Support range syntax for media queries 2022-01-02 15:43:51 +01:00
MediaQueryList.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
MediaQueryList.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
MediaQueryList.idl LibWeb: Implement MediaQueryList.onchange 2021-10-01 01:35:30 +01:00
MediaQueryListEvent.h LibWeb: Fire MediaQueryListEvents when an MQL's match-state changes 2021-10-05 18:51:39 +02:00
MediaQueryListEvent.idl LibWeb: Fire MediaQueryListEvents when an MQL's match-state changes 2021-10-05 18:51:39 +02:00
Percentage.cpp LibWeb: Allow LengthPercentage to hold a calculated value 2022-02-04 13:52:02 +01:00
Percentage.h LibWeb: Allow LengthPercentage to hold a calculated value 2022-02-04 13:52:02 +01:00
PreferredColorScheme.cpp LibWeb: Add Web::CSS::PreferredColorScheme enum 2021-10-31 18:39:13 +01:00
PreferredColorScheme.h LibWeb: Add Web::CSS::PreferredColorScheme enum 2021-10-31 18:39:13 +01:00
Properties.json LibWeb: Parse display: inline-flex 2022-02-07 21:55:12 +01:00
QuirksMode.css Libraries: Move to Userland/Libraries/ 2021-01-12 12:17:46 +01:00
ResolvedCSSStyleDeclaration.cpp LibWeb: Incorporate spread-distance into box-shadow rendering 2022-02-08 17:45:51 +01:00
ResolvedCSSStyleDeclaration.h LibWeb: Implement CSSRule and CSSStyleDeclaration serialization 2021-10-01 20:17:15 +02:00
Screen.cpp LibWeb: Make CSS::Screen forward its ref count to DOM::Window 2021-12-09 21:28:52 +01:00
Screen.h LibWeb: Make CSS::Screen forward its ref count to DOM::Window 2021-12-09 21:28:52 +01:00
Screen.idl LibWeb: Implement the Screen interface 2021-04-04 00:37:54 +02:00
Selector.cpp LibWeb: Cache the result of Selector::specificity() 2022-02-05 16:48:14 +01:00
Selector.h LibWeb: Cache the result of Selector::specificity() 2022-02-05 16:48:14 +01:00
SelectorEngine.cpp LibWeb: Mark SelectorEngine matches-related functions as inline 2022-02-05 16:48:14 +01:00
SelectorEngine.h LibWeb: Convert CSS Dump, Selector, & SelectorEngine to east const 2021-07-14 13:31:00 +02:00
Serialize.cpp Everywhere: Pass AK::StringView by value 2021-11-11 01:27:46 +01:00
Serialize.h Everywhere: Pass AK::StringView by value 2021-11-11 01:27:46 +01:00
StyleComputer.cpp LibWeb: Cache CSS rules in buckets to reduce number of rules checked 2022-02-10 20:52:11 +01:00
StyleComputer.h LibWeb: Cache CSS rules in buckets to reduce number of rules checked 2022-02-10 20:52:11 +01:00
StyleProperties.cpp LibWeb: Incorporate spread-distance into box-shadow rendering 2022-02-08 17:45:51 +01:00
StyleProperties.h LibWeb: Render multiple box-shadows 2022-02-08 17:45:51 +01:00
StyleSheet.cpp LibWeb: Make StyleSheet::m_parent_style_sheet a WeakPtr 2021-12-06 19:22:16 +01:00
StyleSheet.h LibWeb: Make StyleSheet::m_parent_style_sheet a WeakPtr 2021-12-06 19:22:16 +01:00
StyleSheet.idl LibWeb: Reimplement the <style> element following the spec 2021-09-30 00:00:55 +02:00
StyleSheetList.cpp LibWeb: Cache CSS rules in buckets to reduce number of rules checked 2022-02-10 20:52:11 +01:00
StyleSheetList.h LibWeb: Cache CSS rules in buckets to reduce number of rules checked 2022-02-10 20:52:11 +01:00
StyleSheetList.idl LibWeb: Make StyleSheetList.item an IDL getter 2021-09-29 14:57:59 +01:00
StyleValue.cpp LibWeb: Parse spread-distance and inset parts of box-shadow 2022-02-08 17:45:51 +01:00
StyleValue.h LibWeb: Parse spread-distance and inset parts of box-shadow 2022-02-08 17:45:51 +01:00
Supports.cpp LibWeb: Remove unknown value in @supports query logic 2022-01-19 21:44:45 +00:00
Supports.h LibWeb: Remove unknown value in @supports query logic 2022-01-19 21:44:45 +00:00