- Bump minimum PHP version to 8.1
- Allow Symfony 7.0 @keulinho
- Add documentation for adding env providers @GromNaN
Improvements:
- Use latest version of Box
- Fixing build
Improvements:
- Fix deprecation warning when using blinken logger @tavaresmatheus
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.
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
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 ofglob
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
Bug fixes:
- Allow multiple
Assert
annotations #996 @nyamsprod
Bug fixes:
- New "CouldNotLoadMetadata" exception was located in the
tests
folder and was not available when phpbench was used as a dependency.
Improvements
- Show solidarity 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
Improvements:
- Allow
psr/log
2.x
and3.x
Bug fixes:
- Parameters seem to be converted to strings when storing/retrieving #959
Bug fixes:
- Fix non-existing mappings in composer file #955 @Dgame
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
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
- Fix bug with misassigned labels in bar chart #931
- Safely removed non-functioning config option
report.html_output_dir
#930
- Removing PHP8.1 deprecations - @Crell
- Removing PHP7.2 support
Bug fixes:
- Prevent registering #[ParamProviders(...)] multiple times when benchmark methods are inherited #918 - @ocramius
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
andcount
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 tolog
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).
Bug fix:
runner.executor
setting is ineffective and related bugs #880
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.
Bug fix:
- Fix incorrect benchmark column definition in report #840
- Fix
--ansi
flag not be propagated to report output #844
Bug fix:
- Error with bare report when DateTime used as param #832
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
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
B/C breaks:
- Removed
self-update
functionality (suggest usingphive
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 [documentation(https://phpbench.readthedocs.io/en/latest/configuration.html) for a full reference. - Removed
time_unit
andtime_mode
configuration settings, as they are replaced byrunner.time_unit
andrunner.time_mode
. - Environment provider
baseline
renamed tosampler
to avoid concept-conflict with the runner baselines.
Improvements:
- Removed "summary" line from default progress output.
- Automatically detect time or memory units by default, added meta-units
time
andmemory
- Unconditionally enable
xdebug
extension (previously the entire extension was hidden if Xdebug wasn't installed)
B/C Breaks:
- Extensions grouping related functionalities have been extracted from the
CoreExtension
, this will change the location of some constants used (e.g.CoreExtension::TAG_PROGRESS_LOGGER
is nowRunnerExtension::PROGRESS_LOGGER
. - Renamed
travis
progress logger toplain
- Removed awareness of
CONTINUOUS_INTEGRATION
environment variable
Features:
- Added
--working-dir
option - Option to include the baseline rows in the
expression
report. - Progress output is sent to STDERR, report output to STDOUT (enable you to pipe the output)
- Allow
--theme=
selection and configuration. - Allow benchmarks to be configued in the config (
runner.{iterations,revs,time_unit,mode,etc}
) - Include collected environmental information in the report data #789
- Allow providers to be enabled/disabled via.
env.enabled_providers
#789 - Support
@RetryThreshold
annotation, attribute, andrunner.retry_threshold
configuration.
Improvements:
- "local" executor will include non-existing benchmark classes and bootstrap
- Configuation options have generated documentation
- Preserve types in env information
- Make default true color theme compatible with light backgrounds.
- Added
vertical
layout tobare
report (vertical: true
). - Removed
best
andworst
columns by default from default report. - Default to showing all columns in expression report
- Standard deviation in
default
report is shown as time - Relative SD is color gradiated
- Trunacte long syntax error messages
Other:
- Automatically sign PHAR on release
BC Breaks:
- Removed
table
report generator, it is replaced by theexpression
generator which is now used to produce thedefault
andaggregate
reports. The output and configuration is largely the same, but some features have been removed. html
andmarkdown
output formats have been removed temporarily.
Features:
- Introduced
bare
report generator - provides all raw available report data - Introduced
display_as_time
function to handle formatting time with throughput. - Null
coalesce
function introduced in expression language
Improvements:
- Dynamically resolve timeunit / precision from expression (progress/report) #775
- Support specificaion of display-as precision in expression language
- Allow the display unit to be evaluated (for dynamically determining the unit based on the subject's preference)
- Make the display unit a node - allowing it to be pretty printed.
- Improved memory formatting (thousands separator, use abbreviated suffix)
- Support true color expression rendering #767
- Added
expression
report generator - will eventually replace thetable
report used foraggregate
anddefault
reports. - Added
--format
to customize the summary shown in progress loggers - String concatenation for expression language
- Show debug details (process spawning) with
-vvv
- Support Xdebug 3
Bug fixes:
- @OutputTimeUnit doesn't propagate to default expression time unit #766
- Support for PHP 8 Attributes
Backward compatiblity breaks:
--uuid
renamed to--ref
andtag:
prefix removed #740- No warnings - if assertion fails within tolerance zone then it is OK
- Assertion DSL has been replaced (only applicable vs. previous alpha versions)
Features:
Improvements:
- Show difference to baseline in progress loggers.
- Highlight assertion failures.
Bug fixes:
- Numeric tags cause an error #717
- Benchmark errors cause reports to error
- Undefined console formatter
subtitle
#729 - Missing formatters not defined in correct place #727
Improvements:
- Colourful indication of success/failure/warnings when assertions are used.
- Allow multiple paths to be specified in config
- Add type restrictions to config values
Backward compatiblity breaks:
BenchmarkExecutorInterface#execute()
must now return anExecutionResults
object.TemplateExecutor
: expect anarray
for the time measurement result instead of anint
.- Extensions use the Symfony
OptionsResolver
instead of provding an array of default values (which is in line with how other parts of PHPBench are working). - Executors accept a single, immutable
ExecutionContext
instead of the mutableSubjectMetadata
andIteration
- Renamed the
microtime
executor toremote
. OutputInterface
is injected from the DI conatiner,OutputAwareInterface
has been removed.
Features:
- Introduced
remote_script_remove
andremote_script_path
options to assist in debugging. - Added
local
executor - execute benchmarks with in the same process as PHPBench.
Improvements:
- Decorator added to improve error reporting for method executors.
- Benchmarks executed as they are found (no eager metadata loading)
- Allow direct reference to services (e.g.
--executor=debug
without need for adebug
configuration).
- PHP 8.0 compatibility
Backward compatibility breaks:
- DBAL extension removed.
- PHPBench Reports extension removed.
- Removed Xdebug Trace integration
- Removed
--query
featre (only worked with DBAL, too complex). - Removed
--context
(depreacted in favor of--tag
). - Removed
archive
anddelete
commands. - Assertions now accept a single expression rather than a set of configuration options.
- Type hints have been added in most places - possibly causing issues with any extensions.
- Assets (storage, xdebug profiles) are now placed in
.phpbench
- Services referenced via. fully qualified class names instead of strings.
Features:
- Configuration profiles
- Xdebug extension is loaded by default if extension is loaded
- Baseline: Specify baseline suite when running benchmarks and show differences in reports #648
- Assert against the baseline
- Show PHP version and the status of Xdebug and Opcache in the runner output #649
- Add
@Timeout
to enable a timeout to be specified for any given benchmark - @dantleech #614
Improvements
- All assets now placed in
.phpbench
directory in CWD (instead of./_storage
and./xdebug
--tag
implicitly stores the benchmark (no need to additionally use--store
)- Decrease benchmark overhead by rendering parameters in-template - @marc-mabe
Bugfixes:
- Use
text
instead ofstring
for envrionment key for DBAL storage - @flobee - Numeric tags are not found.
- Support for Symfony 5
- Dropped support for Symfony < 4.2
- Minimum version of PHP is 7.2
Bug fix:
- Fix PHP 7.4 bug for baseline script (@julien-boudry)
BC Break:
- The ExecutorInterface has been
removed and replaced by the
BenchmarkExecutorInterface
,MethodExecutorInterface
andHealthCheckInterface
. - The Executor namespace has been moved from
PhpBench\Benchmark\Executor
toPhpBench\Executor
.
Features:
- Support for named parameters #574
- Replaces
params
column in reports withset
(showing param set name) by default - Progress loggers show param name.
- Serialized XML documents have a new element
parameter-set
to contain parameter elements.
- Replaces
Improvements:
- Various CI and code quality fixes, thanks @localheinz
groups
column no longer shown by default in reports.- HTML report changed from XHTML to HTML5.
- Changed PHPStan level from 1 to 4.
- Minimumum supported PHP version is 7.1
- Renamed Factory => MetadataFactory
- Replace Style CI with PHP-CS-Fixer, fixes #537
- Allow any callable as a parameter provider. Fixes #533
- Remove benchmark dependency on JSON extension, use
serialize
instead. Fixes #534 - Allow Executor to be specified per benchmark/subject.
- Allow
@ParamProviders
to return aGenerator
. Fixes #529. - Fix computation exception with
--stop-on-error
and multiple variants #563
- Assertions docs
- Added
--disable-php-ini
option - Report if opcode extension is enabled in env.
- Show enabled PHP extensions in env.
- PHP 7 only
- Fixed merging of PHP ini config
- Fixed Blackfire integration (#480 @torinaki )
- Internal refactoring!
- Aggregate report:
diff
column now shows multiplier (x
times slower). - Various travis imporvements @localheinz
- Various CS fixes @villfa @Nyholm
- Microtimer optimization @marc-mabe
- Symfony 4 support @lcobucci
- Bumped minimum requirement to PHP 5.6
- Allow custom subject pattern #449
- No exception for empty file.
- Allow failure on HHVM due to lstrojny/functional-php#114
- Prevent division by zero #451
- Use non-logarithmic scale for diff column #445
- Column labels
- Non-strict JSON parser (e.g.
--report='extends: aggregate, cols: [ benchmark ]'
- Dropped JSON schema, introduced Symfony Options Resolver.
- Show better exception message when beforeMethod is static
- Stop on error
run --stop-on-error
- Allow additional extension autoloader to be configured
- Allow configuration of launcher.
- Refactored annotation reader (allow namespaced annotations, possibility to add benchmark annotations to PHPUnit tests).
- Initial Xdebug function trace support
- Container split into independent library
- Fix skipping benchmarks