This allows cells to cache their inline content size and will eventually
allow them to participate in incremental layout.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
* Add XPath parser/evaluator
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* Correctly annotate XPathEvaluator IDL
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: have bindings pass in `can_gc`
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: add docstrings
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: implement PartialEq for Value for readability
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: add docstrings for CoreFunctions
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: simplify node test code
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: add unit tests for string handling xpath functions
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* put xpath features behind dom.xpath.enabled pref
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review] remove rstest and insta dev-deps
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* update wpt test expectations
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* [PR review]: tweak metadata files
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
* update wpt test expectations AGAIN
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
---------
Signed-off-by: Ville Lindholm <ville@lindholm.dev>
Add a new struct `LayoutBoxBase`, that will be used throughout the box
tree. The idea of this struct is that we have a place to consistently
store common layout information (style and node information) and also to
cache layout results such as content sizes (inline and maybe later box
sizes) and eventually layout results.
In addition to the addition of this struct,
`IndependentFormattingContext` is flattened slightly so that it directly
holds the contents of both replaced and non-replaced elements.
This is only added to independent formatting contexts, but will later be
added to all block containers as well.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
* Add prefs to limit threadpool sizes
Add preferences to control the size of threadpools,
so that we can easily reduce the amount of runtime
threads and test which pools benefit from more
threads.
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
* Add pref for Webrender threadpool
Add a preference to limit the size of the webrender threadpool.
Note: WebRender by default calls hooks which register the threads with
a profiler instance that the embedder can register with webrender.
Servo currently doesn't register such a profiler with webrender,
but in the future we might also want to profile the
webrender threadpool.
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
---------
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Most of the time here is spent blocking on the channel,
and after we received the message we already have a new span.
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Job will do some performance benchmarks (Dromeo, Speedometer) and mesure binary size and will report results to bencher.dev
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
Co-authored-by: DK Liao <dklassic@gmail.com>
Mach is currently failing bootstrap and building if the Python version
is greater than 3.12. This is because wpt does not support 3.13 yet.
This causes confusion for people running recent distros that ship 3.13
by default.
I changed the logic so that mach checks both the minimum and the maximum
supported versions of Python instead of just checking the minimum. It
will now also tell you which maximum version is supported.
I also updated the README.md to specify the supported Python versions
so that people don't accidentally install the wrong version.
Signed-off-by: Michael Mc Donnell <michael@mcdonnell.dk>
We were sizing absolutely positioned replaced elements within their
actual containing block instead of the inset-modified containing block.
Then the `stretch` keyword would result in a wrong size.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Before, `update_the_rendering()` would update all animations for all
Documents once per-Document. Apart from being generally wrong, the
specification says this should be done once per-Document. This
theoretically means that `update_the_rendering()` is just doing less
work every time it runs.
In addition:
- Don't redirty animations nodes when running rAF callbacks. They
should already be dirty when animations are updated.
- Perform a microtask checkpoint while updating animations as dictacted
by the specification.
- Update comments to reflect the specification text.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
* Add missing support for some alignment keywords on absolutely positioned elements
Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>
* Check the direction of the alignment container, nits, test expectations
In this case we need to check the direction of the static position
containing block, not the actual containing block:
```html
<!DOCTYPE html>
<div style="position: relative">
<div style="display: flex; flex-direction: column; width: 100px; height: 100px; border: solid; direction: rtl">
<div style="position: absolute; width: 20px; height: 20px; background: cyan; top: 20px; align-self: self-start"></div>
<div style="position: absolute; width: 20px; height: 20px; background: magenta; bottom: 20px; align-self: self-end"></div>
</div>
</div>
```
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
---------
Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
The lowest version we test servo on is macos 13.
This fixes some spurious compile errors on recent MacOS
versions, when compiling mozjs from source.
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
wptrunner internally derives the path to the MANIFEST.json file from the
`metadata_path` passed via `test_paths`. The current logic overrides
only the `metadata_path`, leaving the manifest_path pointing at the
wrong (non-legacy) layout's MANIFEST.json.
In #34436 we observed that the recent WPT imports create a transient
`.cache` diretory that wptrunner logic uses for optimization. This has
not been observed until #34436 because a [recent bump in MANIFEST.json's
schema version][1] triggered the creation of the cache. Because of the
above issue with incorrect path and the fact that we *first* trigger
`mach update-wpt` for legacy layout during WPT import, the MANIFEST.json
of non-legacy layout gets incorrectly migrated during the invocation of
`update-wpt` for legacy layout but the cache is still created under
legacy-layout's path as it is not based on `manifest_path`. The
subsequent invocation of `mach update-wpt` for non-legacy finds the
MANIFEST.json already migrated so the `.cache` directory is not
constucted.
This change simply replaces the whole object using the wptrunner's
`TestRoot` class constructor so that all derived paths are calculated
correctly. We also add the `.cache` folders to gitignore as it seems
like they are expected to be created during such version migrations.
[1]: https://github.com/web-platform-tests/wpt/pull/49406
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
* Obey min and max properties when computing main size of column flex
When laying out a column flex container with an auto preferred main size,
we were resolving the used main size to the intrinsic max-content size.
However, we weren't clamping this amount between the min and max sizes.
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
* Improve performance of flex column layouts by caching
We were already using a cache for layout_for_block_content_size(), but
we were only storing the intrinsic block size. Thus when laying out the
flex items for real, we would perform new layouts, triggering an
exponential complexity in case of nested flexboxes.
Now we cache the entire layout result so that we can avoid doing the
work again.
This improves the results of flexbox-deeply-nested-column-flow.html
(a Blink perf test) from ~40 runs/second to ~500 runs/second on my PC.
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
---------
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
When laying out a column flex container with an auto preferred main size,
we were resolving the used main size to the intrinsic max-content size.
However, we weren't clamping this amount between the min and max sizes.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* Don't falsely register Shadow Roots as connected
Previously, a shadowroot would be registered as connected
during the shadow hosts bind_to_tree call, even if the host
was being bound to an element that was not itself
connected to a document.
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Update WPT expectations
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Move bind/unbind methods into a VirtualMethod impl
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Add DocumentFragment/Shadowroot to vtable_for
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
---------
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
`AbsoluteAxisSolver::solve()` would compute, among other things, the
position of the absolute positioned element if it had start alignment.
Then, `AbsoluteAxisSolver::origin_for_alignment_or_justification()`
could optionally opt into modifying that alignment if needed.
This was quite convoluted and not easy to follow. It's simpler to not
compute the position in `AbsoluteAxisSolver::solve()`, and instead do it
always in `AbsoluteAxisSolver::origin_for_alignment_or_justification()`,
which I'm renaming to `AbsoluteAxisSolver::origin_for_margin_box()`
because it aligns the margin box of the abspos within its alignment
container.
Then the `Anchor` struct becomes useless and can be removed.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This avoids future crashes if new unknown parameters
are passed by the runtime to the app.
It does make it slightly more inconvenient for the user,
since they must use `=` and space at the right place now.
This will also be updated in the book accordingly
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Override the `onBackPress` callback, which by default
brings the application to the background and instead
tell servo to go back one page.
Users can invoke this by swiping from the left edge to the middle.
There is no equivalent callback / gesture to go forward.
In the default browser swiping from the right side to the middle
also invokes the goBack callback.
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
The containing block for the static position of an absolutely positioned
element in flex layout is established by the flex container. However, if
the flex container has static position, the actual containing block will
be established by another ancestor.
If the flex container and the containing block have different directions,
the static position needs especial handling when aligning the abspos.
We were already trying to do so with the `flip_anchor` flag, but there
were bugs.
Signed-off-by: Oriol Brufau <obrufau@igalia.com>