Index: mojo/devtools/common/docs/mojo_benchmark.md |
diff --git a/mojo/devtools/common/docs/mojo_benchmark.md b/mojo/devtools/common/docs/mojo_benchmark.md |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e274d7e775b6cefd6aa84be7ecdc150ba01d62d |
--- /dev/null |
+++ b/mojo/devtools/common/docs/mojo_benchmark.md |
@@ -0,0 +1,73 @@ |
+# mojo_benchmark |
+ |
+`mojo_benchmark` allows you to run performance tests for any Mojo application |
+that participates in the [tracing |
+ecosystem](https://github.com/domokit/mojo/blob/master/mojo/services/tracing/public/interfaces/tracing.mojom) |
+with no app changes required. |
+ |
+The script reads a list of benchmarks to run from a file, runs each benchmark in |
+controlled caching conditions with tracing enabled and performs specified |
+measurements on the collected trace data. |
+ |
+## Defining benchmarks |
+ |
+`mojo_benchmark` runs performance tests defined in a benchmark file. The |
+benchmark file is a Python dictionary of the following format: |
+ |
+```python |
+benchmarks = [ |
+ { |
+ 'name': '<name of the benchmark>', |
+ 'app': '<url of the app to benchmark>', |
+ 'shell-args': [], |
+ 'duration': <duration in seconds>, |
+ |
+ # List of measurements to make. |
+ 'measurements': [ |
+ '<measurement type>/<event category>/<event name>', |
+ ], |
+ }, |
+] |
+``` |
+ |
+The following types of measurements are available: |
+ |
+ - `time_until` - measures time until the first occurence of the specified event |
+ - `avg_duration` - measures the average duration of all instances of the |
+ specified event |
+ |
+## Caching |
+ |
+The script runs each benchmark twice. The first run (**cold start**) clears the |
+following caches before start: |
+ |
+ - url_response_disk_cache |
+ |
+The second run (**warm start**) runs immediately afterwards, without clearing |
+any caches. |
+ |
+## Time origin |
+ |
+The underlying benchmark runner records the time origin just before issuing the |
+connection call to the application being benchmarked. Results of `time_until` |
+measurements are relative to this time. |
+ |
+## Example |
+ |
+For an app that records a trace event named "initialized" in category "my_app" |
+once its initialization is complete, we can benchmark the initialization time of |
+the app (from the moment someone tries to connect to it to the app completing |
+its initialization) using the following benchmark file: |
+ |
+```python |
+benchmarks = [ |
+ { |
+ 'name': 'My app initialization', |
+ 'app': 'https://my_domain/my_app.mojo', |
+ 'duration': 10, |
+ 'measurements': [ |
+ 'time_until/my_app/initialized', |
+ ], |
+ }, |
+] |
+``` |