# benchmark

This application connects to another mojo application, collects traces during
indicated period of time and computes a number of results based on the collected
traces. It can be used to measure performance of a mojo app, provided that the
app being benchmarked participates in the [tracing
ecosystem](../../mojo/services/tracing/public/interfaces/tracing.mojom).

## Arguments

The benchmarking app **requires** the following arguments:

 - `--app=<app_url>` - url of the application to be benchmarked
 - `--duration=<duration_seconds>` - duration of the benchmark in seconds

The following arguments are **optional**:

 - `--trace-output=<output_file_path>` - local file path at which the collected trace
   will be written

Any other arguments are assumed to be descriptions of measurements to be
conducted on the collected trace data. Each measurement has to be of form:
`<measurement_type>/<trace_event_category>/<trace_event_name>`.

The following measurement types are available:

 - `time_until` - measures time until the first occurence of the event named
   `trace_event_name` in category `trace_event_category`.
 - `avg_duration` - measures average duration of all events named
   `trace_event_name` in category `trace_event_category`.

## Runner script

Devtools offers [a helper script](../../mojo/devtools/common/mojo_benchmark)
allowing to run a list of benchmarks in controlled caching conditions, both
on **Android** and **Linux**.
