summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-03-31WebContent: Add plumbing for 'is scripting enabled' settingLinus Groh
2022-03-31LibWeb: Add 'is scripting enabled' concept to EnvironmentSettingsObjectLinus Groh
This is now the source of truth for 'user enabled/disabled scripting', but it has to ask the window's page, which actually stores the setting. Also use this new functionality in two places where it was previously marked as a FIXME.
2022-03-31LibWeb: Remove Document::is_scripting_enabled() and use Node'sLinus Groh
There's no need to have a custom is_scripting_enabled() for the Document class, as it (indirectly) inherits from Node. Also, let's not hardcode false here :^)
2022-03-31LibJS: Add explicit default copy+move constructors to ThrowCompletionOrHendiadyoin1
This stops clangd from complaining about not being able to determine the copy-constructibility of ThrowCompletionOr and Completion.
2022-03-31AK: Use bucket states with special bit patterns in HashTablekleines Filmröllchen
This simplifies some of the bucket state handling code, as there's now an easy way of checking the basic category of bucket state.
2022-03-31Tests: Test non-trivial re-hashing in HashTablekleines Filmröllchen
This caused a system-wide crash because of a previous bug relating to non-trivial types in HashTable. Therefore, check that such types actually work under various workloads.
2022-03-31AK: Rehash HashTable in-place instead of shrinkingkleines Filmröllchen
As seen on TV, HashTable can get "thrashed", i.e. it has a bunch of deleted buckets that count towards the load factor. This means that hash tables which are large enough for their contents need to be resized. This was fixed in 9d8da16 with a workaround that shrinks the HashTable back down in these cases, as after the resize and re-hash the load factor is very low again. However, that's not a good solution. If you insert and remove repeatedly around a size boundary, you might get frequent resizes, which involve frequent re-allocations. The new solution is an in-place rehashing algorithm that I came up with. (Do complain to me, I'm at fault.) Basically, it iterates the buckets and re-hashes the used buckets while marking the deleted slots empty. The issue arises with collisions in the re-hash. For this reason, there are two kinds of used buckets during the re-hashing: the normal "used" buckets, which are old and are treated as free space, and the "re-hashed" buckets, which are new and treated as used space, i.e. they trigger probing. Therefore, the procedure for relocating a bucket's contents is as follows: - Locate the "real" bucket of the contents with the hash. That bucket is the starting point for the target bucket, and the current (old) bucket is the bucket we want to move. - While we still need to move the bucket: - If we're the target, something strange happened last iteration or we just re-hashed to the same location. We're done. - If the target is empty or deleted, just move the bucket. We're done. - If the target is a re-hashed full bucket, we probe by double-hashing our hash as usual. Henceforth, we move our target for the next iteration. - If the target is an old full bucket, we swap the target and to-move buckets. Therefore, the bucket to move is a the correct location and the former target, which still needs to find a new place, is now in the bucket to move. So we can just continue with the loop; the target is re-obtained from the bucket to move. This happens for each and every bucket, though some buckets are "coincidentally" moved before their point of iteration is reached. Either way, this guarantees full in-place movement (even without stack storage) and therefore space complexity of O(1). Time complexity is amortized O(2n) asssuming a good hashing function. This leads to a performance improvement of ~30% on the benchmark introduced with the last commit. Co-authored-by: Hendiadyoin1 <leon.a@serenityos.org>
2022-03-31Tests: Introduce a HashTable benchmark for "table thrashing"kleines Filmröllchen
Thrashing is what I call the situations where a table is mostly filled with deleted markers, causing an increase in size (at least temporarily) when a simple re-hash would be enough to get rid of those. This happens when a hash table (especially with many elements) has a lot of deletes and re-inserts done to it, which is what this benchmark does.
2022-03-31AK: Merge HashTable bucket state into one enumkleines Filmröllchen
The hash table buckets had three different state booleans that are in fact exclusive. In preparation for further states, this commit consolidates them into one enum. This has the added benefit on not relying on the compiler's boolean packing anymore; we definitely now only need one byte for the bucket state.
2022-03-31LibELF: Remove unused m_program_interpreter member from DynamicLoaderBrian Gianforcaro
While profiling I realized that this member is unused, so the StringBuilder and String allocation are completely un-necessary.
2022-03-31LibELF: Skip DynamicObject::dump() if logging isn't enabledBrian Gianforcaro
I noticed that we were populating this StringBuilder and then throwing away the result while profiling `true` with UserSpace emulator. Before: courage:~ $ time -n 1000 true Timing report: 3454 ms ============== Command: true Average time: 3.45 ms (median: 3, stddev: 3.42, min: 0, max:11) Excluding first: 3.45 ms (median: 3, stddev: 3.42, min: 0, max:11) After: courage:~ $ time -n 1000 true Timing report: 3308 ms ============== Command: true Average time: 3.30 ms (median: 3, stddev: 3.28, min: 0, max:12) Excluding first: 3.30 ms (median: 3, stddev: 3.29, min: 0, max:12)
2022-03-31LibWeb: Add the HTMLOrSVGElement IDL interface mixinIdan Horowitz
2022-03-31LibWeb: Use a callback function in ResizeObserver IDLIdan Horowitz
2022-03-31LibWeb: Use a callback function in IntersectionObserver IDLIdan Horowitz
2022-03-31LibWeb: Replace ad-hoc EventHandler type with callback function typedefIdan Horowitz
2022-03-31LibWeb: Add support for IDL callback functionsIdan Horowitz
2022-03-31LibWeb: Support non-interface top-level extended attributesIdan Horowitz
2022-03-31LibWeb: Add support for IDL typedefsIdan Horowitz
2022-03-31LibWeb: Stop generating C++ includes for non-code-generating IDL filesIdan Horowitz
Specifically, IDL files that do not include interface or enumeration declarations do not generate any code, and as such should not be included.
2022-03-30SpaceAnalyzer: Fix the crash caused by using arrow keysArif Orhun Uzun
Previously, SpaceAnalyzer set focus on the selected BreadcrumbButton. Using arrow keys triggered the keydown_event of the AbstractButton, which later on caused a Function object to be deleted while it is still being used. This change sets the focus on TreeMapWidget and adds an event handler to TreeMapWidget for keydown events. Fixes #13254.
2022-03-30LibWeb: Consolidate mouse handling + only trigger event on left clicksin-ack
This commit moves a couple more special cases in mouse event handling to handle_mouseup. Additionally, it gets rid of the special casing with should_dispatch_event and only fires a click event to the EventTarget when the left mouse button is clicked. Finally it restores the link context menu callback that was lost during 0fc8c65.
2022-03-30LibWeb: Fix sizing of flex child that has flex-basis 0Enver Balalic
Before if an element didn't have a main min size we would clamp it to a literal zero. If that element also had a flex-basis 0 it's width would end up being 0. This patch adds a determine_min_main_size_of_child function that will calculate the minimum main size for the box based on the content of the box. We use the result of that function now instead of clamping the element main min size to 0. This also adds one more box to the flex.html test page, which is the same flex: 0 0 0 box but with flex-direction: column.
2022-03-30LibWeb: Fix calculating the intrinsic height of a boxEnver Balalic
For computing height in FormattingContext::calculate_intrinsic_sizes we were calling into BlockFormattingContext::compute_theoretical_height which will check if the CSS height property was defined and calculate the height based on that instead of calculating the intrinsic height This patch adds a new function calculate_intrinsic_height, which will call into compute_auto_height_for_block_level_element for a block element, or into compute_height_for_replaced_element for a replaced element.
2022-03-30LibWeb: Add Crypto.randomUUID()stelar7
2022-03-30LibWeb: Remove redundant `[[nodiscard]]` from CSS Parser methodsSam Atkins
Optional and smart-pointers are already `[[nodiscard]]` so functions returning them do not need to be declared as such.
2022-03-30LibWeb: Implement and use `parse_a_style_blocks_contents()`Sam Atkins
2022-03-30LibWeb: Tidy up StyleRule APISam Atkins
Constantly accessing private `m_foo` fields feels uncomfortable and doesn't fit well with our code style.
2022-03-30LibWeb: Spec-comment `consume_a_function()`Sam Atkins
2022-03-30LibWeb: Spec-comment `consume_a_simple_block()`Sam Atkins
2022-03-30LibWeb: Comment discrepancy from spec in `consume_a_declaration()`Sam Atkins
We're calling this in a way that is incorrect, and so the algorithm's assumption that the next token is an `<ident-token>` is wrong, and we have to handle that failing. Ideally we would just stop calling this incorrectly, but until then, let's actually document what is happening.
2022-03-30LibWeb: Spec-comment `consume_a_component_value()`Sam Atkins
2022-03-30LIbWeb: Spec-comment `consume_a_list_of_declarations()`Sam Atkins
2022-03-30LibWeb: Spec-comment `consume_a_qualified_rule()`Sam Atkins
2022-03-30LibWeb: Spec-comment `consume_an_at_rule()`Sam Atkins
2022-03-30LibWeb: Spec-comment `consume_a_list_of_rules()`Sam Atkins
2022-03-30LibWeb: Spec-comment `parse_a_comma_separated_list_of_component_values`Sam Atkins
The code had to change a bit to match. Previously, we appended an empty sub-list immediately, but now we append it at the end. The difference is that if there are no tokens, we now correctly return an empty list-of-lists, instead of a list containing an empty list.
2022-03-30LibWeb: Spec-comment `parse_a_list_of_component_values()`Sam Atkins
2022-03-30LibWeb: Spec-comment `parse_a_component_value()`Sam Atkins
2022-03-30LibWeb: Spec-comment `parse_a_list_of_declarations()`Sam Atkins
The `parse_as_list_of_declarations()` public method is unused and will not be used by any user code so has been removed.
2022-03-30LibWeb: Bring `parse_a_declaration()` to spec and add commentsSam Atkins
User code now calls `parse_as_supports_condition()` which actually does the conversion to a StyleProperty.
2022-03-30LibWeb: Spec-comment `parse_a_rule()`Sam Atkins
We now correctly call convert_to_rule() outside of this function. As before, I've renamed `parse_as_rule()` -> `parse_as_css_rule()` to match the free function that calls it.
2022-03-30LibWeb: Use parse_a_list_of_rules() for `@media` and `@supports`Sam Atkins
From the spec: > "Parse a list of rules" is intended for the content of at-rules such > as @media. It differs from "Parse a stylesheet" in the handling of > <CDO-token> and <CDC-token>. - https://www.w3.org/TR/css-syntax-3/#ref-for-parse-a-list-of-rules
2022-03-30LibWeb: Bring `parse_a_list_of_rules()` to specSam Atkins
This is not actually used by anything currently, but it should be used for `@media` and other at-rules. Removed the public parse_as_list_of_rules() because public functions should be things that outside classes actually need to use.
2022-03-30LibWeb: Implement and use "parse a CSS stylesheet" algorithmSam Atkins
`parse_a_stylesheet()` should not do any conversion on its rules. This change corrects that. There are other places where we get this wrong, but one thing at a time. :^)
2022-03-30LibWeb: Use an enum class for the "top-level flag"Sam Atkins
2022-03-30LibWeb: Spec-comment `parse_a_stylesheet()`Sam Atkins
Also introduce a `location` parameter when parsing a CSSStyleSheet. This is not provided by anyone yet.
2022-03-30LibWeb: Rename `parse_css()` -> `parse_css_stylesheet()`Sam Atkins
2022-03-30Meta: Use 4k logical and physical blocks for nvme in QEMUPankaj Raghav
4k logical blocks are better for block devices in QEMU as they align with the underlying filesystem which typically has 4k logical blocks such as our EXT2 filesystem.
2022-03-30Kernel: Fix storage device read/write for request length < block sizePankaj Raghav
The current implementation of read/write will fail in StorageDevice when the request length is less than the block size of the underlying device. Fix it by calculating the offset within a block for such cases and using it for copying data from the bounce buffer.
2022-03-30LibWeb: Implement Element.toggleAttribute()Elisée Maurer