Skip to content

CSS cases for the css-fix features, and css-fix against main - #1

Open
skyturkish wants to merge 4 commits into
mainfrom
css-fix
Open

skyturkish wants to merge 4 commits into
mainfrom
css-fix

Conversation

@skyturkish

Copy link
Copy Markdown

Adds desktop cases for the features geastack/core#59 brings, and records a full run of css-fix against main.

New cases (css/shared/catalog.json, 30 cases in all):

  • border-image-24
  • blend-mode-24 and blend-modes-15
  • multicol-3
  • line-clamp-24
  • box-shadow-24
  • text-emphasis-24
  • sticky-scroll-96 and sticky-sections-96
  • rounded-update-96
  • wrapped-text-update-24

Results:

  • Report in css/results/, with the raw harness records, linked from css/README.md.
  • The run covers two timing runs, --verify-only, --instrumented, --minimal and check-feature-profiles.mjs, on the compiler 1.0.29 stack this repo locks.
  • Over all 30 cases css-fix takes 9243 µs per frame, against 17218 µs on main (−46%).
  • css-fix is slower only in the 3 cases where it draws something main does not implement (background-blend-mode ×2, multi-column layout).
  • With feature stripping, a box-only app is 3% and 13% faster on css-fix. But its node grows from 72 to 104 bytes, because the analyzer and CLI do not map css-fix's eight new feature families yet.
  • No board run: no hardware was attached.

🤖 Generated with Claude Code

The CSS comparison had no scene for the features of geastack/core#59,
so a change to them could only say "same" by never running them.
Eleven cases, each sized like the existing list scenes:

- border-image-24, blend-mode-24, multicol-3, line-clamp-24,
  box-shadow-24 and text-emphasis-24: 24 rows (12 for multicol) of the
  feature; row 0 (the column container in multicol-3) toggles a class
  every frame.
- blend-modes-15: all 15 background-blend-mode values over a
  translucent gradient stop, row 0 toggling a class every frame.
- sticky-scroll-96: scroll-96 with a position: sticky header, so the
  difference to scroll-96 is what sticky costs the scroll fast path.
- sticky-sections-96: 32 sections of three rows, each headed by a
  position: sticky; top: 0 header, scrolling back and forth between 0
  and 160 px, 5 px a frame. Near the top of that range the next section
  pushes the first header out, so the case reaches what a single header
  never does: headers pushed and let go, and many sticky boxes in one
  scrollport.
- rounded-update-96: 96 rows under border-radius: 24px and
  overflow: hidden with rows 0 and 12 changing class every frame. It
  reaches the simple dirty-region replay under a full-screen rounded
  clip, which rounded-scroll (scroll frames only) never does.
- wrapped-text-update-24: 24 wrapped paragraphs whose text alternates
  every frame between a short and a long version that share their first
  16 bytes, ending on the long one. text-update only changes single-line
  nowrap labels; this case measures re-wrapping on text updates, and
  with a rasterized font it reaches the line-break cache under the key
  a css-fix bug lived in. The desktop suite registers no font asset, so
  there it paints through the bitmap path.

Each case's check requires its update or scroll to happen. Main lacks
most of these features, so those cases DIFF there by design;
box-shadow-24 and wrapped-text-update-24 draw the same on both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
geastack/core#59 (css-fix, rebased on main) against main dae2333 on all
30 desktop cases, with the compiler 1.0.29 stack this repository locks:
two timing runs, --verify-only, --instrumented, --minimal and the
feature-profile size check. css/results/ holds the report and the raw
harness records; css/README.md links them, and prettier skips the
directory like the node results.

css-fix takes 9243 us per frame over all cases against 17218 us on
main. It is slower only where it draws a feature main lacks
(background-blend-mode, multi-column layout). With feature stripping a
box-only app is faster on css-fix, but its node grows from 72 to 104
bytes until the analyzer and CLI map css-fix's eight new families.

Paths in the raw records are relative to the workspace root.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
skyturkish and others added 2 commits October 21, 2026 12:51
…nline static positions

No scene reached the paths that core 7e73032 and 79cf109 change, so
their comparisons could only say "same" by never running them. Three
cases, each 24 rows like the existing list scenes:

- border-area-24: border-image-24 with a transparent 4px border, a
  linear-gradient background and background-clip: border-area; each row
  records the layer once per border side, and the selected class
  toggles every frame.
- transformed-clip-24: rounded overflow: hidden rows, even rows under
  rotate(180deg) (whose 410x40 border box passed the shaped clip's save
  budget unless only the corners are saved), odd rows under
  translate(3px, 0); the child that fills each row changes colour every
  frame. Its own .fill.selected rule keeps the toggle visible over the
  fixture's .selected.
- inline-abspos-24: block rows of inline content whose label changes
  every frame, so every row lays out again. Each starts with a
  contentless position: relative span holding an absolute dot, placed in
  the padding beside the text, and holds a span split by an empty block
  whose block-level absolute badge takes its static position on the
  next line; odd rows are direction: rtl, where that is the right edge.
  The rows are plain blocks: .row's flex-direction would make the
  engine stack them as flex columns and miss the inline paths.

All three are DIFF against bases without those commits, by design.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vertical-text-24: 24 boxes 116px tall in a wrapping flex band, alternately
writing-mode: vertical-rl and vertical-lr, with every fourth one
direction: rtl. Each holds "row NNN " and a span whose label switches
between "tail" and "a longer tail" every frame. Every box therefore lays
its lines out again as columns, and the label wraps into a second column.
No existing scene uses a vertical writing mode, so none reached core's
vertical flows or the turned-glyph drawer.

It is DIFF against bases without vertical flows, by design: they ignore
the writing mode and draw one horizontal line per box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant