nikolaszimmermann / WebKitIgalia

4 stars 0 forks source link

Add all missing features to LBSE #2

Open nikolaszimmermann opened 2 years ago

nikolaszimmermann commented 2 years ago

LBSE Implementation progress

- last update: 2022-11-19-

Issue #1 tracks the upstreaming status (which patches where landed when, etc.). This issue provides a high-level overview about the missing features and how/when to tackle them (see links to dependent issues for details).

Near-term TODO list

Ordered by priority, as currently planned.

  1. Keep on working to fix all layout tests in LBSE (always top-prio besides finishing the rest of the feature work)

  2. Implement gradients / patterns

  3. Implement clipping without any temporary image buffers

Keep basic shape clipping (fastest method under certain conditions), and move from temporary image buffer for advanced clip shapes to porter-duff operations, that do not involve the management of temporary ImageBuffers in SVG painting code -- aligned with CSS.

  1. Implement masking

Straight-forward after clipping.

  1. Implement markers

A bit involved due to the involved coordinate system transformations, but all done in LBSE downstream, so big problems left to solve.

  1. Implement filters

The SVG filter code will go away completely, replaced by a SVG-aware RenderLayerFilters version. Probably requires some iterations, due to the way I modified RenderLayerFilters/RenderLayerBacking. But at least it could be demonstrated that all SVG filter features can be mapped to that approach (in LBSE downstream).

  1. Finish & polish

Mid-term TODO list

  1. Reduce RenderLayer overhead

Find ways to not construct layers for all SVG renderers, e.g. a group without any transformed child, won't need layers-per-child, unless... they are masked themselves, filtered, etc... (figure out the complete list of conditions and implement that optimization)

--> This will be a perpetual task in LBSE.

  1. Bring MotionMark SVG performance on same level as the legacy engine.

It is possible -- the LBSE PoC from Sep '21 was on the same level as the legacy engine within a few percent, much faster on some tests. All kind of tests that do NOT profit from e.g. harware-accelerated CSS animations, see the RenderLayer overhead. This needs to be minimized -- we don't ship performance regressions.

Long-term TODO list

  1. Ship LBSE & enable LBSE by default!