diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dc1d8963b..000000000 --- a/.gitattributes +++ /dev/null @@ -1,27 +0,0 @@ -# Handle line endings automatically for files detected as text and leave all -# files detected as binary untouched. -* text=auto - -# Files and directories with the attribute export-ignore won’t be added to -# archive files. See http://git-scm.com/docs/gitattributes for details. -.gitattributes export-ignore -.gitignore export-ignore -/*.neon export-ignore -/*.neon.dist export-ignore -/.github export-ignore -/rector.php export-ignore -/.php-cs-fixer.dist.php export-ignore -/.readthedocs.yml export-ignore -/Makefile export-ignore -/box.* export-ignore -/doc/ export-ignore -/compose.yaml export-ignore -/docker/ export-ignore -/flake.* export-ignore -/extensions/*tests/ export-ignore -/phpbench.json export-ignore -/phpunit.xml.dist export-ignore -/tests/ export-ignore -/docs/ export-ignore -/examples/ export-ignore -/phpstan/ export-ignore diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 34fbbad24..000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: dantleech diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index a039136f6..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": 2, - "updates": [ - { - "allow": [ - { - "dependency-type": "all" - } - ], - "directory": "/", - "package-ecosystem": "composer", - "schedule": { - "interval": "daily" - }, - "versioning-strategy": "widen" - }, - { - "directory": "/", - "package-ecosystem": "github-actions", - "schedule": { - "interval": "daily" - } - } - ] -} diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml deleted file mode 100644 index 5c4cd04af..000000000 --- a/.github/workflows/benchmark.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Benchmark - -on: - push: - branches: - # change this to your main branch - - master - -jobs: - benchmark: - name: Benchmark - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install PHP - uses: shivammathur/setup-php@v2 - with: - coverage: none - php-version: "8.2" - tools: composer:v2 - - - name: Composer install - uses: ramsey/composer-install@v2 - with: - composer-options: "--no-scripts" - - # optionally ensure that the gh-pages branch exists. feel free to create - # this yourself and ommit this step. - - name: Ensure gh-pages branch exists - run: | - if ! git ls-remote --exit-code --heads origin gh-pages > /dev/null 2>&1; then - git config user.name "github-actions[bot]" - git config user.email "12345678+github-actions[bot]@users.noreply.github.com" - empty_tree="$(git hash-object -t tree /dev/null)" - commit="$(git commit-tree "$empty_tree" -m 'Initial gh-pages branch')" - git push origin "$commit:refs/heads/gh-pages" - fi - - - name: Run PHPBench - # you probably need to change this to vendor/bin/phpbench - run: bin/phpbench run --progress=plain --report=github-action-benchmark --output=json > output.json - - - name: Store benchmark result - uses: benchmark-action/github-action-benchmark@v1 - with: - name: PHPBench Performance - tool: customSmallerIsBetter - output-file-path: output.json - gh-pages-branch: gh-pages - benchmark-data-dir-path: benchmarks - auto-push: true - github-token: ${{ secrets.GITHUB_TOKEN }} - diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f1cb890c9..6b125edfe 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,12 +20,12 @@ jobs: strategy: matrix: php-version: - - '8.2' + - '7.2' steps: - name: "Checkout code" - uses: "actions/checkout@v3" + uses: "actions/checkout@v2" - name: "Install PHP" @@ -34,47 +34,11 @@ jobs: coverage: "none" php-version: "${{ matrix.php-version }}" tools: composer:v2 + - name: "Validate composer.json" run: "composer validate --strict --no-check-lock" - composer-normalize: - needs: - - "composer-validate" - - name: "Composer Normalize (${{ matrix.php-version }})" - - runs-on: "ubuntu-latest" - - strategy: - matrix: - php-version: - - '8.2' - - steps: - - - name: "Checkout code" - uses: "actions/checkout@v3" - - - - name: "Install PHP" - uses: "shivammathur/setup-php@v2" - with: - coverage: "none" - extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}" - php-version: "${{ matrix.php-version }}" - tools: composer:v2 - - - - name: "Composer install" - uses: "ramsey/composer-install@v3" - with: - composer-options: "--no-scripts" - - - - name: "Run composer normalize" - run: "composer normalize --dry-run --indent-size=4 --indent-style=space" - php-cs-fixer: needs: - "composer-validate" @@ -86,24 +50,25 @@ jobs: strategy: matrix: php-version: - - '8.2' + - '7.2' steps: - name: "Checkout code" - uses: "actions/checkout@v3" + uses: "actions/checkout@v2" - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: coverage: "none" + extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}" php-version: "${{ matrix.php-version }}" tools: composer:v2 - name: "Composer install" - uses: "ramsey/composer-install@v3" + uses: "ramsey/composer-install@v1" with: composer-options: "--no-scripts" @@ -122,12 +87,12 @@ jobs: strategy: matrix: php-version: - - '8.5' + - '7.2' steps: - name: "Checkout code" - uses: "actions/checkout@v3" + uses: "actions/checkout@v2" - name: "Install PHP" @@ -140,7 +105,7 @@ jobs: - name: "Composer install" - uses: "ramsey/composer-install@v3" + uses: "ramsey/composer-install@v1" with: composer-options: "--no-scripts" @@ -161,68 +126,59 @@ jobs: strategy: matrix: php-version: - - '8.2' - - '8.3' - - '8.4' - - '8.5' + - '7.2' + - '7.3' + - '7.4' dependency: - 'lowest' - 'highest' with-examples: ['yes'] allow-failures: [false] - composer-options: [''] include: - - php-version: '8.2' - dependency: 'highest' - with-examples: 'yes' + - php-version: '7.2' + dependency: 'lowest' + with-examples: 'no' allow-failures: false - symfony-version: '7.0.*' - - php-version: '8.5' + coverage: xdebug + - php-version: '8.0' dependency: 'highest' - with-examples: 'yes' - allow-failures: false - composer-minimum-stability: 'beta' - symfony-version: '^8.0.0-BETA1' + with-examples: 'no' + allow-failures: true + coverage: xdebug steps: - name: "Checkout code" - uses: actions/checkout@v3 + uses: actions/checkout@v2.3.3 - name: "Install PHP with extensions" - uses: shivammathur/setup-php@2.35.5 + uses: shivammathur/setup-php@2.7.0 with: extensions: "${{ env.REQUIRED_PHP_EXTENSIONS }}" php-version: ${{ matrix.php-version }} - tools: composer:v2, flex + tools: composer:v2 - name: "Add PHPUnit matcher" run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" - - name: Configure Composer minimum-stability - if: matrix.composer-minimum-stability - run: composer config minimum-stability ${{ matrix.composer-minimum-stability }} + - name: "Remove friendsofphp/php-cs-fixer" + run: composer remove --dev friendsofphp/php-cs-fixer --no-update - name: "Composer install" - uses: "ramsey/composer-install@v3" + uses: "ramsey/composer-install@v1" with: dependency-versions: "${{ matrix.dependency }}" - composer-options: "${{ matrix.composer-options }}" - env: - SYMFONY_REQUIRE: ${{ matrix.symfony-version }} - name: PHP Info run: php --version - name: "Run tests with PHPUnit" - run: "vendor/bin/phpunit --log-junit phpunit-${{ matrix.php-version }}-${{ matrix.dependency }}.xml" - env: - SKIP_XDEBUG_TESTS: "${{ matrix.skip_xdebug_tests }}" + run: vendor/bin/phpunit --verbose - name: "Run benchmarks with PHPBench" - run: "bin/phpbench run --report=env --progress=plain --dump-file=phpbench-${{ matrix.php-version }}-${{ matrix.dependency }}.xml" + run: bin/phpbench run --report=env --progress=dots - if: matrix.with-examples == 'yes' - run: bin/phpbench run --profile=examples --report=env --progress=plain --iterations=1 --revs=1 + run: bin/phpbench run --profile=examples --report=env --progress=dots --iterations=1 --revs=1 - if: matrix.with-examples == 'yes' run: bin/phpbench run --profile=examples --iterations=1 --revs=1 --report=catordog --executor=acme diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml index 86c3ccaeb..0ee6ccb24 100644 --- a/.github/workflows/documentation.yaml +++ b/.github/workflows/documentation.yaml @@ -14,12 +14,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@v3 + uses: actions/checkout@v2 - - name: "Set up Python 3.9" - uses: actions/setup-python@v3 + - name: "Set up Python 3.7" + uses: actions/setup-python@v1 with: - python-version: '3.9' # Semantic version range syntax or exact version of a Python version + python-version: '3.7' # Semantic version range syntax or exact version of a Python version - name: "Display Python version" run: python -c "import sys; print(sys.version)" @@ -28,10 +28,10 @@ jobs: run: sudo apt-get update - name: "Install Sphinx dependencies" - run: sudo apt-get install python3-dev build-essential + run: sudo apt-get install python-dev build-essential - name: "Cache pip" - uses: actions/cache@v4 + uses: actions/cache@v2 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('docs/conf.py') }} @@ -40,7 +40,7 @@ jobs: - name: "Install Sphinx + requirements via pip" working-directory: "docs" - run: pip3 install -r requirements.txt + run: pip install -r requirements.txt - name: "Build documentation" working-directory: "docs" @@ -53,7 +53,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@v3 + uses: actions/checkout@v2 - name: "Run DOCtor-RST" uses: docker://oskarstark/doctor-rst diff --git a/.github/workflows/release-phar.yml b/.github/workflows/release-phar.yml index bbfb76b96..dd77fc1b4 100644 --- a/.github/workflows/release-phar.yml +++ b/.github/workflows/release-phar.yml @@ -8,21 +8,21 @@ name: Append phpbench.phar to release jobs: build: name: Compile and upload Phar - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v2 with: fetch-depth: 0 - - name: Set PHP 8.2 + - name: Set PHP 7.3 uses: shivammathur/setup-php@v2 with: - php-version: '8.2' + php-version: '7.3' - name: "Composer install" - uses: "ramsey/composer-install@v3" + uses: "ramsey/composer-install@v1" with: composer-options: "--no-scripts --no-dev" diff --git a/.gitignore b/.gitignore index c2093f189..3f70e71e4 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,13 @@ /build /.phpbench.sqlite /phpunit.xml +/.travis/phpbench-phar-private.pem /phpbench.json -/.php-cs-fixer.cache +/.travis/build-key.pem +/.travis/secrets.tar +/.php_cs.cache /.phpunit.result.cache /tests/Workspace /coverage /.phpbench -/.phpunit.cache /**/*.pyc diff --git a/.gitignoree b/.gitignoree new file mode 100644 index 000000000..3f70e71e4 --- /dev/null +++ b/.gitignoree @@ -0,0 +1,16 @@ +/composer.lock +/vendor +/docs/build +/build +/.phpbench.sqlite +/phpunit.xml +/.travis/phpbench-phar-private.pem +/phpbench.json +/.travis/build-key.pem +/.travis/secrets.tar +/.php_cs.cache +/.phpunit.result.cache +/tests/Workspace +/coverage +/.phpbench +/**/*.pyc diff --git a/.php-cs-fixer.dist.php b/.php_cs.dist similarity index 71% rename from .php-cs-fixer.dist.php rename to .php_cs.dist index abb660b16..2fdf9f2c5 100644 --- a/.php-cs-fixer.dist.php +++ b/.php_cs.dist @@ -1,9 +1,6 @@ in([ __DIR__ . '/lib', __DIR__ . '/tests', @@ -14,22 +11,19 @@ ]) ; -return (new Config()) +return PhpCsFixer\Config::create() ->setRiskyAllowed(true) ->setRules([ - '@PSR12' => true, - 'void_return' => false, - 'binary_operator_spaces' => [ - 'operators' => [ - '=>' => null - ], - ], + '@PSR2' => true, + 'void_return' => true, + 'binary_operator_spaces' => [ 'align_double_arrow' => false ], 'blank_line_before_statement' => [ 'statements' => [ 'break', 'continue', 'declare', 'default', + 'die', 'do', 'exit', 'for', @@ -48,15 +42,19 @@ 'yield', ], ], + 'ordered_imports' => true, 'concat_space' => false, + 'method_argument_space' => false, 'no_unused_imports' => true, + 'ordered_imports' => true, 'php_unit_set_up_tear_down_visibility' => true, - 'phpdoc_align' => false, + 'phpdoc_align' => [], 'phpdoc_indent' => false, 'phpdoc_separation' => true, 'no_superfluous_phpdoc_tags' => [ 'allow_mixed' => true ], - 'fully_qualified_strict_types' => false, + 'fully_qualified_strict_types' => true, ]) - ->setFinder($finder); + ->setFinder($finder) + ; diff --git a/.readthedocs.yml b/.readthedocs.yml index 79555ed9a..d8a9006af 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,14 +1,11 @@ # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details version: 2 -build: - os: ubuntu-22.04 - tools: - python: "3.12" sphinx: configuration: docs/conf.py python: + version: 3.7 install: - requirements: docs/requirements.txt diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..6638bf61e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,33 @@ +language: php + +cache: + directories: + - "$HOME/.composer/cache" + +stages: + - deploy + +jobs: + include: + - stage: Deploy + + if: (NOT type IN (pull_request)) AND (branch = master) + + php: 7.2 + + before_install: + - source .travis/xdebug.sh + - xdebug-disable + + script: skip + + before_deploy: + - ./.travis/before-deploy.sh + + deploy: + provider: pages + skip-cleanup: true + github-token: + secure: "cVKcMHHv6MV1HiP78hYPyBx6VIy+DzIv6HS0QM/g3gHnE7EWopu9mQjku2DQtQWAjqVrIPL3ClvZxJH5MjDd4/kB6kWQDGX5O2+CaqzhaJgSpT0htFLbiClqK1uvl2QnHoqwfnhIux230AWDtQfod1g1p60nryo65pLG0HGHqXU=" + on: + branch: master diff --git a/.travis/before-deploy-gh-release.sh b/.travis/before-deploy-gh-release.sh new file mode 100755 index 000000000..b399ba952 --- /dev/null +++ b/.travis/before-deploy-gh-release.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# set -x + +export PATH=.:$PATH + +# Travis won't deploy ignored files +sed -ie '/^\/phpbench.phar*/d' .gitignore + +# Install PHAR dependencies and remove strip other dev deps. +rm -Rf ./vendor +rm -f composer.lock +composer install --no-dev -o + +wget https://github.com/box-project/box/releases/download/3.8.5/box.phar +php box.phar compile -c box.json.gh-release + +echo "Done pre-deploy build" diff --git a/.travis/before-deploy.sh b/.travis/before-deploy.sh new file mode 100755 index 000000000..9485a49d2 --- /dev/null +++ b/.travis/before-deploy.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# set -x + +export PATH=.:$PATH + +# Travis won't deploy ignored files +sed -ie '/^\/phpbench.phar*/d' .gitignore + +# Extract the private key (needed to sign the PHAR) +openssl aes-256-cbc \ + -K "${encrypted_d58d55177063_key:?'Encrypted key not assigned'}" \ + -iv "${encrypted_d58d55177063_iv:?'Encrypted iv not assigned'}" \ + -in .travis/secrets.tar.enc \ + -out .travis/secrets.tar \ + -d +tar xvf .travis/secrets.tar -C .travis + +# Install PHAR dependencies and remove strip other dev deps. +rm -Rf ./vendor +rm -f composer.lock +composer require "doctrine/dbal" "~2.5" --no-update +composer require "padraic/phar-updater" "^1.0" --no-update +composer install --no-dev -o + +# Build the PHAR +curl -LSs https://box-project.github.io/box2/installer.php | php +box.phar build +ls + +# Dump the version file (used to see if PHPBench needs an update) +sha1sum phpbench.phar > phpbench.phar.version +echo "Done pre-deploy build" diff --git a/.travis/secrets.tar.enc b/.travis/secrets.tar.enc new file mode 100644 index 000000000..b3641d585 Binary files /dev/null and b/.travis/secrets.tar.enc differ diff --git a/.travis/xdebug.sh b/.travis/xdebug.sh new file mode 100644 index 000000000..1914365bb --- /dev/null +++ b/.travis/xdebug.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +# The problem is that we do not want to remove the configuration file, just disable it for a few tasks, then enable it +# +# For reference, see +# +# - https://docs.travis-ci.com/user/languages/php#Disabling-preinstalled-PHP-extensions +# - https://docs.travis-ci.com/user/languages/php#Custom-PHP-configuration + +config="/home/travis/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini" + +function xdebug-disable() { + if [[ -f $config ]]; then + mv "$config" "$config.bak" + fi +} + +function xdebug-enable() { + if [[ -f "$config.bak" ]]; then + mv "$config.bak" "$config" + fi +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 38502247d..9aebfb148 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,361 +1,11 @@ CHANGELOG ========= -master ------- - -- Conditionally show the baseline "difference" in the default expression - report. #1154 @dantleech - -1.7.0 ------ - -- reports: new `derivations` feature to allow computing values from existing values. @dantleech -- reports: deprecate `baseline_expressions` as the same can now be - accomplished with `derivations`. @dantleech -- reports: `aggregate-preview` report (includes r diff column): will become the new `aggregate` in PHPBench 2.0 @dantleech -- expr: lazy function evaluation on select functions (just the `if()` function - for now). @dantleech -- expr: allow the nullsafe operator on bare variables -- meta: Exclude docs and other non-code assets in `.gitattributes` @sasezaki -- meta: Bump phpstan to 2.x @dantleech - -1.6.1 ------ - -- Handle undefined offset error for unsupproted time formats -- Allow NULL to be passed as a time unit (will use the base unit) - -1.6.0 ------ - -- reports: JSON progress logging #1018 -- reports: JSON report renderering #1135 -- expression-language: `if(cond,val1,val2)` as a conditional expression -- expression-language: `!=` unequals operator -- expression-language: `time_unit` function to normalize a timeunit -- expression-language: `time_convert` function to convert time - -1.5.0 ------ - -- Add support for PHP 8.5 -- Handle infinity percentage #1134 @ajezz -- Symfony 8 Support #1125 @kocal - -1.4.0 ------ - -- Add support for 8.4 (explicit nullables) -- Bring the `phpbench/dom` library into this repository. -- Introduce `.gitattributes` to not publish tests files etc. - -1.3.1 ------ - -- Fix schema concat issue in PHAR - -1.3.0 ------ - -Features: - -- Add default `table_summary` report component @dantleech -- Add command to initialize the configuration file (`config:init`) @dantleech -- Add command to add a new service config based on a prototype (`config:extend`) @dantleech - -Improvements: - -- Use single quotes for expressions in the default reports @dantleech -- Hide noisy log messages for missing fields #1095 @dantleech -- Improved types etc @aivchen #1064 #1064 #1070 #1071 #1074 #1081... -- Improved tests @aivchen -- Improved code-style @aivchen #1057 #1076 #1070 -- Import Attribute symbol @gsteel #1075 - -Bug fixes: - -- Ignore `@template` and other generic annotations #1097 @dantleech -- Defer character reader until command execution @jbboher #1092 - -1.2.15 ------- - -- Bump minimum PHP version to 8.1 -- Allow Symfony 7.0 @keulinho -- Add documentation for adding env providers @GromNaN - -1.2.{11,12,13,14} (09/07/2023) ------------------------------- - -Improvements: - -- Use latest version of Box -- Fixing build - -1.2.10 (24/04/2023) -------------------- - -Improvements: - -- Fix deprecation warning when using blinken logger @tavaresmatheus - -1.2.9 ------ - -Bug fixes: - -- Fix PHP 8.2 deprecation warning #1022 - -Improvements: - -- Drop support for 7.3 and support for 8.1 and 8.2 in the pipeline. - -1.2.8 ------ - -Improvements: - -- Update documentation to point to reference new GPG key #1017 -- Support Doctrine Annotations 2.0 #1013 @greg0ire -- Profiler: detect Xdebug `.gz` files when compression enabled #1011 @blackwolf12333 - -1.2.7 ------ - -Improvements: - -- Remove dependency on `webmozart/path` (copied the class into PHPBench) -- Update PHPStan to 1.0 and fix new errors #1006 -- Use `webmozart/glob` instead of `glob` for benchmark paths and config - include paths #1005 - -Bug fixes: - -- Fix bad exception call #1002 @TRowbotham -- Fix comma formatting of numbers with no zero decimal precision #1008 - -1.2.6 ------ - -Bug fixes: - -- Allow multiple `Assert` annotations #996 @nyamsprod - -1.2.5 ------ - -Bug fixes: - -- New "CouldNotLoadMetadata" exception was located in the `tests` folder and - was not available when phpbench was used as a dependency. - -1.2.4 ------ - -Improvements - -- Show [solidarity](https://github.com/vshymanskyy/StandWithUkraine) with Ukrainians -- Show more concise error messages including script exit code #969 -- Configuration (`expression.strip_tailing_zeros`) to strip meaningless zeros after the decimal place #958 - -1.2.3 ------- - -Improvements: - -- Allow `psr/log` `2.x` and `3.x` - -Bug fixes: - -- Parameters seem to be converted to strings when storing/retrieving #959 - -1.2.2 ------ - -Bug fixes: - -- Fix non-existing mappings in composer file #955 @Dgame - -1.2.1 ------ - -Bug fixes: - -- Do not index variants by parameter set name (as they vary by number of - revs/iterations etc also) #947 - -Improvements: - -- Symfony 6 support - @julien-boudry -- Allow globs in benchmark path specification - @ricardoboss - -1.2.0 ------ - -Features: - -- [expression] Support binary memory units #934 -- [reporting] Ability to expand table columns dynamically #928 -- [reporting] Ability to group columns #928 -- [reporting] Added `benchmark_compare` default report #928 -- [cli] Ability to filter by variant #938 -- [cli] Ability to filter reports #940 - -Improvements: - -- [storage] Allow `.` in tag names -- [runner] Do not show warning when unable to load metadata for benchmark IF - the `runner.file_pattern` is specified #941 - -Bug fixes: - -- Fix property (`.`) access precedence, it is now the same as `[` array - access #928 - -1.1.3 (2021-10-31) ------------------- - -- Fix bug with misassigned labels in bar chart #931 -- Safely removed non-functioning config option `report.html_output_dir` #930 - -1.1.2 (2021-09-25) ------------------- - -- Removing PHP8.1 deprecations - @Crell -- Removing PHP7.2 support - -1.1.1 (2021-09-08) ------------------- - -Bug fixes: - -- Prevent registering #[ParamProviders(...)] multiple times when benchmark methods are inherited #918 - @ocramius - -1.1.0 (2021-08-15) ------------------- - -Bug fixes: - -- Ensure all refs are passed to report in run mode #864 -- Memory formatting respects precision directive #892 -- Remove double title output when description used in console reports #848 - -Features: - -- Allow env vars to be passed to the benchmark process. -- Allow config files to include other config files via. `$include` and - `$include-glob` #989 -- Added `contains` function to see if a value exists in a list. -- Added `frame` function to create a new data frame within an expression. -- Added `sum` and `count` functions #865 -- New component based report generator #851 -- HTML Bar Chart component #853 -- Console Bar Chart component #858 -- Data Frame and Expression Filtering #831 -- Allow multiple benchmark paths to be specified from CLI #834 -- Functions which require at least one value return NULL when values are - empty #835 -- Add `--limit` option to `log` command #879 -- Add `bare-vertical` report configuration (same as `--report='extends: bare,{"vertical": true}`) #879 - -Improvement: - -- Surpress reports if errors were encountered during the run #912 -- Support expressions in parttion specifications -- Data can be accessed on any expression value (not just "parameters") -- Use automatic time unit for expression report #838 -- Parameter handling refactored to be "safe": objects will not be unserialized - in the PHPBench process #845 -- Allow single quoted strings in expressions (better with JSON) #895 - -Other changes: - -- "0" is not longer shown as the "set name" in reports, it is now an empty - string. -- Lists and data frames can no longer be compared. Use the `frame` function to - convert a list to a data frame (in the unlikely event you compare a list - with a frame in a report). - -1.0.4 (2021-07-18) ------------------- - -Bug fix: - -- `runner.executor` setting is ineffective and related bugs #880 - -1.0.3 (2021-07-03) ------------------- - -Bug fix: - -- Show warning if file is parsed but it is not a benchmark file. #883 - - Files that are not suffixed with `Bench.php` are are reflected and their - docblocks are parsed. Causing unexpected errors if unknown docblock tags are - present. - - As changing this behavior (introduced by error in 2016) is a B/C break, - it will not be changed in a bug-fix release. - - An option `runner.file_pattern` has been added however to enable the - warnings to be resolved. - -Improvement: - -- Show warning if metadata could not be loaded for benchmark instead of - an exception. - -1.0.2 (2021-05-28) ------------------- - -Bug fix: - -- Fix incorrect benchmark column definition in report #840 -- Fix `--ansi` flag not be propagated to report output #844 - -1.0.1 (2021-05-11) ------------------- - -Bug fix: - -- Error with bare report when DateTime used as param #832 - -1.0.0 (2021-05-09) ------------------- - -Improvements: - -- Optionaly support for binary data in param providers #532 -- Support serializable objects in param providers #823 - -Bug fix: - -- Fix regression which requires phpbench to be installed with composer 2 #822 - -1.0.0-beta2 ------------ - -B/C breaks: - -- Progress logger: startSuite now additionally accepts `RunnerConfig` - -Improvements: - -- Use package versions to show PHPBench version if not PHAR - -Bug fixes: - -- Unterminated XML reference #818 - @staabm -- Parent directory for custom script path not created #739 - @alexandrajulius -- Windows newline is not understood in expression language #817 - @dantleech - 1.0.0-beta1 ----------- B/C breaks: -- Removed `self-update` functionality (suggest using `phive` instead(. - Most configuration option names have changed. All options are now prefixed by their extension name, e.g. `bootstrap` => `runner.bootstrap`, `path` => `runner.path`, `extensions` => `core.extensions`. See the configuration diff --git a/README.md b/README.md index 0b502b8e7..e31beebc8 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,7 @@ -[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md) -

-[![StandWithUkraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md) [![CI](https://github.com/phpbench/phpbench/actions/workflows/ci.yaml/badge.svg)](https://github.com/phpbench/phpbench/actions/workflows/ci.yaml) [![Documentation](https://github.com/phpbench/phpbench/actions/workflows/documentation.yaml/badge.svg)](https://github.com/phpbench/phpbench/actions/workflows/documentation.yaml) [![Latest Stable Version](https://poser.pugx.org/phpbench/phpbench/v)](//packagist.org/packages/phpbench/phpbench) @@ -22,9 +19,9 @@ Features include: - [Iterations](https://phpbench.readthedocs.io/en/latest/annotributes.html#iterations): Sample your revolutions many times and review aggregated statistical data. - **Process Isolation**: Each iteration is executed in a separate process. -- [Reporting](https://phpbench.readthedocs.io/en/latest/guides/reports.html): Customizable reports and various output formats (e.g. +- [Reporting](https://phpbench.readthedocs.io/en/latest/reports.html): Customizable reports and various output formats (e.g. console, CSV, Markdown, HTML). -- Report [storage](https://phpbench.readthedocs.io/en/latest/guides/storage.html) and [comparison](https://phpbench.readthedocs.io/en/latest/guides/regression-testing.html): Store benchmarks locally to be used as a +- Report [storage](https://phpbench.readthedocs.io/en/latest/storage.html) and [comparison](https://phpbench.readthedocs.io/en/latest/regression-testing.html): Store benchmarks locally to be used as a baseline reference, or to reference them later. - **Memory Usage**: Keep an eye on the amount of memory used by benchmarking subjects. @@ -38,20 +35,20 @@ Installation ------------ ```bash -composer require phpbench/phpbench --dev +$ composer require phpbench/phpbench --dev ``` -See the [installation instructions](http://phpbench.readthedocs.io/en/latest/installing.html) for more options. +See the [installation instructions](http://phpbench.readthedocs.org/en/latest/installing.html) for more options. Documentation ------------- -Documentation is hosted on [readthedocs](http://phpbench.readthedocs.io). +Documentation is hosted on [readthedocs](http://phpbench.readthedocs.org). Community --------- -- Follow [@phpbench](https://phpc.social/@phpbench) on Mastodon for the latest news. +- Follow [@phpbench](https://twitter.com/phpbench) for the latest news. - Join the `#phpbench` channel on the Slack [Symfony Devs](https://symfony-devs.slack.com/join/shared_invite/enQtMzM3NDA1NzEyMzg0LTgyNGYwYjFjMjY5YjllYWZkYTY2OWM4MDQzZTgzMmNjNGI3ZDJhYzE2Yjc4NmFmM2JiOTZjODg2MGJlM2RjMDU) channel. @@ -59,25 +56,17 @@ Community Screenshots ----------- -Running benchmarks and comparing against a baseline: - -![phpbench](https://user-images.githubusercontent.com/530801/117569074-b52e1080-b0bb-11eb-8c80-a89ce9cce1e2.png) - -Aggregated report: +Default output: -![image](https://user-images.githubusercontent.com/530801/117569081-c8d97700-b0bb-11eb-91e5-fc9eaa1ac157.png) +![phpbench-standard](https://user-images.githubusercontent.com/530801/92305757-14aeac00-ef82-11ea-87b1-077afc72f0f4.png) Blinken logger: ![phpbench-blinken](https://user-images.githubusercontent.com/530801/92305786-4a539500-ef82-11ea-8a2c-db67968113b5.png) -HTML Bar Chart: - -![Untitled](https://user-images.githubusercontent.com/530801/129060591-1dd984f1-8d03-4cf5-9601-7e677029e647.png) - -Console Bar Chart: +HTML report: -![Untitled](https://user-images.githubusercontent.com/530801/129060527-9cf6c0e0-15f8-4f38-a8e1-39b257ff62fd.png) +![phpbench2](https://cloud.githubusercontent.com/assets/530801/10666918/bb61e438-78d4-11e5-8add-454c51261aa8.png) Contributing ------------ diff --git a/benchmarks/data.js b/benchmarks/data.js new file mode 100644 index 000000000..226a93cb3 --- /dev/null +++ b/benchmarks/data.js @@ -0,0 +1,2783 @@ +window.BENCHMARK_DATA = { + "lastUpdate": 1781461709784, + "repoUrl": "https://github.com/phpbench/phpbench", + "entries": { + "PHPBench Performance": [ + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "9c7d0df43ea9b2470dc5ab611d873f1f08143ad8", + "message": "Add github_action_benchmark example", + "timestamp": "2026-03-22T09:34:36Z", + "tree_id": "0d5772728eca9e9c9afbec02df997e614c85600c", + "url": "https://github.com/phpbench/phpbench/commit/9c7d0df43ea9b2470dc5ab611d873f1f08143ad8" + }, + "date": 1774172132136, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7158.283953033134, + "range": "± 0.54%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 349.44814090019827, + "range": "± 2.60%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 351.61056751467675, + "range": "± 1.63%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 344.8258317025461, + "range": "± 2.00%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2306.095890410927, + "range": "± 1.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3404.856164383513, + "range": "± 0.54%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5987.96771037176, + "range": "± 0.52%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3769.622309197615, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5487.527397260266, + "range": "± 0.65%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9110.702544031297, + "range": "± 0.66%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5208.548923679033, + "range": "± 1.18%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7419.43150684933, + "range": "± 0.74%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12284.570450097734, + "range": "± 0.53%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2847.572015655607, + "range": "± 0.99%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 231.84598825831446, + "range": "± 1.89%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1076.987866927585, + "range": "± 0.41%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 125604.79452054865, + "range": "± 0.93%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 127389.30724070617, + "range": "± 1.33%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23868.007827788413, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 73.73953033267993, + "range": "± 1.59%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.2232876712336, + "range": "± 1.31%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 966.1318982387519, + "range": "± 1.64%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1455.03992172212, + "range": "± 0.59%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "4ad451b76965635a7b76037b05d26243d5a98a8d", + "message": "Introduce CI integration guide (#1144)\n\n- Introduce CI integration guide\n- Downgrade sphinx tabs to previous release for github actions\n- Disable yaml/yml doctor rule\n- Do not generate unused references that cause warnings\n- Disable doctor indentation", + "timestamp": "2026-03-22T10:14:45Z", + "tree_id": "282613905a3e1970594bf627c5caa4cb3539fd44", + "url": "https://github.com/phpbench/phpbench/commit/4ad451b76965635a7b76037b05d26243d5a98a8d" + }, + "date": 1774174530790, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7192.658904109632, + "range": "± 1.93%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 357.53816046966404, + "range": "± 2.47%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 362.0684931506786, + "range": "± 1.92%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 347.257338551859, + "range": "± 2.09%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2310.6722113502997, + "range": "± 0.72%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3462.3003913894277, + "range": "± 1.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 6103.252446183913, + "range": "± 1.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3808.4442270057916, + "range": "± 0.96%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5573.945205479395, + "range": "± 1.50%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9321.35714285713, + "range": "± 1.64%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5206.349315068498, + "range": "± 2.72%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7627.772994129211, + "range": "± 2.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12688.664383561658, + "range": "± 2.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2860.0634050880753, + "range": "± 0.98%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 232.10254403131486, + "range": "± 1.54%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1084.4947162426952, + "range": "± 0.75%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 130539.19178082186, + "range": "± 1.71%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 133803.92759295352, + "range": "± 1.43%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 24439.017612524505, + "range": "± 1.44%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 75.44931506849416, + "range": "± 2.28%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 67.55205479452147, + "range": "± 2.28%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 965.8821917808274, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1479.041487279855, + "range": "± 1.22%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "661c8c6abbc7734986cf7bc6062c237fbb450461", + "message": "Do not specify base time unit in example", + "timestamp": "2026-03-22T10:27:20Z", + "tree_id": "41a3835e9148847946db182411ea82a5df818734", + "url": "https://github.com/phpbench/phpbench/commit/661c8c6abbc7734986cf7bc6062c237fbb450461" + }, + "date": 1774175298224, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7086.557338551834, + "range": "± 1.22%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 341.990215264193, + "range": "± 1.91%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 345.84442270058685, + "range": "± 2.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 351.6741682974498, + "range": "± 1.46%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2239.3796477495507, + "range": "± 0.73%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3368.5185909980773, + "range": "± 1.01%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5885.640900195718, + "range": "± 1.53%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3706.8336594912166, + "range": "± 0.61%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5397.406066536216, + "range": "± 1.16%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9109.107632093934, + "range": "± 0.60%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5133.2358121330035, + "range": "± 0.76%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7282.2788649706745, + "range": "± 0.50%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12137.170254403078, + "range": "± 0.63%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2827.901565557676, + "range": "± 1.41%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 229.89393346379677, + "range": "± 2.14%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1080.8726027397702, + "range": "± 0.71%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 124873.2465753432, + "range": "± 0.97%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 125114.44618395373, + "range": "± 0.51%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23625.04500978518, + "range": "± 0.97%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 74.81624266144706, + "range": "± 1.93%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 64.44579256360048, + "range": "± 1.96%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 964.3516634050874, + "range": "± 0.79%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1444.0195694716308, + "range": "± 0.65%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "eb7bd89a56463c4b1086f33fb3e79fc8b636e0a2", + "message": "Fix typos", + "timestamp": "2026-03-22T10:36:26Z", + "tree_id": "647886b2a4ff278f206d2d63b26fa863faec6c7d", + "url": "https://github.com/phpbench/phpbench/commit/eb7bd89a56463c4b1086f33fb3e79fc8b636e0a2" + }, + "date": 1774175832869, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7316.974755381556, + "range": "± 1.33%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 366.5753424657578, + "range": "± 1.78%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 364.61839530333236, + "range": "± 2.47%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 373.83855185910966, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2450.965753424697, + "range": "± 1.17%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3580.6604696673503, + "range": "± 0.89%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 6197.206457925749, + "range": "± 0.57%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3982.0166340509204, + "range": "± 0.86%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5849.289628180066, + "range": "± 0.99%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9632.452054794143, + "range": "± 1.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5585.08904109585, + "range": "± 0.81%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7945.510763209411, + "range": "± 2.09%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12888.684931507014, + "range": "± 0.94%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2898.7013698630444, + "range": "± 0.63%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 231.8643835616479, + "range": "± 1.33%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1079.3101761252663, + "range": "± 0.44%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 135847.44618395457, + "range": "± 1.07%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 138728.87475538187, + "range": "± 1.03%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 24623.037181996013, + "range": "± 0.71%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 76.45753424657572, + "range": "± 2.20%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 67.45557729941221, + "range": "± 2.14%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 968.1851272015697, + "range": "± 1.31%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1454.7714285714237, + "range": "± 1.06%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "8888764ea1ef66db2dbb839d80a90a080bd8dec9", + "message": "Update doc", + "timestamp": "2026-03-22T17:50:31Z", + "tree_id": "bda621a607fe36aaa38aa91eb8331aec8737fd05", + "url": "https://github.com/phpbench/phpbench/commit/8888764ea1ef66db2dbb839d80a90a080bd8dec9" + }, + "date": 1774201875598, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7166.860469667357, + "range": "± 0.49%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 354.5577299412971, + "range": "± 2.30%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 357.68786692760375, + "range": "± 2.63%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 353.8806262230935, + "range": "± 1.71%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2278.3091976516844, + "range": "± 1.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3426.364970645808, + "range": "± 0.74%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5962.691780821944, + "range": "± 1.14%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3742.907045009788, + "range": "± 1.61%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5462.381604696659, + "range": "± 1.26%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9171.136007827707, + "range": "± 0.86%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5281.357142857076, + "range": "± 1.29%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7593.484344422677, + "range": "± 1.36%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12291.681017612651, + "range": "± 0.92%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2825.335616438337, + "range": "± 1.16%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 231.3939334637943, + "range": "± 1.59%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1082.1700587084015, + "range": "± 1.54%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 128940.20939334795, + "range": "± 1.22%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 127703.86692759267, + "range": "± 0.94%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 24089.812133072322, + "range": "± 1.20%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 74.62328767123341, + "range": "± 1.61%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.93502935420658, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 975.1786692759104, + "range": "± 1.26%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1452.8473581213111, + "range": "± 0.32%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "e1fcce2f8072842fa9a814490378bea3bba29c42", + "message": "docs: Add an example on adding a diff column", + "timestamp": "2026-04-04T15:54:05+01:00", + "tree_id": "900c9edce7ab8970dab24d2e318f99b1dff63031", + "url": "https://github.com/phpbench/phpbench/commit/e1fcce2f8072842fa9a814490378bea3bba29c42" + }, + "date": 1775314483281, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "HtmlRendererBench::benchRender", + "value": 1836.7064579256387, + "range": "± 0.93%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 283.7681017612474, + "range": "± 1.23%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 274.8356164383572, + "range": "± 1.99%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 280.9129158512716, + "range": "± 2.12%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2287.3727984343714, + "range": "± 2.16%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3191.993150685009, + "range": "± 0.96%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5163.3698630136605, + "range": "± 0.81%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3668.3287671232865, + "range": "± 1.05%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5316.0205479451115, + "range": "± 1.03%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8242.037181996115, + "range": "± 1.93%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5148.286692759224, + "range": "± 1.79%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7184.0763209392735, + "range": "± 0.84%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 11063.824853229027, + "range": "± 0.98%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 6176.8133072406645, + "range": "± 0.55%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 208.22465753424706, + "range": "± 2.24%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 901.1853228962809, + "range": "± 0.92%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 57.84579256360099, + "range": "± 1.71%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 51.41448140900244, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1186.0410958904115, + "range": "± 0.76%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 802.0776908023386, + "range": "± 0.68%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 96894.75342465745, + "range": "± 0.63%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 96063.6712328768, + "range": "± 1.42%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 19844.318982387646, + "range": "± 0.66%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "sasezaki+github@gmail.com", + "name": "sasezaki", + "username": "sasezaki" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "2f2742b3bfd1416ca95d4e0338af0b6897cf4e64", + "message": "Add export-ignore rules to .gitattributes (#1146)\n\n* Add missing export-ignore entries to .gitattributes\n\n* Remove /templates/ from export-ignore (used at runtime)", + "timestamp": "2026-05-06T21:19:39+02:00", + "tree_id": "90e9703a359be4f7f3a3eed18625b9d2f74141a7", + "url": "https://github.com/phpbench/phpbench/commit/2f2742b3bfd1416ca95d4e0338af0b6897cf4e64" + }, + "date": 1778095229677, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "RunCommandBench::benchDefault", + "value": 123466.39726027445, + "range": "± 2.11%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 129975.26223092062, + "range": "± 0.89%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23456.637964774956, + "range": "± 0.54%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 76.20528375733652, + "range": "± 1.49%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 67.16986301369793, + "range": "± 2.01%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1425.938943248517, + "range": "± 0.94%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 255.6381604696698, + "range": "± 2.03%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1116.0493150684913, + "range": "± 0.73%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 948.267123287678, + "range": "± 1.09%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 328.1203522504871, + "range": "± 2.06%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 338.3718199608729, + "range": "± 1.89%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 321.2866927592946, + "range": "± 2.31%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2099.145792563613, + "range": "± 1.56%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3248.0802348336438, + "range": "± 1.74%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5742.154598825837, + "range": "± 1.26%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3635.9706457925577, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5377.595890410945, + "range": "± 1.05%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8978.643835616502, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5221.660469667289, + "range": "± 1.57%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7835.084148728145, + "range": "± 1.94%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12972.475538160425, + "range": "± 1.54%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7609.2434442269805, + "range": "± 2.48%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2433.768493150627, + "range": "± 0.62%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "07b4fa73a8c706cd1bd98755ddadace3dba8248e", + "message": "Allow lazy evaluation for functions (#1149)", + "timestamp": "2026-06-06T16:19:12+01:00", + "tree_id": "3f25ac29991acaa8f0a82c7b8cd7591f01646b3e", + "url": "https://github.com/phpbench/phpbench/commit/07b4fa73a8c706cd1bd98755ddadace3dba8248e" + }, + "date": 1780759190068, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1416.9023483366045, + "range": "± 1.81%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 72.08219178082234, + "range": "± 1.95%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 65.72348336595009, + "range": "± 1.85%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 941.4217221135034, + "range": "± 0.82%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7158.73091976512, + "range": "± 0.83%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 331.8483365949212, + "range": "± 2.33%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 328.06164383561463, + "range": "± 2.43%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 335.5909980430631, + "range": "± 2.62%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2057.090998043055, + "range": "± 1.31%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3168.2446183952707, + "range": "± 1.21%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5547.847358121311, + "range": "± 0.74%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3537.7045009784724, + "range": "± 0.77%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5273.9148727984575, + "range": "± 1.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8792.689823874749, + "range": "± 1.24%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5077.126223091975, + "range": "± 0.81%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7398.478473581083, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12183.647749510621, + "range": "± 0.90%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2421.8430528375557, + "range": "± 0.82%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 121694.49902152584, + "range": "± 0.67%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 122228.15068493379, + "range": "± 0.67%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 22825.320939334848, + "range": "± 0.43%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 244.27964774951, + "range": "± 1.56%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1131.1430528375774, + "range": "± 0.74%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "fbab09e522838babcdca79085ff769f3bc734e77", + "message": "Various fixes and improvements (#1150)\n\n- expr: Boolean node is a scalar value\n- expr: Support the nullsafe operator on bare variables\n- expr: Allow display as \"rstdev\"\n- tests: approval support for empty files", + "timestamp": "2026-06-07T09:50:04+01:00", + "tree_id": "7a7664abd6ad642bf61a1b20a3b78b3cbf767fc4", + "url": "https://github.com/phpbench/phpbench/commit/fbab09e522838babcdca79085ff769f3bc734e77" + }, + "date": 1780822248804, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1400.4219178082242, + "range": "± 1.10%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 75.25577299412814, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.98669275929421, + "range": "± 1.89%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 946.1559686888431, + "range": "± 1.09%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7236.970254403114, + "range": "± 0.93%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 330.1722113502974, + "range": "± 2.56%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 332.7534246575341, + "range": "± 2.13%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 336.2084148727947, + "range": "± 1.76%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2120.821917808248, + "range": "± 1.27%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3215.8336594911925, + "range": "± 1.36%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5640.761252446135, + "range": "± 0.97%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3723.438356164459, + "range": "± 0.83%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5545.917808219199, + "range": "± 2.44%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8996.177103718226, + "range": "± 2.55%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5213.321917808213, + "range": "± 1.05%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7815.63405088059, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12709.438356164253, + "range": "± 1.19%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2435.761839530371, + "range": "± 1.22%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 130963.65362035147, + "range": "± 1.14%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 131874.44031311368, + "range": "± 0.38%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23659.045009784062, + "range": "± 1.16%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 246.85714285714198, + "range": "± 2.03%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1133.304500978464, + "range": "± 1.24%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "5c72bb108eac249dd427953a90b5583e2e2c1a7f", + "message": "Bump phpstan (#1151)\n\n* Bump PHPStan and related deps and fix some issues\n\n- PHPstan to 2.x and related packages.\n- Fix some of the newly reported issues.\n- Update baseline.\n\n* Support console 6.x", + "timestamp": "2026-06-07T10:33:04+01:00", + "tree_id": "4babbe93ec5a9c37a42b152f2c1db1c6d3e09735", + "url": "https://github.com/phpbench/phpbench/commit/5c72bb108eac249dd427953a90b5583e2e2c1a7f" + }, + "date": 1780824824564, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1406.174951076309, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 73.41878669276029, + "range": "± 2.36%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.3851272015662, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 943.0669275929661, + "range": "± 1.17%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7132.07318982385, + "range": "± 0.67%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 322.77103718199277, + "range": "± 1.29%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 317.4960861056768, + "range": "± 2.72%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 319.386497064581, + "range": "± 2.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2215.484344422657, + "range": "± 1.09%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3335.157534246556, + "range": "± 1.31%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5718.952054794527, + "range": "± 1.03%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3593.8718199608784, + "range": "± 1.40%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5327.438356164275, + "range": "± 0.95%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8777.323874755482, + "range": "± 1.15%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5126.949119373784, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7456.952054794601, + "range": "± 0.92%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12194.98043052843, + "range": "± 1.50%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2416.442465753444, + "range": "± 1.01%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 122695.4637964773, + "range": "± 1.53%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 122638.30136986238, + "range": "± 1.18%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 22917.027397260368, + "range": "± 0.43%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 246.64814090019433, + "range": "± 1.04%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1134.6976516634238, + "range": "± 1.52%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "e8145c81d2ffffb249a2f9f6c6adec2ef1efc3f5", + "message": "Delete dead snapshots", + "timestamp": "2026-06-07T10:44:43+01:00", + "tree_id": "fd326cb5ee7584559bea1407edd718400f91fefd", + "url": "https://github.com/phpbench/phpbench/commit/e8145c81d2ffffb249a2f9f6c6adec2ef1efc3f5" + }, + "date": 1780825528048, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1435.581017612527, + "range": "± 1.18%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 72.16144814090075, + "range": "± 2.41%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 64.4724070450097, + "range": "± 2.38%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 948.3616438356134, + "range": "± 1.06%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7122.40567514674, + "range": "± 0.78%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 346.5185909980426, + "range": "± 2.07%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 347.25048923679014, + "range": "± 1.87%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 348.36888454011694, + "range": "± 1.91%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2256.8590998043114, + "range": "± 1.83%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3348.450097847347, + "range": "± 0.89%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5898.365949119416, + "range": "± 0.63%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3589.573385518604, + "range": "± 0.92%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5266.256360078254, + "range": "± 1.07%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9009.331702543925, + "range": "± 1.43%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5102.496086105664, + "range": "± 0.85%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7340.281800391405, + "range": "± 0.77%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12174.765166340621, + "range": "± 0.58%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2720.491585127196, + "range": "± 0.79%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 116233.97847358105, + "range": "± 0.63%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 116452.16438356153, + "range": "± 0.62%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23353.090019569034, + "range": "± 0.68%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 235.57045009784497, + "range": "± 1.32%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1167.7178082191683, + "range": "± 0.42%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "4da0b8279e54f93d760fa078b5f0103c43c555b8", + "message": "Report Derivations (#1148)\n\n- Derive columns from existing columns.\n- One or multiple passes.\n- New \"aggregate-preview\" report which includes the new \"diff\" column\n making use of this feature.\n- Add documentation\n- Deprecates the `BASELINE_EXPRESSIONS` option\n- nl2br in HTML report for description", + "timestamp": "2026-06-07T11:40:05+01:00", + "tree_id": "77ea4b88bd97ae1d9578a0e039cac39335914c2e", + "url": "https://github.com/phpbench/phpbench/commit/4da0b8279e54f93d760fa078b5f0103c43c555b8" + }, + "date": 1780828845857, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1437.781409001963, + "range": "± 1.22%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 76.02446183952868, + "range": "± 2.04%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 67.78317025440306, + "range": "± 2.18%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 948.5890410958818, + "range": "± 0.67%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7340.223874755323, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 324.82876712328743, + "range": "± 2.81%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 335.0577299413002, + "range": "± 2.27%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 335.59491193737983, + "range": "± 2.24%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2341.7690802348034, + "range": "± 2.05%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3508.782778865013, + "range": "± 0.56%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5922.218199608615, + "range": "± 1.14%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3784.0782778864186, + "range": "± 2.04%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5629.767123287557, + "range": "± 1.69%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9115.519569471731, + "range": "± 1.50%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5513.7573385518, + "range": "± 1.42%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7838.204500978491, + "range": "± 0.67%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12506.34931506864, + "range": "± 1.54%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2445.7217221134906, + "range": "± 1.05%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 134329.7710371817, + "range": "± 1.55%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 134210.29158512584, + "range": "± 1.85%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 24368.281800391516, + "range": "± 1.18%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 248.36751467710465, + "range": "± 1.07%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1140.724461839533, + "range": "± 1.06%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "3d13c0d5dcf8730a67b70fa7fb03b4556b5cc0fe", + "message": "Update CHANGELOG", + "timestamp": "2026-06-08T20:09:20+01:00", + "tree_id": "9f1226f877cdefc8b3535ea39653b63784e0ce43", + "url": "https://github.com/phpbench/phpbench/commit/3d13c0d5dcf8730a67b70fa7fb03b4556b5cc0fe" + }, + "date": 1780945808169, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1417.408219178083, + "range": "± 1.05%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 76.2197651663393, + "range": "± 2.33%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.30782778864877, + "range": "± 2.39%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 947.3890410958861, + "range": "± 0.79%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7280.481213307257, + "range": "± 1.38%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 339.1555772994127, + "range": "± 1.78%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 332.60958904109884, + "range": "± 2.69%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 329.9021526418786, + "range": "± 1.98%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2287.749510763263, + "range": "± 1.20%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3437.1497064579758, + "range": "± 1.06%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5733.1780821917555, + "range": "± 0.95%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3610.652641878668, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5460.598825831672, + "range": "± 1.21%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 9103.078277886347, + "range": "± 1.74%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5301.772994129156, + "range": "± 1.73%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7797.063600782756, + "range": "± 1.90%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12539.71428571425, + "range": "± 2.09%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2432.646575342472, + "range": "± 1.02%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 133604.2328767113, + "range": "± 1.12%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 132292.60469667264, + "range": "± 1.48%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 24563.71428571384, + "range": "± 1.38%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 248.04970645792577, + "range": "± 1.88%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1137.8266144813858, + "range": "± 0.51%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "committer": { + "email": "daniel@dantleech.com", + "name": "Daniel Leech", + "username": "dantleech" + }, + "distinct": true, + "id": "7493f63fd8188e25d917bfdb29f10a797c2c55e2", + "message": "Update doc to provide more reliable diff example", + "timestamp": "2026-06-09T20:39:02+01:00", + "tree_id": "dfafcbae5674844f5291d46bca7627094f5c4226", + "url": "https://github.com/phpbench/phpbench/commit/7493f63fd8188e25d917bfdb29f10a797c2c55e2" + }, + "date": 1781033998584, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1443.2962818003746, + "range": "± 1.71%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 73.76810176125302, + "range": "± 2.42%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.04520547945077, + "range": "± 2.52%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 964.1884540117344, + "range": "± 2.11%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7105.36086105681, + "range": "± 2.76%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 336.6780821917804, + "range": "± 2.93%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 336.5851272015634, + "range": "± 2.88%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 332.2690802348335, + "range": "± 2.01%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2238.428571428585, + "range": "± 2.34%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3367.2602739725453, + "range": "± 2.42%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5614.600782778897, + "range": "± 2.91%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3640.575342465745, + "range": "± 2.20%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5444.502935420702, + "range": "± 1.53%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8932.369863013475, + "range": "± 2.75%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5240.075342465658, + "range": "± 1.69%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7524.369863013677, + "range": "± 1.16%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12387.089041095656, + "range": "± 2.45%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2762.28180039137, + "range": "± 1.47%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 119127.34050880629, + "range": "± 1.07%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 119865.00782778696, + "range": "± 0.73%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23501.30332681042, + "range": "± 1.47%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 232.99041095890524, + "range": "± 1.75%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1166.512524461838, + "range": "± 1.77%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + } + ] + }, + { + "commit": { + "author": { + "email": "dan.t.leech@gmail.com", + "name": "dantleech", + "username": "dantleech" + }, + "committer": { + "email": "noreply@github.com", + "name": "GitHub", + "username": "web-flow" + }, + "distinct": true, + "id": "eac0a110acba2124a29d06481f53d7d0401e54b5", + "message": "Do not show \"ERR\" if baseline not there (#1154)", + "timestamp": "2026-06-14T19:27:50+01:00", + "tree_id": "58762b597ab4f798e535dcf5191985327baad2ae", + "url": "https://github.com/phpbench/phpbench/commit/eac0a110acba2124a29d06481f53d7d0401e54b5" + }, + "date": 1781461709264, + "tool": "customSmallerIsBetter", + "benches": [ + { + "name": "ExpressionGeneratorBench::benchGenerate", + "value": 7339.508219178014, + "range": "± 1.64%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,0)", + "value": 328.2191780821927, + "range": "± 2.68%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,0)", + "value": 331.6164383561675, + "range": "± 1.85%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,0)", + "value": 331.52054794520336, + "range": "± 2.56%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,25)", + "value": 2227.069471624254, + "range": "± 0.99%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,25)", + "value": 3381.132093933442, + "range": "± 1.41%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,25)", + "value": 5735.424657534215, + "range": "± 0.66%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,50)", + "value": 3627.748532289599, + "range": "± 1.53%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,50)", + "value": 5428.977495107582, + "range": "± 2.08%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,50)", + "value": 8860.753424657505, + "range": "± 1.52%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (text,75)", + "value": 5174.2622309198005, + "range": "± 2.61%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (bar_chart_aggregate,75)", + "value": 7671.75342465756, + "range": "± 2.15%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "ComponentGeneratorBench::benchGenerate (table_aggregate,75)", + "value": 12645.741682974563, + "range": "± 1.65%", + "unit": "μs", + "extra": "10 iterations, 2 revs" + }, + { + "name": "HtmlRendererBench::benchRender", + "value": 2487.1463796478083, + "range": "± 0.76%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "AssertionProcessorBench::benchAssert", + "value": 954.4041095890321, + "range": "± 0.59%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp. w/tol)", + "value": 74.5751467710364, + "range": "± 2.26%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "ParserBench::benchEvaluate (comp.)", + "value": 66.43992172211348, + "range": "± 1.34%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRowArrays", + "value": 246.16438356164514, + "range": "± 2.02%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "DataFrameBench::benchCreateFromRecords", + "value": 1125.9391389432392, + "range": "± 0.62%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "VariantSummaryFormatterBench::benchFormat", + "value": 1423.0765166340632, + "range": "± 0.87%", + "unit": "μs", + "extra": "10 iterations, 10 revs" + }, + { + "name": "RunCommandBench::benchDefault", + "value": 130768.33072406825, + "range": "± 1.07%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchInBand", + "value": 129478.91780822005, + "range": "± 1.43%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + }, + { + "name": "RunCommandBench::benchNoEnv", + "value": 23535.882583170496, + "range": "± 0.99%", + "unit": "μs", + "extra": "10 iterations, 1 revs" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/benchmarks/index.html b/benchmarks/index.html new file mode 100644 index 000000000..6c887805e --- /dev/null +++ b/benchmarks/index.html @@ -0,0 +1,281 @@ + + + + + + + Benchmarks + + + + +
+ + + + + + + diff --git a/bin/build-phar.sh b/bin/build-phar.sh index a90984480..5c572d349 100755 --- a/bin/build-phar.sh +++ b/bin/build-phar.sh @@ -5,7 +5,7 @@ set -e mkdir -p build cd build -wget -O box.phar https://github.com/box-project/box/releases/download/4.5.1/box.phar +wget -O box.phar https://github.com/box-project/box/releases/download/3.11.1/box.phar php box.phar compile -c ../box.json.gh-release if [[ "$GPG_SIGNING" != '' ]] ; then @@ -16,7 +16,7 @@ if [[ "$GPG_SIGNING" != '' ]] ; then echo "Sign Phar" - echo "$GPG_PASSPHRASE" | gpg --command-fd 0 --passphrase-fd 0 --pinentry-mode loopback -u 676674024C0D866B --batch --detach-sign --armor --output phpbench.phar.asc phpbench.phar + echo "$GPG_PASSPHRASE" | gpg --command-fd 0 --passphrase-fd 0 --pinentry-mode loopback -u 15E1F8E2B149E6F5 --batch --detach-sign --armor --output phpbench.phar.asc phpbench.phar fi cd - diff --git a/box.json.dist b/box.json.dist index b41b5a6f9..076be86ac 100644 --- a/box.json.dist +++ b/box.json.dist @@ -21,6 +21,7 @@ ], "git-commit-short": "git_version", "intercept": true, + "key": ".travis/phpbench-phar-private.pem", "main": "bin/phpbench.php", "output": "phpbench.phar", "stub": true diff --git a/box.json.gh-release b/box.json.gh-release index 255f2a0a7..e857432fe 100644 --- a/box.json.gh-release +++ b/box.json.gh-release @@ -2,14 +2,14 @@ "compression": "GZ", "directories": [ "lib", - "extensions", - "templates" + "extensions" ], "files": [ "LICENSE" ], "finder": [ { + "name": "{\\.[php]}", "exclude": [ "tests", "test" diff --git a/box.phar b/box.phar new file mode 100755 index 000000000..ce6b69a6d Binary files /dev/null and b/box.phar differ diff --git a/compose.yaml b/compose.yaml deleted file mode 100755 index 5f76bfe81..000000000 --- a/compose.yaml +++ /dev/null @@ -1,5 +0,0 @@ -services: - php: - image: php:8.4.0RC2-zts-alpine3.20 - volumes: - - .:/app diff --git a/composer.json b/composer.json index 2b056683a..57c43a8e6 100644 --- a/composer.json +++ b/composer.json @@ -2,114 +2,88 @@ "name": "phpbench/phpbench", "description": "PHP Benchmarking Framework", "license": "MIT", - "keywords": [ - "benchmarking", - "optimization", - "performance", - "profiling", - "testing" - ], "authors": [ { "name": "Daniel Leech", "email": "daniel@dantleech.com" } ], + "minimum-stability": "dev", + "prefer-stable": true, "require": { - "php": "^8.2", + "php": "^7.2 || ^8.0", "ext-dom": "*", "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", "ext-tokenizer": "*", - "doctrine/annotations": "^2.0", - "phpbench/container": "^2.2", - "psr/log": "^1.1 || ^2.0 || ^3.0", + "beberlei/assert": "^2.4 || ^3.0", + "doctrine/annotations": "^1.2.7", + "doctrine/dbal": "~2.5", + "padraic/phar-updater": "^1.0", + "phpbench/container": "^2.1", + "phpbench/dom": "~0.3.0", + "psr/log": "^1.1", "seld/jsonlint": "^1.1", - "symfony/console": "^6.1 || ^7.0 || ^8.0", - "symfony/filesystem": "^6.1 || ^7.0 || ^8.0", - "symfony/finder": "^6.1 || ^7.0 || ^8.0", - "symfony/options-resolver": "^6.1 || ^7.0 || ^8.0", - "symfony/process": "^6.1 || ^7.0 || ^8.0", - "webmozart/glob": "^4.6" + "symfony/console": "^4.2 || ^5.0", + "symfony/filesystem": "^4.2 || ^5.0", + "symfony/finder": "^4.2 || ^5.0", + "symfony/options-resolver": "^4.2 || ^5.0", + "symfony/process": "^4.2 || ^5.0", + "webmozart/path-util": "^2.3" }, "require-dev": { - "dantleech/invoke": "^2.0", - "ergebnis/composer-normalize": "^2.39", - "jangregor/phpstan-prophecy": "^2.0", - "php-cs-fixer/shim": "^3.9", - "phpspec/prophecy": "^1.22", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^11.5", - "rector/rector": "^2.2", - "sebastian/exporter": "^6.3.2", - "symfony/error-handler": "^6.1 || ^7.0 || ^8.0", - "symfony/var-dumper": "^6.1 || ^7.0 || ^8.0" + "dantleech/invoke": "^1.2", + "friendsofphp/php-cs-fixer": "^2.13.1", + "jangregor/phpstan-prophecy": "^0.8.1", + "phpspec/prophecy": "^1.12", + "phpstan/phpstan": "^0.12.7", + "phpunit/phpunit": "^8.5.8 || ^9.0", + "symfony/error-handler": "^5.2", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "scripts": { + "integrate": [ + "vendor/bin/php-cs-fixer fix", + "vendor/bin/phpstan analyse -c phpstan.neon.dist", + "vendor/bin/phpunit", + "bin/phpbench run --revs=1 --iterations=1", + "bin/phpbench run --profile=examples --revs=1 --iterations=1", + "@docs" + ], + "docs": [ + "rm -Rf docs/build", + "bin/phpbench config:dump-reference > docs/configuration.rst", + "make -C docs html" + ] }, "suggest": { "ext-xdebug": "For Xdebug profiling extension." }, - "minimum-stability": "stable", - "prefer-stable": true, + "config": { + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "psr-4": { "PhpBench\\": "lib/", - "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/" - }, - "files": [ - "lib/Report/Func/functions.php" - ] + "PhpBench\\Extensions\\XDebug\\": "extensions/xdebug/lib/", + "PhpBench\\Extensions\\Reports\\": "extensions/reports/lib/" + } }, "autoload-dev": { "psr-4": { + "PhpBench\\Tests\\": "tests/", "PhpBench\\Examples\\": "examples/", - "PhpBench\\Extensions\\XDebug\\Tests\\": "extensions/xdebug/tests/", - "PhpBench\\Tests\\": "tests/" + "PhpBench\\Extensions\\XDebug\\Tests\\": "extensions/xdebug/tests/" } }, "bin": [ "bin/phpbench" - ], - "config": { - "allow-plugins": { - "ergebnis/composer-normalize": true, - "phpstan/extension-installer": true - }, - "audit": { - "block-insecure": false - }, - "sort-packages": true - }, - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "scripts": { - "docs": [ - "rm -Rf docs/build", - "bin/phpbench doc:config-reference > docs/configuration.rst", - "bin/phpbench doc:service-options docs/report-generators/options generator", - "bin/phpbench doc:service-options docs/report-renderers/options renderer", - "bin/phpbench doc:service-options docs/report-components/options component", - "bin/phpbench doc:service-options docs/executors/options executor", - "make -C docs html" - ], - "integrate": [ - "@composer normalize --indent-size=4 --indent-style=space", - "vendor/bin/php-cs-fixer fix", - "vendor/bin/phpstan analyse -c phpstan.neon.dist --memory-limit=-1", - "vendor/bin/phpunit", - "bin/phpbench run --revs=1 --iterations=2", - "bin/phpbench run --profile=examples --revs=1 --iterations=1 --report=examples", - "@docs", - "@schema" - ], - "schema": [ - "bin/phpbench doc:config-schema > phpbench.schema.json" - ] - } + ] } diff --git a/docs/.doctor-rst.yaml b/docs/.doctor-rst.yaml index d4e0a9032..218b969cc 100644 --- a/docs/.doctor-rst.yaml +++ b/docs/.doctor-rst.yaml @@ -6,6 +6,7 @@ rules: composer_dev_option_at_the_end: ~ correct_code_block_directive_based_on_the_content: ~ deprecated_directive_should_have_version: ~ + indention: ~ lowercase_as_in_use_statements: ~ max_blank_lines: max: 2 @@ -28,6 +29,7 @@ rules: valid_inline_highlighted_namespaces: ~ valid_use_statements: ~ versionadded_directive_should_have_version: ~ + yaml_instead_of_yml_suffix: ~ versionadded_directive_major_version: major_version: 1 diff --git a/docs/_templates/navigation.html b/docs/_templates/navigation.html index 2b47fb096..83c4d3107 100644 --- a/docs/_templates/navigation.html +++ b/docs/_templates/navigation.html @@ -1,5 +1,5 @@
-{{ toctree(collapse=True,includehidden=False,maxdepth=3) }} +{{ toctree(collapse=True,includehidden=False) }} {% if theme_extra_nav_links %}