aplefull
c908c14aac
LibGfx: Clamp BMP color palette to 1024
...
Other browsers don't think that BMP files with more than 1024 colors are
invalid. They clamp the palette instead, and now we do the same. This
allows us to load more BMPs.
2025-05-09 21:45:29 +02:00
Jelle Raaijmakers
70b52e0994
LibWeb: Use efficient background repeat path for either direction
...
We're able to efficiently draw repeated bitmaps through Skia, but for
backgrounds we only did so if the background was `repeat-x` _and_
`repeat-y`, and not if just one was set. This meant that for backgrounds
that were only repeating in one direction, we were taking the slow path.
Turns out that this slow path also produced graphical artifacts when
zooming in and out, so let's not do that :^)
2025-05-09 21:37:48 +02:00
Timothy Flynn
30e8f3f1ad
LibWeb: Update the <details> layout tree when it is opened/closed
...
Otherwise, the arrow painted next to the <details> element does not
update.
Using a screenshot test here because apparently the direction of the
arrow has no effect on the layout or paint trees.
2025-05-09 21:37:14 +02:00
Andreas Kling
6efc5c54b5
AK: Make Utf16View::to_utf8() use simdutf fast path more often
...
By piggybacking on the already-optimized implementation in
StringBuilder, we can get simdutf for the AllowInvalidCodeUnits::Yes
case here as well.
1.03x speedup on Speedometer's TodoMVC-jQuery.
2025-05-09 21:36:59 +02:00
Andreas Kling
f61df9d34c
LibWeb: Don't throw away UA shadow trees willy-nilly
...
We were unnecessarily discarding the shadow trees of various elements
when they were removed or detached from the DOM.
This especially caused a *lot* of churn when creating input elements via
setting .innerHTML on something. We ended up building each input
element's shadow tree 3 times instead of 1.
The original issue that we were trying to solve by discarding shadow
trees appears to have been solved elsewhere, and nothing else seems to
break by just allowing them to remain in place.
1.05x speedup on Speedometer's TodoMVC-jQuery.
2025-05-09 12:49:04 -04:00
Jelle Raaijmakers
123abe0e79
LibWeb: Overlap float space and left margins for all shared ancestors
...
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
We would only correct for the left margin of the containing block of the
child box that we are laying out, but we actually need to correct for
all left margins up until the containing block that contains both the
float and the child box.
Fixes #4639 .
2025-05-09 14:13:02 +02:00
Aliaksandr Kalenik
6530f55f34
LibJS: Cache rejected/fulfilled callbacks in AsyncFunctionDriverWrapper
...
Saves us two NativeFunction allocations per each `await`.
With this change, following function goes 80% faster on my computer:
```js
(async () => {
const resolved = Promise.resolve();
for (let i = 0; i < 5_000_000; i++) {
await resolved;
}
})();
```
2025-05-09 12:30:15 +02:00
Aliaksandr Kalenik
4c789ac689
LibJS: Skip iteration result allocation in AsyncFunctionDriverWrapper
...
- Create less GC pressure by making each `await` in async function skip
iteration result object allocation.
- Skip uncached `Object::get()` calls to extract `value` and `done` from
the iteration result object.
With this change, following function goes 30% faster on my computer:
```js
(async () => {
const resolved = Promise.resolve();
for (let i = 0; i < 5_000_000; i++) {
await resolved;
}
})();
```
2025-05-09 12:30:15 +02:00
Shannon Booth
286a9d8101
LibJS: Don't run promise and cleanup jobs in Interpreter::run
...
https://tc39.es/ecma262/#sec-jobs specifies that we should only be
running queued promise jobs and host-defined cleanup when the
execution context stack is empty. It is asserted to _not_ be empty
the line above, so remove it.
No impact on test262 or our test suites, Interpreter::run_executable
is already (incorrectly) performing this unconditionally.
run_promise_jobs also happens to do nothing when LibJS is embedded
into LibWeb.
2025-05-09 09:35:49 +02:00
Ali Mohammad Pur
43defa90cc
Meta: Make WPT.sh log args relative to cwd as of script invocation
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This restores the behaviour from before adding parallel instance
support.
2025-05-08 23:50:04 +01:00
Shannon Booth
19bf897116
LibJS: Avoid roundtrip through Value for comparison bytecode evaluation
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
1.1x speedup on strictly-equals-object.js
2025-05-08 20:39:29 +02:00
Sam Atkins
90d466e7e9
LibWeb: Add dumping code for keyframe/keyframes rules
2025-05-08 16:21:32 +01:00
Sam Atkins
fbdef98307
LibWeb: Dump CSSDescriptors in a generic way
...
This replaces the need for bespoke (and verbose) dumping for each
at-rule that has descriptors.
2025-05-08 16:21:32 +01:00
Sam Atkins
f0ce4f43a6
LibWeb: Make unknown webkit pseudo-elements safe to dump
...
This fixes a couple of crashes when dumping the style sheets on
ladybird.org
2025-05-08 16:21:32 +01:00
Sam Atkins
0925a32558
LibWeb/CSS: Extract a CSSDescriptors base class
...
This holds the boilerplate that's needed by any CSSStyleDeclaration
subclass that holds Descriptors. CSSFontFaceDescriptors now only has to
worry about initialization and its own exposed properties.
2025-05-08 16:21:32 +01:00
Kenneth Myhra
6941b63890
LibWeb: Add {,de}serialization steps for ImageData
2025-05-09 02:12:01 +12:00
Kenneth Myhra
5b4644d198
LibWeb: Use WebIDL types for IDL exposed attributes
2025-05-09 02:12:01 +12:00
Kenneth Myhra
306c7b8211
Tests: Import some structuredClone-related WPT tests
2025-05-09 02:12:01 +12:00
Timothy Flynn
5eb4c3dc2f
LibWebView: Disable spare WebContent processes when profiling WebContent
...
Each WebContent process will create a callgrind log file. Let's not log
processes we are not interested in.
2025-05-08 10:02:41 -04:00
Timothy Flynn
4916ae6d67
LibWebView: Paint callgrind instructions a bit less aggressively
...
On my terminal, the colors chosen before were very hard to read.
2025-05-08 10:02:41 -04:00
Sam Atkins
15356b7036
Documentation: Mention requirements for ENABLE_CLANG_PLUGINS
2025-05-08 10:02:10 -04:00
stelar7
fa207c8fc6
LibWeb/IDB: Implement IDBObjectStore::clear
2025-05-08 14:13:21 +01:00
stelar7
637f35c0eb
LibWeb/IDB: Implement clear_an_object_store
2025-05-08 14:13:21 +01:00
stelar7
aa35ced34f
LibWeb/IDB: Implement IDBObjectStore::delete
2025-05-08 14:13:21 +01:00
stelar7
1fe6060ff9
LibWeb/IDB: Improve error messages slightly
2025-05-08 14:13:21 +01:00
stelar7
63e1cc7b50
LibWeb/IDB: Implement IDBIndex::open_cursor
2025-05-08 14:13:21 +01:00
stelar7
8f876e824b
LibWeb/IDB: Implement IDBCursor::primary_key
2025-05-08 14:13:21 +01:00
stelar7
141093e032
LibWeb/IDB: Implement IDBCursor::effective_key
2025-05-08 14:13:21 +01:00
Jelle Raaijmakers
f996fb9d80
LibWeb: Translate special WebDriver keys for backspace, tab and return
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Build Dev Container Image / build (push) Has been cancelled
These private code points are used extensively by WebDriver clients,
such as the WPT suite.
2025-05-08 07:06:02 -04:00
Bastiaan van der Plaat
0b6f693636
UI/AppKit: Use webview layout event instead of window resize events
...
Currently the window resize events are used to resize the webview.
But when extra window items appear, for example: search or DevTools
Bar then the webview is clipped out of the window. This also happens
when the tab bar is opened and closed. Listening to layout events
resolves these clipping issues completely.
2025-05-08 11:23:21 +01:00
Bastiaan van der Plaat
5a3b98e0a9
UI/AppKit: Disable toolbar mode customization
...
Currently you can right click on the toolbar for a system
contextmenu. When you change the display mode
the toolbar goes into a weird smaller state.
2025-05-08 11:23:21 +01:00
Timothy Flynn
c846616d51
LibWeb: Adjust positions by the scroll offset for scrollbar hit testing
...
This ensures we scroll to the correct position when dragging a scrollbar
or clicking its gutter.
2025-05-08 10:40:58 +01:00
Timothy Flynn
22532c769c
LibWeb: Be less lenient in scrollbar hit testing
...
A scrollbar contains a mouse position only if its gutter rect contains
that position. We were incorrectly deciding a position was contained if
it fell to the right of a vertical scrollbar, or below a horizontal
scrollbar.
2025-05-08 10:40:58 +01:00
Sam Atkins
a8529629e2
LibWeb/HTML: Update "is script closable" to current spec
...
Corresponds to d7fc63a84a
and 7a48703e77
2025-05-08 10:39:34 +01:00
Ali Mohammad Pur
292688e249
LibWasm: Validate tables, memories, globals, elements and data correctly
...
These sections are supposed to be validated with only the imported
globals.
2025-05-08 03:35:11 -06:00
Ali Mohammad Pur
1bcbd008d6
Tests/LibWeb: Rebaseline some no-longer-failing wasm tests
2025-05-08 03:35:11 -06:00
Ali Mohammad Pur
638a354b29
LibWeb/WebAssembly: Throw appropriate errors as defined by the spec
2025-05-08 03:35:11 -06:00
Ali Mohammad Pur
333ba93d49
LibWeb/WebAssembly: Define the hacky 'native' errors given in the spec
...
These cannot be implemented "correctly" as the set of native errors as
defined by ecma262 is closed, but we can get pretty close.
2025-05-08 03:35:11 -06:00
Ali Mohammad Pur
fbfd3e2538
IDLGenerators: Add an 'WithInitializer' attribute for an init hook
...
This is needed for WebAssembly.*Error (at least), which apparently
cannot be defined in webidl.
2025-05-08 03:35:11 -06:00
Andrew Kaster
8a57b75969
Devcontainer: Update fedora devcontainer to version 42
2025-05-08 03:21:15 -06:00
Andrew Kaster
3c8515a1a1
Documentation: Add patchelf as a dependency for on Fedora
...
The provided patchelf from vcpkg is only version 0.14.3, which is too
old to produce working binaries on Fedora 42. Using that old version
causes hard to debug issues where applications segfault during startup.
2025-05-08 03:21:15 -06:00
Francesco Gazzetta
5610f5a865
LibWeb/HTML: Add missing include to CanvasRenderingContext2D.cpp
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Fixes linking of CanvasRenderingContext2D on some systems:
[2959/3075] Linking CXX shared library lib/liblagom-web.so.0.0.0
FAILED: lib/liblagom-web.so.0.0.0
: && /nix/store/f0m6caffiykyvsjim9376a3hx2yj2ghj-gcc-wrapper-14.2.1.20250322/bin/g++ -fPIC -O3 -DNDEBUG -fstack-protector-strong -Wl,-z,defs -Wl,--no-undefined -Wl,--no-allow-shlib-undefined -Wl,--dependency-file=Lagom/Libraries/LibWeb/CMakeFiles/LibWeb.dir/link.d -shared -Wl,-soname,liblagom-web.so.0 -o lib/liblagom-web.so.0.0.0 @CMakeFiles/LibWeb.rsp && :
/nix/store/hzw38c3f7s0w200cgk9645z53al7k8lw-binutils-2.44/bin/ld: Lagom/Libraries/LibWeb/CMakeFiles/LibWeb.dir/HTML/CanvasRenderingContext2D.cpp.o: in function `Web::HTML::CanvasRenderingContext2D::context_attributes_from_options(JS::VM&, JS::Value) [clone .localalias]':
CanvasRenderingContext2D.cpp:(.text+0x355a): undefined reference to `JS::Value::to_boolean() const'
/nix/store/hzw38c3f7s0w200cgk9645z53al7k8lw-binutils-2.44/bin/ld: CanvasRenderingContext2D.cpp:(.text+0x38e6): undefined reference to `JS::Value::to_boolean() const'
/nix/store/hzw38c3f7s0w200cgk9645z53al7k8lw-binutils-2.44/bin/ld: CanvasRenderingContext2D.cpp:(.text+0x3d67): undefined reference to `JS::Value::to_boolean() const'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Co-authored-by: Timothy Flynn <trflynn89@pm.me>
2025-05-07 16:53:09 -04:00
Ali Mohammad Pur
011982c501
Meta: Make WPT.sh run nproc/2 testrunners in parallel
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This is the "intended" way of parallelism with wpt, but instead of
requiring N different systems (or VMs), this does it all on one system
with the power of namespaces.
2025-05-07 15:48:21 +01:00
Ali Mohammad Pur
79c32f33e1
Meta: Reformat WPT.sh
2025-05-07 15:48:21 +01:00
Jelle Raaijmakers
d424dc1b32
LibWeb: Assign new wrapped node list to container for insertParagraph
...
Forgot to implement this part of the spec.
2025-05-07 16:11:31 +02:00
Jelle Raaijmakers
c56f7d9cde
LibWeb: Invalidate sibling style for :only-child
and :*-of-type
...
After f7a3f785a8
, sibling nodes' styles
were no longer invalidated after a node was removed. This reuses the
flag for `:first-child` and `:last-child` to indicate that a node's
style might be affected by any structural change in its siblings.
Fixes #4631 .
Resolves the `:only-child` ACID3 failure as documented in #1231 .
2025-05-07 14:55:12 +03:00
Andreas Kling
74f133293d
LibJS: Avoid redundant ExecutionContext allocation for bound functions
...
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Instead of creating a second ExecutionContext in BoundFunction.[[Call]],
we now implement BoundFunction::get_stack_frame_size() and combine
information from the target + the bound arguments list.
This allows BoundFunction.[[Call]] to reuse the already-established
ExecutionContext for the callee.
1.20x speedup on MicroBench/bound-call-04-args.js
2025-05-07 13:20:41 +02:00
Psychpsyo
dbece92637
LibWeb: Make elements with 'opacity: 0' respond to hit-testing
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
2025-05-07 01:45:07 +03:00
Andreas Kling
d462731a4d
LibJS: Make PutById inline cache polymorphic (4 shapes)
...
2.44x speedup on MicroBench/pic-put-own.js
1.48x speedup on MicroBench/pic-put-pchain.js
2025-05-07 00:27:11 +02:00
Andreas Kling
a677d96b8f
LibJS: Make GetById cache polymorphic
...
Instead of monomorphic (1 shape), GetById inline caches are now
polymorphic (4 shapes).
This improves inline cache hit rates greatly on most web JavaScript.
For example, Speedometer 2.1 sees 88% -> 97% cache hit rate improvement.
1.71x speedup on MicroBench/pic-get-own.js
1.82x speedup on MicroBench/pic-get-pchain.js
2025-05-07 00:27:11 +02:00