mirror of
https://github.com/nlohmann/json.git
synced 2026-10-06 22:47:13 +00:00
tests/benchmarks/json_view/ holds a comparison with other libraries, answering the question users ask when they pick one. It is not built by CMake and not run by CI. - bench_view.cpp: parse, traverse, select and dump of twitter, citm_catalog, canada, jeopardy, a tweet and an RPC request, against json_view, yyjson, simdjson, Boost.JSON and json::parse, all agreeing and run interleaved. - bench_corpus.cpp: parse, traverse and dump of any file list. - bench_edit.cpp: parses, edits through each library's own API, and serializes; all outputs must describe the same value. - compare.py: builds both programs with system or pinned, SHA-256-checked downloads, and writes results with the commit, CPU, OS, compiler and library versions. - README.md and a workflow that runs on demand or via a PR label. Fairness fixes folded in: each engine runs once untimed before each timed round, so the next one no longer pays for the previous one's cleanup; dump is also compared with source numbers against yyjson's raw-number mode; a "simdjson DOM (fresh)" column and a reused-document column for json_view were added; compare.py's paths are absolute; downloads use a .part file and a failed checksum removes the archive. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
79 lines
2.6 KiB
YAML
79 lines
2.6 KiB
YAML
name: "json_view benchmarks"
|
|
|
|
# On demand only: runs the comparison of json_view with yyjson, simdjson, and
|
|
# Boost.JSON (tests/benchmarks/json_view/compare.py) on GitHub-hosted runners,
|
|
# for numbers from x86-64 and AArch64 Linux. It runs when started by hand, or
|
|
# when a pull request gets the label "benchmark" (on both architectures, with
|
|
# GCC and the default settings). Shared runners are noisy: the results show
|
|
# where json_view stands, but published numbers need a quiet machine (see
|
|
# tests/benchmarks/json_view/README.md).
|
|
|
|
on:
|
|
pull_request:
|
|
types: [labeled]
|
|
workflow_dispatch:
|
|
inputs:
|
|
runner:
|
|
description: "Runner image"
|
|
type: choice
|
|
options:
|
|
- ubuntu-24.04
|
|
- ubuntu-24.04-arm
|
|
default: ubuntu-24.04
|
|
compiler:
|
|
description: "Compiler"
|
|
type: choice
|
|
options:
|
|
- g++
|
|
- clang++
|
|
default: g++
|
|
native:
|
|
description: "Compile for the runner's CPU (-march=native)"
|
|
type: boolean
|
|
default: false
|
|
rounds:
|
|
description: "Rounds of bench_view"
|
|
type: number
|
|
default: 30
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
compare:
|
|
if: github.event_name == 'workflow_dispatch' || github.event.label.name == 'benchmark'
|
|
strategy:
|
|
matrix:
|
|
runner: ${{ fromJSON(github.event_name == 'workflow_dispatch' && format('["{0}"]', inputs.runner) || '["ubuntu-24.04", "ubuntu-24.04-arm"]') }}
|
|
runs-on: ${{ matrix.runner }}
|
|
steps:
|
|
- name: Harden Runner
|
|
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
|
with:
|
|
egress-policy: audit
|
|
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
persist-credentials: false
|
|
|
|
- name: Download test data
|
|
run: |
|
|
cmake -S . -B build -DJSON_BuildTests=On
|
|
cmake --build build --target download_test_data
|
|
|
|
- name: Run the comparison
|
|
env:
|
|
CXX: ${{ inputs.compiler || 'g++' }}
|
|
CC: ${{ inputs.compiler == 'clang++' && 'clang' || 'gcc' }}
|
|
ROUNDS: ${{ inputs.rounds || 30 }}
|
|
NATIVE: ${{ inputs.native && '--native' || '' }}
|
|
run: python3 tests/benchmarks/json_view/compare.py --data build/test_files --download --rounds "$ROUNDS" $NATIVE
|
|
|
|
- name: Summary
|
|
run: cat tests/benchmarks/json_view/results/*.md >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
with:
|
|
name: json_view-benchmarks-${{ matrix.runner }}-${{ inputs.compiler || 'g++' }}
|
|
path: tests/benchmarks/json_view/results/
|