Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
b0f6aca
docs: lock Rust render-plan architecture
thejustinwalsh Aug 8, 2026
4cccea7
feat(text): validate render plan policies
thejustinwalsh Aug 8, 2026
808e5cf
feat(text): register fixed-layout render policies
thejustinwalsh Aug 8, 2026
1f41e42
feat(text): publish retained frame transactions
thejustinwalsh Aug 8, 2026
ea368b0
feat(text): return retired frame buffers
thejustinwalsh Aug 8, 2026
fa8c9b5
perf(text): select retained SIMD kernels
thejustinwalsh Aug 8, 2026
1c8afbd
perf(text): execute render policies in Rust
thejustinwalsh Aug 8, 2026
2ba5e19
feat(text): define retained render plan wire records
thejustinwalsh Aug 8, 2026
48c7312
feat(text): describe capability-shaped render policies
thejustinwalsh Aug 8, 2026
1c65789
feat(text): retain ordered render buffers
thejustinwalsh Aug 8, 2026
1d8a64a
feat(text): compile ordered render plans
thejustinwalsh Aug 8, 2026
a978808
feat(text): retain stable render slots
thejustinwalsh Aug 8, 2026
bbee927
feat(text): compile stable indirect plans
thejustinwalsh Aug 8, 2026
a4840d3
feat(text): compose mixed render plans
thejustinwalsh Aug 8, 2026
e2a037f
feat(text): publish session-owned render plans
thejustinwalsh Aug 8, 2026
7d566ed
fix(text): preserve render-plan fence invariants
thejustinwalsh Aug 8, 2026
5c4382a
feat(text): define semantic update records
thejustinwalsh Aug 8, 2026
7e16d0b
feat(text): retain frame text mutations in Rust
thejustinwalsh Aug 8, 2026
7fb0307
perf(text): initialize wasm engine eagerly
thejustinwalsh Aug 8, 2026
d2885ca
feat(text): register rust font stacks
thejustinwalsh Aug 8, 2026
0960247
feat(text): direct policy input sources
thejustinwalsh Aug 8, 2026
fa5bafe
feat(text): register font render bindings
thejustinwalsh Aug 8, 2026
4cd3164
feat(text): gather policy inputs in rust
thejustinwalsh Aug 8, 2026
b7a383e
perf(text): prewarm reusable shaping workspace
thejustinwalsh Aug 8, 2026
9941a41
feat(text): admit editorial frame geometry
thejustinwalsh Aug 8, 2026
cdd7fbc
feat(text): define retained style wire contract
thejustinwalsh Aug 8, 2026
32d72de
feat(text): retain rust style mutations
thejustinwalsh Aug 8, 2026
fde6aa8
feat(text): resolve rust style cascade
thejustinwalsh Aug 8, 2026
71416fb
feat(text): retain rust unicode analysis
thejustinwalsh Aug 8, 2026
5e9c80b
feat(text): retain rust shaping runs
thejustinwalsh Aug 8, 2026
59b980b
feat(text): shape retained rust runs
thejustinwalsh Aug 8, 2026
7b0de75
feat(text): resolve rust font fallback
thejustinwalsh Aug 8, 2026
b76f939
feat(text): retain rust line breaks
thejustinwalsh Aug 8, 2026
9639b55
feat(text): retain rust measured clusters
thejustinwalsh Aug 8, 2026
b367639
feat(text): add rust line composition kernel
thejustinwalsh Aug 8, 2026
4be6770
feat(text): retain rust flow geometry
thejustinwalsh Aug 8, 2026
88b041e
feat(text): resolve rust polygon bands
thejustinwalsh Aug 8, 2026
ecbee80
feat(text): compose rust flow regions
thejustinwalsh Aug 8, 2026
7e51474
feat(text): retain stable text identities
thejustinwalsh Aug 8, 2026
07e28a4
feat(text): index shaped glyphs by cluster
thejustinwalsh Aug 8, 2026
b3003dc
refactor(text): share exact identity index
thejustinwalsh Aug 8, 2026
a877a7c
feat(text): retain stable glyph identities
thejustinwalsh Aug 8, 2026
648158f
feat(text): emit positioned rust render plans
thejustinwalsh Aug 8, 2026
c347b44
perf(text): retain exact frame invalidation
thejustinwalsh Aug 8, 2026
3ea4812
perf(text): prove canonical raster policy shapes
thejustinwalsh Aug 8, 2026
8685571
perf(text): emit dependency-directed buffer patches
thejustinwalsh Aug 8, 2026
98d5143
perf(text): fast-path stable positioning order
thejustinwalsh Aug 8, 2026
1943ad8
perf(text): skip visual scratch for ltr layout
thejustinwalsh Aug 8, 2026
97144b8
perf(text): elide inactive policy work
thejustinwalsh Aug 8, 2026
d0f1e8a
feat(text): expose retained frame host
thejustinwalsh Aug 8, 2026
4920a7e
feat(text): compile first-party render contracts
thejustinwalsh Aug 9, 2026
ded8999
feat(text): compile retained frame requests
thejustinwalsh Aug 9, 2026
0855236
feat(text): separate shaping and render font identities
thejustinwalsh Aug 9, 2026
f18f53c
feat(text): own render engine in Three
thejustinwalsh Aug 9, 2026
84170bc
feat(text): read render plans in place
thejustinwalsh Aug 9, 2026
6c728be
feat(text): gather batched paragraph plans
thejustinwalsh Aug 9, 2026
a44e331
feat(text): key frame records by paragraph
thejustinwalsh Aug 9, 2026
07d2037
feat(text): declare ordered paragraph lifecycle
thejustinwalsh Aug 9, 2026
ece046d
refactor(text): separate paragraph engine state
thejustinwalsh Aug 9, 2026
a405c15
refactor(text): allocate plan identities per session
thejustinwalsh Aug 9, 2026
9caa9ce
feat(text): borrow paragraph record spans
thejustinwalsh Aug 9, 2026
1f1c743
refactor(text): centralize paragraph capacity
thejustinwalsh Aug 9, 2026
c75a3c9
refactor(text): unify paragraph transactions
thejustinwalsh Aug 9, 2026
0ca178a
feat(text): retain ordered paragraph sessions
thejustinwalsh Aug 9, 2026
8447a1a
fix(text): key draws by paragraph transform
thejustinwalsh Aug 9, 2026
43978ab
feat(text): resolve Three plan resources
thejustinwalsh Aug 9, 2026
b546498
feat(text): index renderer transforms in plans
thejustinwalsh Aug 9, 2026
dfb875e
feat(text): execute MSDF render plans
thejustinwalsh Aug 9, 2026
0d33605
feat(text): execute Slug render plans
thejustinwalsh Aug 9, 2026
d5142e3
feat(text): resolve Three material factories
thejustinwalsh Aug 9, 2026
fc54a45
perf(text): retain Three render plan resources
thejustinwalsh Aug 9, 2026
b04cd35
feat(text): execute policy-selected transforms
thejustinwalsh Aug 9, 2026
5963364
test(text): prove mixed transform policies
thejustinwalsh Aug 9, 2026
75b0657
feat(text): cut Three over to Rust plans
thejustinwalsh Aug 9, 2026
c2c24b1
feat(text): let Rust plan mixed techniques
thejustinwalsh Aug 9, 2026
ab51f6e
refactor(text): make material the renderer contract
thejustinwalsh Aug 9, 2026
c0aa460
feat(text): open Rust plans to raster plugins
thejustinwalsh Aug 9, 2026
ccf8958
feat(text): query Rust layout measurements
thejustinwalsh Aug 9, 2026
80ee3bc
feat(text): direct layout inspection through Rust plans
thejustinwalsh Aug 9, 2026
457a220
refactor(three): remove retired batch targets
thejustinwalsh Aug 9, 2026
e8a2de7
fix(benchmarks): assert Rust glyph workload
thejustinwalsh Aug 9, 2026
13a63b3
fix(text): grow command buffer publications
thejustinwalsh Aug 9, 2026
845d4f1
fix(text): recycle paragraph storage safely
thejustinwalsh Aug 9, 2026
7569164
fix(benchmarks): verify retained workload transitions
thejustinwalsh Aug 9, 2026
efdebb5
feat(text): specialize retained frame planning
thejustinwalsh Aug 9, 2026
f10c221
test(text): prove narrowed shaping boundaries
thejustinwalsh Aug 9, 2026
51580ac
feat(text): shape narrowed ellipsis boundaries
thejustinwalsh Aug 9, 2026
e10e37d
refactor(text): cost one dirty buffer at a time
thejustinwalsh Aug 9, 2026
a446567
perf(text): plan dirty ranges per buffer
thejustinwalsh Aug 9, 2026
01cb67e
perf(text): coalesce stable order uploads
thejustinwalsh Aug 9, 2026
d9b4644
docs(text): plan paragraph-scoped queries
thejustinwalsh Aug 9, 2026
80096e9
refactor(text): remove legacy layout path
thejustinwalsh Aug 9, 2026
d447bd3
bench(text): separate external frame timing
thejustinwalsh Aug 9, 2026
48f075c
test(text): align layout contract with f32 ABI
thejustinwalsh Aug 9, 2026
a11016f
refactor(text): harden published runtime boundary
thejustinwalsh Aug 9, 2026
73b89f2
feat(text): add r3f hello world example
thejustinwalsh Aug 9, 2026
ad0795a
chore(size): restore complete baker reports
thejustinwalsh Aug 9, 2026
95c3b33
feat(text): add narrow paragraph edits
thejustinwalsh Aug 9, 2026
2e265f6
perf(text): retain unaffected shaping runs
thejustinwalsh Aug 9, 2026
65081e2
perf(text): avoid warm shape plan allocations
thejustinwalsh Aug 9, 2026
20c9dce
perf(text): stop layout at converged lines
thejustinwalsh Aug 9, 2026
9eda67e
perf(text): retain synchronized edit buffers
thejustinwalsh Aug 9, 2026
402ae44
perf(text): narrow revision assignment
thejustinwalsh Aug 9, 2026
bd773c1
perf(text): retain unaffected clusters
thejustinwalsh Aug 9, 2026
03293e5
perf(text): converge narrow text edits
thejustinwalsh Aug 9, 2026
05ff680
perf(text): retain gathered policy inputs
thejustinwalsh Aug 9, 2026
b19c664
perf(text): retain ordered plan topology
thejustinwalsh Aug 9, 2026
f0fad23
test(text): benchmark localized splices
thejustinwalsh Aug 9, 2026
8dcc44b
refactor(text): remove legacy raster packing paths
thejustinwalsh Aug 10, 2026
ced3f7b
fix(text): preserve exact render policy semantics
thejustinwalsh Aug 10, 2026
355f9ea
feat(text): realize stable indirect plans in three
thejustinwalsh Aug 10, 2026
7e46e70
docs(text): record render plan cutover evidence
thejustinwalsh Aug 10, 2026
a417a08
perf(text): share plan emission and bound stable scans
thejustinwalsh Aug 10, 2026
caf5d09
refactor(text): port external raster to rust plans
thejustinwalsh Aug 10, 2026
356b035
test(text): serialize shared artifact gates
thejustinwalsh Aug 10, 2026
059b626
perf(text): skip redundant policy discovery
thejustinwalsh Aug 10, 2026
4405444
fix(text): make plan application retry-safe
thejustinwalsh Aug 10, 2026
2a0fd08
test(text): prove mixed fallback live
thejustinwalsh Aug 10, 2026
fe0df0d
refactor(text): share planner invariants
thejustinwalsh Aug 10, 2026
8eddc11
docs(text): refresh foundation evidence
thejustinwalsh Aug 10, 2026
0025e42
fix(text): retain pending render uploads
thejustinwalsh Aug 10, 2026
cd051d6
test(text): restore boundary evidence
thejustinwalsh Aug 10, 2026
0e2ee2b
bench(text): pin migration comparison
thejustinwalsh Aug 10, 2026
418cb3e
docs(text): refresh final size evidence
thejustinwalsh Aug 10, 2026
3a23756
fix(text): mirror WebGL plan updates
thejustinwalsh Aug 10, 2026
f868035
docs(text): close render-plan foundation
thejustinwalsh Aug 10, 2026
592c487
fix(ci): execute size adapter through shell
thejustinwalsh Aug 10, 2026
e4acbee
fix(ci): provision example subsetter
thejustinwalsh Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 42 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,50 @@ on:

permissions:
contents: read
# GitHub models issue/PR comments as pull-request metadata. This permits the
# size reporter to update its PR comment; it cannot write repository content.
pull-requests: write

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
size:
name: Package size report
if: github.event_name == 'pull_request'
runs-on: ubuntu-24.04
timeout-minutes: 20
env:
CI: true

steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Install canonical toolchain
uses: jdx/mise-action@9e7f7633ff6f6d6048a9418a68d48f288f50eb14 # v4.2.3
with:
version: 2026.7.13
cache: true

- name: Install locked dependencies
run: pnpm install --frozen-lockfile

- name: Compare package delivery sizes with the PR base
uses: andresz1/size-limit-action@94bc357df29c36c8f8d50ea497c3e225c3c95d1d # v1.8.0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
build_script: build
skip_step: install
package_manager: pnpm
# The action runs this command in both revisions. The inline adapter
# accepts the base branch's older report, derives the same core total,
# and emits Size Limit's stable [{ name, size }] protocol.
script: >-
sh -c "node apps/benchmarks/scripts/measure-package-sizes.mts |
node -e \"let input='';process.stdin.on('data',chunk=>input+=chunk).on('end',()=>{const report=JSON.parse(input);const entries=report.entries.filter(entry=>entry.status==='measured');const byId=new Map(entries.map(entry=>[entry.id,entry]));if(!byId.has('renderer-neutral-core-total')){const js=byId.get('browser-core');const wasm=byId.get('text-shaper-wasm');if(js&&wasm)byId.set('renderer-neutral-core-total',{id:'renderer-neutral-core-total',format:'aggregate',gzipBytes:js.gzipBytes+wasm.gzipBytes,brotliBytes:js.brotliBytes+wasm.brotliBytes})}const tracked=/^(browser-core|text-shaper-wasm|renderer-neutral-core-total|three-runtime-js|three-renderer-total|font-(inter|icons)-|delivery-three-)/;const rows=[...byId.values()].filter(entry=>tracked.test(entry.id)).flatMap(entry=>entry.format==='javascript'?[{name:entry.id+' (brotli)',size:entry.brotliBytes}]:entry.format==='aggregate'?[{name:entry.id+' (gzip)',size:entry.gzipBytes},{name:entry.id+' (brotli)',size:entry.brotliBytes}]:[{name:entry.id+' (raw)',size:entry.rawBytes},{name:entry.id+' (gzip)',size:entry.gzipBytes},{name:entry.id+' (brotli)',size:entry.brotliBytes}]);process.stdout.write(JSON.stringify(rows))})\""

check:
name: Check
runs-on: ubuntu-24.04
Expand Down Expand Up @@ -44,7 +82,10 @@ jobs:
run: pnpm install --frozen-lockfile

- name: Provision authenticated HarfBuzz utilities
run: pnpm scripts run fixture:harfbuzz:provision
run: |
pnpm scripts run fixture:harfbuzz:provision
mise -C apps/benchmarks exec -- node ./scripts/provision-harfbuzz.mts --version=14.2.0
printf '%s\n' "$GITHUB_WORKSPACE/apps/benchmarks/.cache/harfbuzz/14.2.0/build/util" >> "$GITHUB_PATH"

- name: Select rolling runner Chromium
shell: bash
Expand Down
12 changes: 6 additions & 6 deletions apps/benchmarks/fixtures/contracts/paragraph-bidi-layout-v0.json
Original file line number Diff line number Diff line change
Expand Up @@ -570,9 +570,9 @@
-1.4118552207946777, -1.4118552207946777, -1.4118552207946777, -1.4118552207946777,
-1.4118552207946777, -1.4118552207946777, -1.4118552207946777, -1.4118552207946777,
-1.4118552207946777, -1.4118552207946777, -1.4118552207946777, -1.4118552207946777,
-1.4118552207946777, -1.4118552207946777, -39.54185104370117, -39.54185104370117,
-39.54185104370117, -39.54185104370117, -39.54185104370117, -39.54185104370117,
-39.54185104370117, -39.54185104370117, -39.54185104370117
-1.4118552207946777, -1.4118552207946777, -39.5418586730957, -39.5418586730957,
-39.5418586730957, -39.5418586730957, -39.5418586730957, -39.5418586730957,
-39.5418586730957, -39.5418586730957, -39.5418586730957
],
"layout": {
"measurement": {
Expand All @@ -581,10 +581,10 @@
"contentWidth": 345.40478515625,
"contentHeight": 114.39000000000001,
"firstBaseline": 30.341856002807617,
"lastBaseline": 106.60185241699219,
"lastBaseline": 106.60186004638672,
"overflowed": false
},
"hash": "c1a7730c",
"hash": "64cd57ec",
"glyphIds": [
790, 647, 647, 689, 586, 614, 1777, 2, 456, 2, 411, 2, 384, 1777, 586, 507, 647, 618,
1777, 1462, 1777, 647, 647, 689, 1501, 1777, 727, 614, 852, 773, 689, 773, 658, 1501,
Expand Down Expand Up @@ -612,7 +612,7 @@
"lineTextEnds": [22, 47, 56],
"lineGlyphStarts": [0, 21, 46],
"lineGlyphCounts": [21, 25, 9],
"lineBaselines": [30.341856002807617, 68.47185516357422, 106.60185241699219],
"lineBaselines": [30.341856002807617, 68.47185516357422, 106.60186004638672],
"lineAdvances": [329.556640625, 345.40478515625, 146.17529296875]
}
}
Expand Down
Binary file not shown.
101 changes: 0 additions & 101 deletions apps/benchmarks/fixtures/results/cjk-universality-chromium149.json

This file was deleted.

This file was deleted.

59 changes: 0 additions & 59 deletions apps/benchmarks/fixtures/results/paragraph-layout-chromium149.json

This file was deleted.

This file was deleted.

Loading
Loading