Skip to content

docs(readme): fix broken examples, correct counts, surface missing features #576

docs(readme): fix broken examples, correct counts, surface missing features

docs(readme): fix broken examples, correct counts, surface missing features #576

Workflow file for this run

name: Benchmark
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: write
pull-requests: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-mex:
name: Build MEX
uses: ./.github/workflows/_build-mex-octave.yml
with:
artifact-name: mex-linux-bench
benchmark:
name: Performance Benchmark
timeout-minutes: 60
needs: build-mex
runs-on: ubuntu-latest
container: gnuoctave/octave:11.1.0
env:
FASTSENSE_SKIP_BUILD: "1"
# Pin BLAS thread pools to single-threaded — eliminates contention with
# neighboring tenants on shared GitHub runners. Trades absolute throughput
# for reproducibility; benchmarks track relative regressions, not raw speed.
OMP_NUM_THREADS: "1"
OPENBLAS_NUM_THREADS: "1"
steps:
- uses: actions/checkout@v6
- name: Download MEX binaries
uses: actions/download-artifact@v8
with:
name: mex-linux-bench
- name: Run benchmark
run: |
xvfb-run octave --eval "addpath(pwd); install(); addpath('scripts'); run_ci_benchmark();"
# Phase 1028 D-07: upload the raw benchmark-results.json so the
# 1000-tag harness baseline can be captured without scraping logs.
- name: Upload benchmark results artifact
if: always()
uses: actions/upload-artifact@v7
with:
name: bench-tag-pipeline-1k-results
path: benchmark-results.json
retention-days: 30
- name: Fix git ownership
run: git config --global --add safe.directory /__w/FastSense/FastSense
- name: Store benchmark results
uses: benchmark-action/github-action-benchmark@v1.22.1
with:
name: FastSense Performance
tool: customSmallerIsBetter
output-file-path: benchmark-results.json
github-token: ${{ secrets.GITHUB_TOKEN }}
auto-push: true
# PR-comment alerts disabled (comment-on-alert: false) because the
# FastSense rendering benches (Render/Downsample/Zoom/Instantiation
# at 5M–100M points) have mean wall-times of 0.4–0.7 ms on shared
# CI runners. JIT-cached incremental update paths produce 5–11x
# variance run-over-run with NO code change involved. Both 110%
# (initial) and 200% (Phase 1028 follow-up, PR #155) thresholds
# produced repeat false-positives — evidenced by 11.10x ratios on
# Downsample 100M and 11.60x on Instantiation 100M in PR #155
# itself, which only changed test files + workflow config.
#
# The bench action still UPLOADS results to the gh-pages dashboard
# (auto-push: true above) so real regressions are visible as a
# trend on the chart — that's the right channel for sub-ms metrics.
# PR comments were the wrong notification surface; treating CI's
# bench output as a regression gate at this granularity is noise.
#
# If a future phase introduces stable >100ms benches (e.g. the
# 1000-tag harness's WithIO tickMin at ~3.6s), those would be
# appropriate to alert on — but they should live in a separate
# benchmark action invocation with their own threshold.
alert-threshold: '200%'
comment-on-alert: false
fail-on-alert: false
alert-comment-cc-users: '@HanSur94'