devtools-timeline-model
Parse raw trace data into the Chrome DevTools' structured profiling data models
Last updated 9 years ago by paulirish .
Apache-2.0 · Repository · Bugs · Original npm · Tarball · package.json
$ gnpm install devtools-timeline-model 
SYNC missed versions from official npm registry.

devtools-timeline-model Build Status

Parse raw trace data into the Chrome DevTools' structured profiling data models

If you use something like big-rig or automated-chrome-profiling you may end up with raw trace data. It's pretty raw. This module will parse that stuff into something a bit more consumable, and should help you with higher level analysis.

Install

$ npm install --save devtools-timeline-model

NPM devtools-timeline-model package

Usage

var filename = 'demo/mdn-fling.json'
var events = require('fs').readFileSync(filename, 'utf8')

var DevtoolsTimelineModel = require('devtools-timeline-model');
// events can be either a string of the trace data or the JSON.parse'd equivalent
var model = new DevtoolsTimelineModel(events)

// tracing model
model.tracingModel()
// timeline model, all events
model.timelineModel()
// interaction model, incl scroll, click, animations
model.interactionModel()
// frame model, incl frame durations
model.frameModel()
// filmstrip model, incl screenshots
model.filmStripModel()

// topdown tree
model.topDown()
// bottom up tree
model.bottomUp()
// bottom up tree, grouped by URL
model.bottomUpGroupBy('URL') // accepts: None Category Subdomain Domain URL EventName

// see example.js for API examples.

image

These objects are huge. You'll want to explore them in a UI like devtool. image

Dev

npm i
brew install entr
gls index.js lib/*.js | entr node example.js

Sandboxing WebInspector for Node

Requiring the DevTools frontend looks rather straightforward at first. (global.WebInspector = {}, then start require()ing the files, in dependency order). However, there are two problems that crop up:

  1. The frontend requires ~five globals and they currently must be added to the global context to work.
  2. utilities.js adds a number of methods to native object prototypes, such as Array, Object, and typed arrays.

devtools-timeline-model addresses that by sandboxing the WebInspector into it's own context. Here's how it works:

index.js
// First, sandboxed contexts don't have any globals from node, so we whitelist a few we'll provide for it.
var glob = { require: require, global: global, console: console, process, process, __dirname: __dirname }
// We read in our script to run, and create a vm.Script object 
var script  = new vm.Script(fs.readFileSync(__dirname + "/lib/timeline-model.js", 'utf8'))
// We create a new V8 context with our globals
var ctx = vm.createContext(glob)
// We evaluate the `vm.Script` in the new context
var output = script.runInContext(ctx)
(sandboxed) timeline-model.js
// establish our sandboxed globals
this.window = this.self = this.global = this

// We locally eval, as the node module scope isn't appropriate for the browser-centric DevTools frontend
function requireval(path){
  var filesrc = fs.readFileSync(__dirname + '/node_modules/' + path, 'utf8');
  eval(filesrc + '\n\n//# sourceURL=' + path);
}

// polyfills, then the real chrome devtools frontend
requireval('../lib/api-stubs.js')
requireval('chrome-devtools-frontend/front_end/common/Object.js')
requireval('chrome-devtools-frontend/front_end/common/SegmentedRange.js')
requireval('chrome-devtools-frontend/front_end/platform/utilities.js')
requireval('chrome-devtools-frontend/front_end/sdk/Target.js')
// ...
index.js
// After that's all done, we pull the local `instance` variable out, to use as our proxy object
this.sandbox = ctx.instance;

Debugging is harder, as most tools aren't used to this setup. While devtool doesn't work well, you can have it run lib/devtools-timeline-model.js directly, which is fairly succesful. The classic node-inspector does work pretty well with the sandboxed script, though the workflow is a little worse than devtool's.

License

Apache © Paul Irish

Current Tags

  • 1.4.0                                ...           latest (7 years ago)

33 Versions

  • 1.4.0                                ...           7 years ago
  • 1.3.1                                ...           8 years ago
  • 1.2.3                                ...           8 years ago
  • 1.1.7                                ...           8 years ago
  • 1.3.0                                ...           8 years ago
  • 1.2.2                                ...           8 years ago
  • 1.1.6                                ...           8 years ago
  • 1.1.5                                ...           8 years ago
  • 1.1.4                                ...           9 years ago
  • 1.1.3                                ...           9 years ago
  • 1.1.2                                ...           9 years ago
  • 1.1.1                                ...           9 years ago
  • 1.1.0                                ...           9 years ago
  • 1.0.19                                ...           9 years ago
  • 1.0.18                                ...           9 years ago
  • 1.0.17                                ...           9 years ago
  • 1.0.16                                ...           9 years ago
  • 1.0.15                                ...           9 years ago
  • 1.0.14                                ...           9 years ago
  • 1.0.13                                ...           9 years ago
  • 1.0.12                                ...           9 years ago
  • 1.0.11                                ...           9 years ago
  • 1.0.10                                ...           9 years ago
  • 1.0.9                                ...           9 years ago
  • 1.0.8                                ...           9 years ago
  • 1.0.7                                ...           9 years ago
  • 1.0.6                                ...           9 years ago
  • 1.0.5                                ...           9 years ago
  • 1.0.4                                ...           9 years ago
  • 1.0.3                                ...           9 years ago
  • 1.0.2                                ...           9 years ago
  • 1.0.1                                ...           9 years ago
  • 1.0.0                                ...           9 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 12
Last Day 0
Last Week 12
Last Month 0
Dependencies (2)
Dev Dependencies (2)
Dependents (2)

Copyright 2013 - present © cnpmjs.org | Home |