TracerBench: Automated Chrome Tracing For Benchmarking
TracerBench Core
https://github.com/TracerBench/tracerbench/blob/master/README.md
Usage
$ npm install -g tracerbench
$ tracerbench COMMAND
running command...
$ tracerbench (-v|--version|version)
tracerbench/2.0.7 darwin-x64 node-v10.16.0
$ tracerbench --help [COMMAND]
USAGE
$ tracerbench COMMAND
...
Optional Config
The optional existance of a "tbconfig.json" file in the project root will be consumed by TracerBench and specifies default command flag options. Please note this file is optional, however is strongly recommended as this drastically speeds up running TracerBench tests succinctly Example:
{
"$schema": "https://raw.githubusercontent.com/TracerBench/tracerbench/master/packages/cli/tb-schema.json",
// the title of the report pdf file
"plotTitle": "tbconfig_base file",
"cpuThrottleRate": 2,
"tbResultsFolder": "../tracerbench-results",
"controlURL": "https://www.tracerbench.com/",
"experimentURL": "https://www.tracerbench.com/",
"url": "https://www.tracerbench.com/",
"tracingLocationSearch": "?tracing",
"regressionThreshold": "-100ms",
"appName": "tracerbench",
"network": "cable",
"markers": [
{
"start": "fetchStart",
"label": "jquery"
},
{
"start": "jqueryLoaded",
"label": "ember"
},
{
"start": "emberLoaded",
"label": "application"
},
{
"start": "startRouting",
"label": "routing"
},
{
"start": "willTransition",
"label": "transition"
},
{
"start": "didTransition",
"label": "render"
},
{
"start": "renderEnd",
"label": "afterRender"
}
],
"browserArgs": [
"--crash-dumps-dir=./tmp",
"--disable-background-timer-throttling",
"--disable-dev-shm-usage",
"--disable-cache",
"--disable-v8-idle-tasks",
"--disable-breakpad",
"--disable-notifications",
"--disable-hang-monitor",
"--safebrowsing-disable-auto-update",
"--setIgnoreCertificateErrors=true",
"--v8-cache-options=none"
],
"servers": [
{
"name": "control tracerbench-build_1.0.1234",
"url": "https://www.tracerbench.com/",
"dist": "./relative-path-to-control-dist-files/",
"har": "./relative-path-location-to-control-har-file/",
"socksPort": 8880
},
{
"name": "experiment tracerbench-build-2-78ffg6a678g95",
"url": "https://www.tracerbench.com/",
"dist": "./relative-path-to-experiment-dist-files/",
"har": "./relative-path-location-to-experiment-har-file/",
"socksPort": 8881
}
]
}
Example Travis-CI Integration
In this working example the travis-script.js
would be called from the travis yml file travis.yml
via yarn run <script>
included within your applications package.json (not shown) eg: yarn tracerbench:compare
.
The results of this test would resolve in
- The results are statistically significant
- The results contained a regression, however the regression is below a set threshold from
tbconfig.json
. (For example to mitigate against false-positives). - The results contained a regression and the delta was significant enough to cause concern. (Recommend running the test again with a higher sample size to confirm).
- The results are statistically insignificant. All is good.
FAQ
What exactly is contained within the tracerbench compare
"tracerbench-results.json"?
An overview of "tracerbench-results.json" is available here
What exactly is a HAR file?
HAR (HTTP Archive) is a file format used by several HTTP session tools to export the captured data. The format is basically a JSON object with a particular field distribution. In any case, please note that not all the fields are mandatory, and many times some information won't be saved to the file "Additional insight on Google's HAR Analyzer"
What exactly is contained within the output file "trace.json"?
The file "trace.json" is leveraged by TracerBench to capture an array of trace events. The interface of an individual trace event is essentially:
pid: number;
tid: number;
ts: number;
ph: TRACE_EVENT_PHASE;
cat: string;
name: string;
args: { [key: string]: any } | ARGS.STRIPPED;
dur?: number;
tts?: number;
tdur?: number;
use_async_tts?: number;
scope?: string;
id?: string;
id2?: | { local: string; } | { global: string; };
bp?: string;
bind_id?: string;
flow_in?: boolean;
flow_out?: boolean;
s?: TRACE_EVENT_SCOPE;
Commands
tracerbench compare
Compare the performance delta between an experiment and control
USAGE
$ tracerbench compare
OPTIONS
--browserArgs=browserArgs
(required) [default:
--crash-dumps-dir=./tmp,--disable-background-timer-throttling,--disable-dev-shm-usage,--disable-cache,--disable-v8-i
dle-tasks,--disable-breakpad,--disable-notifications,--disable-hang-monitor,--safebrowsing-disable-auto-update,--ign
ore-certificate-errors,--v8-cache-options=none] (Default Recommended) Additional chrome flags for the TracerBench
render benchmark. TracerBench includes many non-configurable defaults in this category.
--config=config
Specify an alternative directory rather than the project root for the tbconfig.json. This explicit config will
overwrite all.
--controlURL=controlURL
(required) [default: http://localhost:8000/] Control URL to visit for compare command
--cpuThrottleRate=cpuThrottleRate
(required) [default: 2] CPU throttle multiplier
--debug
Debug flag per command. Will output noisy command
--emulateDevice=iphone-4|iphone-5se|iphone-678|iphone-678-plus|iphone-x|blackberry-z30|nexus-4|nexus-5|nexus-5x|nexus-
6|nexus-6p|pixel-2|pixel-2-xl|lg-optimus-l70|nokia-n9|nokia-lumia-520|microsoft-lumia-550|microsoft-lumia-950|galaxy-s
-iii|galaxy-s5|kindle-fire-hdx|ipad-mini|ipad|ipad-pro|blackberry-playbook|nexus-10|nexus-7|galaxy-note-3|galaxy-note-
ii|laptop-with-touch|laptop-with-hidpi-screen|laptop-with-mdpi-screen
Emulate a mobile device screen size.
--emulateDeviceOrientation=horizontal|vertical
[default: vertical] Expected to be either "vertical" or "horizontal". Dictates orientation of device screen.
--experimentURL=experimentURL
(required) [default: http://localhost:8001/] Experiment URL to visit for compare command
--fidelity=fidelity
(required) [default: low] Directly correlates to the number of samples per trace. High is the longest trace time.
--headless
Run with headless chrome flags
--markers=markers
(required) [default: domComplete] User Timing Markers
--network=none | offline | dialup | 2g | edge | slow-3g | em-3g | dsl | 3g | fast-3g | 4g | cable | LTE | FIOS
(required) [default: none] Simulated network conditions.
--regressionThreshold=regressionThreshold
[default: 0ms] Regression threshold in negative milliseconds. eg -100ms
--report
Generate a PDF report directly after running the compare command.
--runtimeStats
Compare command output deep-dive stats during run.
--socksPorts=socksPorts
Specify a socks proxy port as browser option for control and experiment
--tbResultsFolder=tbResultsFolder
(required) [default: ./tracerbench-results] The output folder path for all tracerbench results
--tracingLocationSearch=tracingLocationSearch
(required) [default: ?tracing] The document location search param.
tracerbench create-archive
Creates an automated HAR file from a URL.
USAGE
$ tracerbench create-archive
OPTIONS
--browserArgs=browserArgs
(required) [default:
--crash-dumps-dir=./tmp,--disable-background-timer-throttling,--disable-dev-shm-usage,--disable-cache,--disable-v8-i
dle-tasks,--disable-breakpad,--disable-notifications,--disable-hang-monitor,--safebrowsing-disable-auto-update,--ign
ore-certificate-errors,--v8-cache-options=none] (Default Recommended) Additional chrome flags for the TracerBench
render benchmark. TracerBench includes many non-configurable defaults in this category.
--tbResultsFolder=tbResultsFolder
(required) [default: ./tracerbench-results] The output folder path for all tracerbench results
--url=url
(required) [default: http://localhost:8000/] URL to visit for create-archive, timings & trace commands
tracerbench help [COMMAND]
display help for tracerbench
USAGE
$ tracerbench help [COMMAND]
ARGUMENTS
COMMAND command to show help for
OPTIONS
--all see all commands in CLI
See code: @oclif/plugin-help
tracerbench marker-timings
Get list of all user-timings from trace
USAGE
$ tracerbench marker-timings
OPTIONS
--filter=filter User timing marks start with
--tbResultsFolder=tbResultsFolder (required) [default: ./tracerbench-results] The output folder path for all
tracerbench results
--traceFrame=traceFrame Specify a trace insights frame
--url=url (required) [default: http://localhost:8000/] URL to visit for create-archive,
timings & trace commands
tracerbench report
Parses the output json from tracerbench and formats it into pdf and html
USAGE
$ tracerbench report
OPTIONS
--config=config Specify an alternative directory rather than the project root for the
tbconfig.json. This explicit config will overwrite all.
--tbResultsFolder=tbResultsFolder (required) [default: ./tracerbench-results] The output folder path for all
tracerbench results
tracerbench trace
Parses a CPU profile and aggregates time across heuristics. Can optinally be vertically sliced with event names.
USAGE
$ tracerbench trace
OPTIONS
--cpuThrottleRate=cpuThrottleRate
(required) [default: 2] CPU throttle multiplier
--insights
Analyze insights from command.
--iterations=iterations
(required) [default: 1] Number of runs
--locations=locations
include locations in names
--network=none | offline | dialup | 2g | edge | slow-3g | em-3g | dsl | 3g | fast-3g | 4g | cable | LTE | FIOS
[default: none] Simulated network conditions.
--tbResultsFolder=tbResultsFolder
(required) [default: ./tracerbench-results] The output folder path for all tracerbench results
--url=url
(required) [default: http://localhost:8000/] URL to visit for create-archive, timings & trace commands