vtebench 0.3.1

Terminal emulators benchmark
# vtebench

A tool for benchmarking terminal emulator PTY read performance.

## Disclaimer

This benchmark is not sufficient to get a general understanding of the
performance of a terminal emulator. It lacks support for critical factors like
frame rate or latency. The only factor this benchmark stresses is the speed at
which a terminal reads from the PTY. If you do not understand what this means,
please do not jump to any conclusions from the results of this benchmark.

## Usage

vtebench accepts benchmarks as executables and uses their stdout as benchmark
payload. By default benchmarks are read from the `./benchmarks` directory, which
contains a good selection of benchmarks already. Benchmarks in vtebench are
defined as a directory with a `benchmark` and an optional `setup` executable.

To just run all the default benchmarks in the repository, you can run the
following after setting up a Rust toolchain:

```
cargo run --release
```

## Plotting

vtebench contains a script for automatically plotting results using `gnuplot`.
To do this you first need to output the benchmark results in the `.dat` format:

```
cargo run --release -- --dat results.dat
```

After having generated the `.dat` file, you can then pass it to the `gnuplot.sh`
script to generate the SVG plot:

```
./gnuplot.sh results.dat output.svg
```

You can combine any number of results by passing them to the gnuplot script:

```
./gnuplot.sh *.dat output.svg
```

## Contributing Benchmarks

If you have found benchmarks that might provide insightful information, or show
significant differences between different terminals and version, you can send a
pull request to add them to the default benchmark collection.

To do so, you just need to create a new directory in the `./benchmarks`
directory and add a `benchmark` and an optional `setup` executable. The stdout
of the benchmark will automatically be repeated to fill a reasonable minimum
sample size, so make sure to take that into account and move everything into
`setup` that should only be done once.