1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 18:05:07 +00:00
serenity/Userland/Libraries/LibWeb/DOM
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
..
AbortController.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
AbortController.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
AbortController.idl LibWeb: Add support for AbortSignal.reason 2021-12-10 23:05:36 +02:00
AbortSignal.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
AbortSignal.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
AbortSignal.idl LibWeb: Implement AbortSignal.throwIfAborted 2021-12-10 23:05:36 +02:00
Attribute.cpp Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
Attribute.h LibWeb: Weakly store NamedNodeMap's & Attribute's associated Element 2021-10-18 09:58:52 +02:00
Attribute.idl LibWeb: Implement Attribute closer to the spec and with an IDL file 2021-10-17 13:51:10 +01:00
CharacterData.cpp LibWeb: Make CSS layout lazier 2021-10-06 17:14:22 +02:00
CharacterData.h LibWeb: Implement ChildNode.remove 2021-09-29 17:56:13 +02:00
CharacterData.idl LibWeb: Implement ChildNode.replaceWith 2022-01-31 15:25:36 +01:00
ChildNode.h LibWeb: Implement ChildNode.replaceWith 2022-01-31 15:25:36 +01:00
Comment.cpp LibWeb: Rename DOM::Window::document() => associated_document() 2021-09-09 21:25:10 +02:00
Comment.h LibWeb: Add constructors for Text, DocumentFragment and Comment 2021-09-06 02:18:41 +02:00
Comment.idl LibWeb: Add constructors for Text, DocumentFragment and Comment 2021-09-06 02:18:41 +02:00
CustomEvent.cpp LibWeb: Add the missing CustomEvent IDL constructor 2021-09-29 19:38:41 +02:00
CustomEvent.h LibWeb: Add the missing CustomEvent IDL constructor 2021-09-29 19:38:41 +02:00
CustomEvent.idl LibWeb: Use the LibWeb source directory as the IDL #import base path 2021-10-01 20:14:45 +02:00
Document.cpp LibWeb: Cache CSS rules in buckets to reduce number of rules checked 2022-02-10 20:52:11 +01:00
Document.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
Document.idl LibWeb: Add Document.hasFocus() stub 2022-02-03 22:35:13 +01:00
DocumentFragment.cpp LibWeb: Rename DOM::Window::document() => associated_document() 2021-09-09 21:25:10 +02:00
DocumentFragment.h LibWeb: Add constructors for Text, DocumentFragment and Comment 2021-09-06 02:18:41 +02:00
DocumentFragment.idl LibWeb: Implement ParentNode.replaceChildren 2022-01-31 15:25:36 +01:00
DocumentLoadEventDelayer.cpp LibWeb: Allow HTML parser to delay delivery of the document "load" event 2021-09-26 02:00:00 +02:00
DocumentLoadEventDelayer.h LibWeb: Allow HTML parser to delay delivery of the document "load" event 2021-09-26 02:00:00 +02:00
DocumentType.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
DocumentType.h LibWeb: Implement ChildNode.remove 2021-09-29 17:56:13 +02:00
DocumentType.idl LibWeb: Implement ChildNode.replaceWith 2022-01-31 15:25:36 +01:00
DOMException.h LibWeb: Replace heycam.github.io/webidl URLs with webidl.spec.whatwg.org 2021-10-11 13:15:16 +01:00
DOMException.idl LibWeb: Add support for optional default values and optional bools in IDL 2021-04-11 18:27:52 +02:00
DOMImplementation.cpp LibWeb: Make DOMImplementation forward its ref count to DOM::Document 2021-12-09 21:28:52 +01:00
DOMImplementation.h LibWeb: Make DOMImplementation forward its ref count to DOM::Document 2021-12-09 21:28:52 +01:00
DOMImplementation.idl LibWeb: Add createDocument and createDocumentType for DOMImplementation 2021-05-04 22:59:15 +01:00
DOMTokenList.cpp Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
DOMTokenList.h Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
DOMTokenList.idl LibWeb: Implement DOMTokenList for managing space-separated tokens lists 2021-10-18 23:33:56 +02:00
Element.cpp LibWeb: Add a partial implementation of Element.setAttributeNS() 2022-02-05 22:50:39 +01:00
Element.h LibWeb: Perform CSS custom property cascade once instead of per-property 2022-02-10 20:52:11 +01:00
Element.idl LibWeb: Add a partial implementation of Element.setAttributeNS() 2022-02-05 22:50:39 +01:00
ElementFactory.cpp LibWeb: Add a bare-bones SVG <g> element 2021-09-18 01:39:59 +02:00
ElementFactory.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Event.cpp LibWeb: Implement Event.composedPath 2021-10-17 01:34:02 +03:00
Event.h Everywhere: Pass AK::StringView by value 2021-11-11 01:27:46 +01:00
Event.idl LibWeb: Add Event.eventPhase constants 2021-10-19 10:00:26 +02:00
EventDispatcher.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
EventDispatcher.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
EventListener.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
EventTarget.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
EventTarget.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
EventTarget.idl LibWeb: Implement EventTarget.dispatchEvent 2021-05-04 23:41:44 +01:00
ExceptionOr.h LibWeb: Convert throw_dom_exception_if_needed() to ThrowCompletionOr 2021-10-31 18:51:07 +01:00
HTMLCollection.cpp LibWeb: Convert HTMLCollection to use IDL special operations 2021-09-26 18:59:56 +02:00
HTMLCollection.h LibWeb: Convert HTMLCollection to use IDL special operations 2021-09-26 18:59:56 +02:00
HTMLCollection.idl LibWeb: Convert HTMLCollection to use IDL special operations 2021-09-26 18:59:56 +02:00
LiveNodeList.cpp LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
LiveNodeList.h LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
NamedNodeMap.cpp Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
NamedNodeMap.h Everywhere: Update copyrights with my new serenityos.org e-mail :^) 2022-01-31 18:23:22 +00:00
NamedNodeMap.idl LibWeb: Implement (most of) NamedNodeMap to store attributes 2021-10-17 13:51:10 +01:00
Node.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
Node.h LibWeb: Compute element style in Layout::TreeBuilder 2022-02-05 22:50:39 +01:00
Node.idl LibWeb: Implement Node.getRootNode 2021-10-16 10:51:23 +02:00
NodeList.h LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
NodeList.idl LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
NodeOperations.cpp LibWeb: Implement ParentNode.prepend 2022-01-31 15:25:36 +01:00
NodeOperations.h LibWeb: Implement ParentNode.prepend 2022-01-31 15:25:36 +01:00
NonDocumentTypeChildNode.h LibWeb: Implement EventHandler::focus_previous_element() 2022-02-08 22:15:10 +00:00
NonElementParentNode.h LibWeb: Use default instead of an empty constructor/destructor 2021-09-16 17:17:13 +02:00
ParentNode.cpp LibWeb: Implement ParentNode.replaceChildren 2022-01-31 15:25:36 +01:00
ParentNode.h LibWeb: Implement ParentNode.replaceChildren 2022-01-31 15:25:36 +01:00
Position.cpp LibWeb: Remove unnecessary DOM::Position destructor 2021-09-08 11:14:29 +02:00
Position.h AK: Convert AK::Format formatting helpers to returning ErrorOr<void> 2021-11-17 00:21:13 +01:00
ProcessingInstruction.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ProcessingInstruction.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
ProcessingInstruction.idl LibWeb: Add ProcessingInstruction node 2021-04-06 21:42:00 +02:00
Range.cpp LibWeb: Rename DOM::Window::document() => associated_document() 2021-09-09 21:25:10 +02:00
Range.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Range.idl LibWeb: Add constructor to Range IDL interface 2021-02-17 23:45:07 +01:00
ShadowRoot.cpp LibWeb: Compute element style in Layout::TreeBuilder 2022-02-05 22:50:39 +01:00
ShadowRoot.h LibWeb: Compute element style in Layout::TreeBuilder 2022-02-05 22:50:39 +01:00
ShadowRoot.idl LibWeb: Make the innerHTML setter spec compliant 2021-09-14 02:09:18 +02:00
StaticNodeList.cpp LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
StaticNodeList.h LibWeb: Add support for NodeList 2021-10-03 00:18:52 +02:00
Text.cpp LibWeb: Compute element style in Layout::TreeBuilder 2022-02-05 22:50:39 +01:00
Text.h LibWeb: Compute element style in Layout::TreeBuilder 2022-02-05 22:50:39 +01:00
Text.idl LibWeb: Add constructors for Text, DocumentFragment and Comment 2021-09-06 02:18:41 +02:00
Timer.cpp LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
Timer.h LibWeb: Rewrite EventTarget to more closely match the spec 2022-02-08 17:47:44 +00:00
Window.cpp LibWeb: Add Storage interface and window.localStorage 2022-02-08 21:53:20 +01:00
Window.h LibWeb: Add Storage interface and window.localStorage 2022-02-08 21:53:20 +01:00