https://github.com/xtermjs/chrome-timeline
Write performance tests and get timeline profiling data from puppeteer.
https://github.com/xtermjs/chrome-timeline
Last synced: 9 months ago
JSON representation
Write performance tests and get timeline profiling data from puppeteer.
- Host: GitHub
- URL: https://github.com/xtermjs/chrome-timeline
- Owner: xtermjs
- Created: 2018-09-23T16:30:14.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-10-16T18:17:37.000Z (about 2 years ago)
- Last Synced: 2025-04-21T01:44:14.983Z (9 months ago)
- Language: TypeScript
- Size: 492 KB
- Stars: 14
- Watchers: 2
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
## chrome-timeline
Write performance tests and get the timeline profiling data from puppeteer (chromium).
### Example:
```js
const timeline = require('chrome-timeline').timeline;
timeline(async (runner) => {
// load something in chromium
await runner.page.goto('https://example.com');
// start a timeline profiling
await runner.tracingStart('TRACE_ABC');
// do something in the remote page
await runner.remote((done, window) => {
// this is within remote browser context
some_heavy_stuff_to_be_measured();
// call done when finished (sync variant)
done();
// or async example with setTimeout
setTimeout(done, 10000);
});
// stop the profiling
await runner.tracingStop();
});
```
By default `timeline` does a clean startup of a remote puppeteer chromium client,
runs the provided callback and exists the client afterwards.
This behavior can be changed by providing custom options (e.g. connecting to a running remote instance).
`timeline` returns a promise containing summaries of tracings that were done denoted
by the name (`'TRACE_ABC'` in the example).
### Tracing start default options
```js
tracingStartOptions: {
// path to trace file export (default: no file written)
path: null,
// whether the trace should contain screenshots
screenshots: true,
// profiling categories chrome understands
categories: [
'-*',
'v8.execute',
'blink.user_timing',
'latencyInfo',
'devtools.timeline',
'disabled-by-default-devtools.timeline',
'disabled-by-default-devtools.timeline.frame',
'toplevel',
'blink.console',
'disabled-by-default-devtools.timeline.stack',
'disabled-by-default-devtools.screenshot',
'disabled-by-default-v8.cpu_profile',
'disabled-by-default-v8.cpu_profiler',
'disabled-by-default-v8.cpu_profiler.hires'
]
}
```
### Tracing end default options
```js
tracingEndOptions: {
// save trace under timeline//runnerId_.trace
saveTrace: false,
// create a summary of trace data, also saved if saveTrace=true
createSummary: true,
// report uncommitted changes for current git branch in summary
reportUncommittedChanges: false,
}
```
### Summary
Summaries are returned by `timeline` for a single tracing, if `tracingEndOptions.createSummary=true`.
They contain various useful stats from a trace for further postprocessing:
```js
export interface ISummary extends IPostProcess {
// path to trace flie the summary belongs to (empty if tracingEndOptions.saveTrace=false)
traceFile: string;
// name of the trace as given to .tracingStart(name)
traceName: string;
// additional git repo stats (contains {isRepo: false} for non git repo projects)
repo: IRepoInfo;
// puppeteer profiling metadata (e.g. hardware setup, env data, cmdline)
metadata: {[key: string]: any};
// profiling summary as shown in the pie chart in devtools
summary: {[key: string]: number};
// top down tree events
topDown: IEvent[];
// bottom up tree events
bottomUp: IEvent[];
}
```