servo/components/layout
Martin Robinson abad89a49c
fonts: Make FontKey and FontInstanceKey generation asynchronous (#33600)
Instead of a blocking a layout thread on the generation of WebRender
`FontKey`s and `FontInstanceKey`s, generate the keys ahead of time and
send the font data to WebRender asynchronously. This has the benefit of
allowing use of the font much more quickly in layout, though blocking
display list sending itself on the font data upload.

In order to make this work for web fonts, `FontContext` now asks the
`SystemFontService` for a `FontKey`s and `FontInstanceKey`s for new web
fonts. This should happen much more quickly as the `SystemFontService`
is only blocking in order to load system fonts into memory now. In
practice this still drops layout thread blocking to fractions of a
millisecond instead of multiple milliseconds as before.

In addition, ensure that we don't send font data or generate keys for
fonts that are used in layout but never added to display lists. This
should help to reduce memory usage and increase performance.

Performance of this change was verified by putting a microbenchmark
around `FontContext::create_font` which is what triggered font key
generation.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2024-10-01 15:31:26 +00:00
..
display_list Add HTMLCanvasDataSource::Empty that represent transparent black instead of HTMLCanvasDataSource::Image(None) (#33519) 2024-09-22 14:04:53 +00:00
block.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
Cargo.toml Add rust-version to all Cargo.toml files (#33483) 2024-09-17 16:39:07 +00:00
construct.rs fonts: Make FontContext thread-safe and share it per-Layout (#32205) 2024-05-02 10:34:10 +00:00
context.rs fonts: Simplify FontContext in two ways that affect the unit test (#33541) 2024-09-25 20:15:47 +00:00
data.rs script: Split style and layout data in DOM nodes (#31985) 2024-04-04 07:56:51 +00:00
flex.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
floats.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
flow.rs clippy: Fix warnings in shared and config, fonts, layout, and layout_2020 components (#32674) 2024-07-04 14:18:58 +00:00
flow_list.rs Lint layout_2013 with clippy (#31221) 2024-01-30 11:46:35 +00:00
flow_ref.rs Address issues uncovered by rust-1.78 beta (#32130) 2024-04-22 18:20:47 +00:00
fragment.rs Add HTMLCanvasDataSource::Empty that represent transparent black instead of HTMLCanvasDataSource::Image(None) (#33519) 2024-09-22 14:04:53 +00:00
generated_content.rs Replace lazy_static crate with std::sync::LazyLock in layout and config (#33065) 2024-08-15 16:28:04 +00:00
incremental.rs Strict import formatting (grouping and granularity) (#30325) 2023-09-11 19:16:54 +00:00
inline.rs fonts: Simplify FontContext in two ways that affect the unit test (#33541) 2024-09-25 20:15:47 +00:00
layout_debug.rs clippy: Fix warnings in shared and config, fonts, layout, and layout_2020 components (#32674) 2024-07-04 14:18:58 +00:00
lib.rs layout: Add support for white-space-collapse: break-spaces (#32388) 2024-05-30 05:33:07 +00:00
linked_list.rs Update MPL license to https (part 4) 2018-11-19 14:47:27 +01:00
list_item.rs fonts: Make FontContext thread-safe and share it per-Layout (#32205) 2024-05-02 10:34:10 +00:00
model.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
multicol.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
parallel.rs clippy: Fix warnings in components/layout (#31612) 2024-03-11 10:24:36 +00:00
persistent_list.rs Lint layout_2013 with clippy (#31221) 2024-01-30 11:46:35 +00:00
query.rs Layout: Implement innerText/outerText (#33312) 2024-09-24 09:45:33 +00:00
sequential.rs dependencies: Upgrade to WebRender 0.64 (#31486) 2024-03-14 17:40:54 +00:00
table.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
table_caption.rs Move non-gfx things out of gfx_traits and create a base crate (#32296) 2024-05-17 12:28:58 +00:00
table_cell.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
table_colgroup.rs Strict import formatting (grouping and granularity) (#30325) 2023-09-11 19:16:54 +00:00
table_row.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
table_rowgroup.rs Move non-gfx things out of gfx_traits and create a base crate (#32296) 2024-05-17 12:28:58 +00:00
table_wrapper.rs Enable min-content, max-content, fit-content and stretch (#33492) 2024-09-20 14:48:27 +00:00
text.rs fonts: Make FontKey and FontInstanceKey generation asynchronous (#33600) 2024-10-01 15:31:26 +00:00
text_run.rs fonts: Make FontKey and FontInstanceKey generation asynchronous (#33600) 2024-10-01 15:31:26 +00:00
traversal.rs Replace .map_or(false with Option::is_some_and (#33468) 2024-09-16 10:03:52 +00:00
wrapper.rs Upgrade stylo to 2024-05-15 (#32334) 2024-05-27 15:24:34 +00:00