[webkit-changes] [WebKit/WebKit] 1fc3d9: [IFC] Update TextBreakingPositionCache to use Whit...

Yulun Wu noreply at github.com
Mon Jan 20 06:11:27 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 1fc3d9918294db0be3dda280ef838328b0e59c0b
      https://github.com/WebKit/WebKit/commit/1fc3d9918294db0be3dda280ef838328b0e59c0b
  Author: Yulun Wu <yulun_wu at apple.com>
  Date:   2025-01-20 (Mon, 20 Jan 2025)

  Changed paths:
    A LayoutTests/fast/text/whitespace/whitespace-trailing-trim-expected.txt
    A LayoutTests/fast/text/whitespace/whitespace-trailing-trim.html
    M Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionCache.cpp
    M Source/WebCore/layout/formattingContexts/inline/text/TextBreakingPositionContext.h

  Log Message:
  -----------
  [IFC] Update TextBreakingPositionCache to use WhiteSpaceCollapse.
https://bugs.webkit.org/show_bug.cgi?id=285551
<rdar://141021052>

Reviewed by Alan Baradlay.

This change fixes a bug where TextBreakingPositionContext was tracking validity of
text breaking positions by checking whether RenderStyle::WhiteSpace changed between
the calculation and fetching cached breaking points. This causes issues where setting
TextWrapMode implicitly changes how white space collapses but RenderText's
RenderStyle is not correctly updated, causing TextBreakingPositionCache to
use stale breaking positions.

This is because there are combinations of textWrapMode() and whiteSpaceCollapse()
that are not supported by the whiteSpace() shorthand, causing combinations that
cannot be represented by the whiteSpace() syntax to be incorrectly classified as
WhiteSpace::Normal. Changing layout contexts between unsupported combinations
causes incorrect usage of cached layouts.

The correct way to avoid this is to hash on the longhand RenderStyle::WhiteSpaceCollapse.

https://github.com/WebKit/WebKit/blob/e41eca63e27004fb0b1e0a5a3e90e00b134a6d7f/Source/WebCore/rendering/style/RenderStyle.cpp#L2850-L2872

A follow up CL will be sent out to remove RenderStyle()::whiteSpace() from WebCore.

This PR also adds WhiteSpaceCollapseBehavior that groups WhiteSpaceCollapse
types that have the same text breaking positions. This lets us avoid
recalculating breaking points when switching between these
WhiteSpaceCollapse types that would have identical breaking points.

https://drafts.csswg.org/css-text-4/#white-space-collapsing

https://commits.webkit.org/265267@main
https://commits.webkit.org/269613@main

Canonical link: https://commits.webkit.org/289150@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list