TraceVis

TraceVis is a performance visualization system for TraceMonkey. If TraceMonkey is built with TraceVis, and run with TraceVis enabled, then TraceMonkey will output a log of all its activity transitions. The log can be postprocessed into a visualization that can be used to rapidly diagnose many tracing-related performance issues.

So far, most of the documentation on TraceVis is contained in the announcement blog post.

Prerequisites

The visualization scripts require PIL (Python Imaging Library).

Building with TraceVis

These are the steps to build a JS shell with TraceVis, starting from a Mozilla source directory. These directions create an optimized build, because optimized builds are usually better for performance analysis.

cd js/src
autoconf213
mkdir opt-tracevis
cd opt-tracevis
../configure --enable-tracevis
make -j2

The resulting binary will be at dist/bin/js relative to the current directory.

Running with TraceVis

To run a shell with TraceVis:

dist/bin/js -j -T /tmp/tracevis.log myprogram.js

The TraceVis log file is a binary file consisting of a sequence of 8-byte records. There are two scripts for postprocessing the log files in js/src/tracevis.

Text Summary

python binlog.py /tmp/tracevis.log

This prints a summary of the log. The first part lists the time TraceMonkey spent in each major tracing activity. The second part lists the reasons TraceMonkey transitioned to the interpreter, and the amount of interpreter time charged to each reason.

Visualization

python vis.py /tmp/tracevis.log /tmp/tracevis.png

This creates a PNG format visualization of TraceMonkey activities. There is a color for each activity. Time goes forward down each column of pixels, then to the column on the right. The blog post linked above has examples of this output and how to analyze it.