Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
51 changes: 29 additions & 22 deletions .github/workflows/ci-pull.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,16 @@
# ci:slow:particle particle_render gcc clang tsan
# ci:slow:zero-alloc zero_alloc asan tsan
# ci:slow:ecs-stress ecs_stress asan tsan
# ci:slow:bench-50k laige_bench_render_50k_fpx16 / _fp32 gcc clang
# ci:slow:bench-50k laige_bench_render_50k_fpx16 / _fp32 and
# laige_bench_ac4_fpx16 / _fp32 (M2-AC-01) gcc clang
#
# Evidence (run 38312355303, per-entry times in s, threshold 30 s):
# laige_bench_render_50k_fpx16 gcc 577.05 clang 578.42
# laige_bench_render_50k_fp32 gcc 593.82 clang 566.52
# laige_bench_ac4_fpx16 / _fp32 NEW in M2-AC-01 — estimated ~60 s
# from the render-50k evidence (577 s over 4000 frames of 116k
# quads vs the ac4 frame's 10k quads); first-run times replace this
# estimate in the header once the entry has a master-run measurement
# laige-sim_tests gcc 59.97 clang 53.79 asan 124.03 tsan 159.52
# laige-render_tests gcc 53.83 clang 44.45 asan 43.20 tsan 60.41
# particle_render gcc 38.76 clang 34.67 asan 28.84 tsan 39.56
Expand Down Expand Up @@ -148,7 +153,7 @@ jobs:
# gated run.
run: |
ctest --test-dir build --output-on-failure \
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32)$'
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32|laige_bench_ac4_fpx16|laige_bench_ac4_fp32)$'

linux-clang:
name: Linux x64 (clang++)
Expand Down Expand Up @@ -182,7 +187,7 @@ jobs:
# gated run.
run: |
ctest --test-dir build --output-on-failure \
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32)$'
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32|laige_bench_ac4_fpx16|laige_bench_ac4_fp32)$'

linux-asan:
name: Linux x64 ASan+UBSan (clang++)
Expand Down Expand Up @@ -352,11 +357,11 @@ jobs:
run: ctest --test-dir build --output-on-failure -R '^particle_render$'

linux-gcc-bench-fpx16:
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fpx16"
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fpx16 + laige_bench_ac4_fpx16"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (577.05 s in the evidence
# run) plus runner variance. The pre-split 45-min exception minus
# the rest of the suite.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner
# variance. The pre-split 45-min exception minus the rest of the suite.
timeout-minutes: 30
if: contains(github.event.pull_request.labels.*.name, 'ci:slow:bench-50k')
steps:
Expand All @@ -373,14 +378,14 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fpx16)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fpx16$'
- name: "Test (slow bench: render-50k + ac4, fpx16)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fpx16|laige_bench_ac4_fpx16)$'

linux-gcc-bench-fp32:
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fp32"
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fp32 + laige_bench_ac4_fp32"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (593.82 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: contains(github.event.pull_request.labels.*.name, 'ci:slow:bench-50k')
steps:
Expand All @@ -397,8 +402,8 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fp32)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fp32$'
- name: "Test (slow bench: render-50k + ac4, fp32)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fp32|laige_bench_ac4_fp32)$'

linux-clang-sim:
name: "Linux x64 (clang++) slow: laige-sim_tests"
Expand Down Expand Up @@ -473,10 +478,10 @@ jobs:
run: ctest --test-dir build --output-on-failure -R '^particle_render$'

linux-clang-bench-fpx16:
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fpx16"
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fpx16 + laige_bench_ac4_fpx16"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (578.42 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: contains(github.event.pull_request.labels.*.name, 'ci:slow:bench-50k')
steps:
Expand All @@ -493,14 +498,14 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fpx16)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fpx16$'
- name: "Test (slow bench: render-50k + ac4, fpx16)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fpx16|laige_bench_ac4_fpx16)$'

linux-clang-bench-fp32:
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fp32"
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fp32 + laige_bench_ac4_fp32"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (566.52 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: contains(github.event.pull_request.labels.*.name, 'ci:slow:bench-50k')
steps:
Expand All @@ -517,8 +522,8 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fp32)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fp32$'
- name: "Test (slow bench: render-50k + ac4, fp32)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fp32|laige_bench_ac4_fp32)$'

linux-asan-sim:
name: "Linux x64 ASan+UBSan (clang++) slow: laige-sim_tests"
Expand Down Expand Up @@ -790,8 +795,10 @@ jobs:
golden-references:
name: Golden references (label-gated, ubuntu-24.04, g++, llvmpipe)
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + two 1280x720 software-GL renders + font
# rasterization, plus runner variance.
# 30: build (~1.5 min) + four 1280x720 software-GL renders (the
# sprite + UI fixtures, and the two M2-AC-01 ac4 fixtures — two
# passes each, small scenes) + font rasterization, plus runner
# variance.
timeout-minutes: 30
if: contains(github.event.pull_request.labels.*.name, 'ci:golden-update')
steps:
Expand Down
54 changes: 31 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,18 @@
# slow-zero-alloc / ci:slow:zero-alloc zero_alloc asan tsan
# slow-ecs-stress / ci:slow:ecs-stress ecs_stress asan tsan
# slow-bench-50k / ci:slow:bench-50k laige_bench_render_50k_fpx16,
# laige_bench_render_50k_fp32 gcc clang
# laige_bench_render_50k_fp32,
# laige_bench_ac4_fpx16,
# laige_bench_ac4_fp32 (M2-AC-01) gcc clang
#
# Evidence (run 38312355303, per-entry times in s, threshold 30 s):
# laige_bench_render_50k_fpx16 gcc 577.05 clang 578.42
# laige_bench_render_50k_fp32 gcc 593.82 clang 566.52
# laige_bench_ac4_fpx16 / _fp32 NEW in M2-AC-01 — estimated ~60 s
# from the render-50k evidence (577 s over 4000 frames of 116k
# quads vs the ac4 frame's 10k quads); first-run times replace
# this estimate in the header once the entry has a master-run
# measurement
# laige-sim_tests gcc 59.97 clang 53.79 asan 124.03 tsan 159.52
# laige-render_tests gcc 53.83 clang 44.45 asan 43.20 tsan 60.41
# particle_render gcc 38.76 clang 34.67 asan 28.84 tsan 39.56
Expand Down Expand Up @@ -184,8 +191,9 @@
# (laige_bench_sim_tick_smoke): it exercises the workload and asserts
# its bit-identical fpx16_16 final_hash on every platform, without
# checking timing. The render-50k budget entries
# (laige_bench_render_50k_fpx16 / _fp32) are the SLOW bench jobs above —
# reference-platform-scoped, gated by ci:slow:bench-50k / the
# (laige_bench_render_50k_fpx16 / _fp32) and the AC-4 budget entries
# (laige_bench_ac4_fpx16 / _fp32, M2-AC-01) are the SLOW bench jobs
# above — reference-platform-scoped, gated by ci:slow:bench-50k / the
# slow-bench-50k checkbox, and run at every milestone gate (AGENTS.md
# §5).
#
Expand Down Expand Up @@ -223,7 +231,7 @@ on:
type: boolean
default: false
slow-bench-50k:
description: "Run the slow laige_bench_render_50k jobs (gcc, clang)"
description: "Run the slow bench jobs (laige_bench_render_50k + laige_bench_ac4, gcc, clang)"
type: boolean
default: false

Expand Down Expand Up @@ -271,7 +279,7 @@ jobs:
# gated run.
run: |
ctest --test-dir build --output-on-failure \
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32)$'
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32|laige_bench_ac4_fpx16|laige_bench_ac4_fp32)$'

linux-clang:
name: Linux x64 (clang++)
Expand Down Expand Up @@ -306,7 +314,7 @@ jobs:
# gated run.
run: |
ctest --test-dir build --output-on-failure \
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32)$'
-E '^(laige-sim_tests|laige-render_tests|particle_render|laige_bench_render_50k_fpx16|laige_bench_render_50k_fp32|laige_bench_ac4_fpx16|laige_bench_ac4_fp32)$'

linux-asan:
name: Linux x64 ASan+UBSan (clang++)
Expand Down Expand Up @@ -505,11 +513,11 @@ jobs:
run: ctest --test-dir build --output-on-failure -R '^particle_render$'

linux-gcc-bench-fpx16:
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fpx16"
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fpx16 + laige_bench_ac4_fpx16"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (577.05 s in the evidence
# run) plus runner variance. The pre-split 45-min exception minus
# the rest of the suite.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner
# variance. The pre-split 45-min exception minus the rest of the suite.
timeout-minutes: 30
if: github.event.inputs.slow-bench-50k == 'true'
steps:
Expand All @@ -526,14 +534,14 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fpx16)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fpx16$'
- name: "Test (slow bench: render-50k + ac4, fpx16)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fpx16|laige_bench_ac4_fpx16)$'

linux-gcc-bench-fp32:
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fp32"
name: "Linux x64 (g++) slow bench: laige_bench_render_50k_fp32 + laige_bench_ac4_fp32"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (593.82 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: github.event.inputs.slow-bench-50k == 'true'
steps:
Expand All @@ -550,8 +558,8 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=g++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fp32)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fp32$'
- name: "Test (slow bench: render-50k + ac4, fp32)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fp32|laige_bench_ac4_fp32)$'

linux-clang-sim:
name: "Linux x64 (clang++) slow: laige-sim_tests"
Expand Down Expand Up @@ -626,10 +634,10 @@ jobs:
run: ctest --test-dir build --output-on-failure -R '^particle_render$'

linux-clang-bench-fpx16:
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fpx16"
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fpx16 + laige_bench_ac4_fpx16"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (578.42 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: github.event.inputs.slow-bench-50k == 'true'
steps:
Expand All @@ -646,14 +654,14 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fpx16)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fpx16$'
- name: "Test (slow bench: render-50k + ac4, fpx16)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fpx16|laige_bench_ac4_fpx16)$'

linux-clang-bench-fp32:
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fp32"
name: "Linux x64 (clang++) slow bench: laige_bench_render_50k_fp32 + laige_bench_ac4_fp32"
runs-on: ubuntu-24.04
# 30: build (~1.5 min) + the render-50k bench (566.52 s in the evidence
# run) plus runner variance.
# run) + the ac4 bench (estimated ~60 s, M2-AC-01) plus runner variance.
timeout-minutes: 30
if: github.event.inputs.slow-bench-50k == 'true'
steps:
Expand All @@ -670,8 +678,8 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++
- name: Build
run: cmake --build build -j
- name: "Test (slow bench: laige_bench_render_50k_fp32)"
run: ctest --test-dir build --output-on-failure -R '^laige_bench_render_50k_fp32$'
- name: "Test (slow bench: render-50k + ac4, fp32)"
run: ctest --test-dir build --output-on-failure -R '^(laige_bench_render_50k_fp32|laige_bench_ac4_fp32)$'

linux-asan-sim:
name: "Linux x64 ASan+UBSan (clang++) slow: laige-sim_tests"
Expand Down
8 changes: 8 additions & 0 deletions budgets.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,14 @@
"measured": 60.4450,
"workload": "50k visible sprites (worst-case isometric overlap), 3 parallax layers, UI (PRD 8.1)"
},
{
"name": "sprites_10k_frame",
"metric": "mean",
"unit": "ms",
"target": 16.7,
"measured": 12.1453,
"workload": "10 000 overlapping sprites (100 x 10 grid, 10 stacked per cell), whole frame sorted + drawn offscreen at 60 FPS (M2-AC-01 AC-4.3, PRD 4)"
},
{
"name": "iso_depthkey_rebuild",
"metric": "mean",
Expand Down
Loading
Loading