Reports

PHPBench includes a reporting framework. Report generators provide report data which can subsequently be rendered by report renderer.

This guide will deal with generating reports and assume that the console renderer is used.

Generating Reports

To report after a benchmarking run:

phpbench run --report=aggregate

Multiple reports can be specified:

phpbench run --report=aggregate --report=env

The report command operates in a similar way but requires you to provide some data, either from XML dumps or by using a storage UUID or tag:

phpbench run --store
phpbench report --ref=latest --report=aggregate

For more information on storage see storage.

Configuring Reports

All reports can be configured either in the report configuration or directly on the command line using a simplified JSON encoded string instead of the report name:

To configure a report in phpbench.json:

{
    "runner.path": "NothingBench.php",
    "runner.executor": "debug",
    "report.generators": {
        "my-report": {
            "generator": "expression",
            "cols": [ "benchmark", "tag", "subject", "mean" ],
            "break": ["benchmark"]
        }
    }
}

Then run it with:

phpbench run --report=my-report

You can also configure reports directly from the command line using simplified JSON:

phpbench run --report='"generator": "expression", "cols": [ "benchmark", "tag", "subject", "mean" ], "break": ["benchmark"]'

In each case it is required to specify the generator key which corresponds to the registered name of the report generator.

You may also extend an existing report configuration:

phpbench run --report='extends: aggregate, break: ["benchmark", "set"]'

This will merge the given keys onto the configuration for the aggregate report.

Default Reports

aggregate

Shows aggregate details of each set of iterations:

+--------------+--------------+-----+------+-----+----------+----------+--------+
| benchmark    | subject      | set | revs | its | mem_peak | mode     | rstdev |
+--------------+--------------+-----+------+-----+----------+----------+--------+
| NothingBench | benchNothing |     | 1    | 1   | 100b     | 10.000μs | ±0.00% |
+--------------+--------------+-----+------+-----+----------+----------+--------+

It is uses the table generator, see Expression Report for more information.

default

The default report presents the result of each iteration:

{
    "runner.path": "NothingBench.php",
    "runner.executor": "debug",
    "runner.env_enabled_providers": ["test"],
    "report.generators": {
        "all": {
            "generator": "composite",
            "reports": [ "default", "aggregate", "env" ]
        }
    }
}

It is uses the table generator, see Expression Report for more information.

env

This report shows information about the environment that the benchmarks were executed in.

Suite E3X6AeMdP7L9E7E0X0A7McP1L8E1EdXbAbMbP7La xxxx-xx-xx xx-xx-xx
+----------+----------+-------+
| provider | key      | value |
+----------+----------+-------+
| test     | example1 | 1     |
| test     | example2 | 2     |
+----------+----------+-------+

Generator: Env.

Columns:

  • provider: Name of the environment provider (see PhpBench\Environment\Provider in the code for more information).
  • key: Information key.
  • value: Information value.

See the Environment reference for more information.

Note

The information available will differ depending on platform. For example, unit-sysload is unsurprisingly only available on UNIX platforms, where as the VCS field will appear only when a supported VCS system is being used.