123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #!/bin/bash
- #
- # Copyright 2013 the V8 project authors. All rights reserved.
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are
- # met:
- #
- # * Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above
- # copyright notice, this list of conditions and the following
- # disclaimer in the documentation and/or other materials provided
- # with the distribution.
- # * Neither the name of Google Inc. nor the names of its
- # contributors may be used to endorse or promote products derived
- # from this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- # This script reads in CSV formatted instruction data, and draws a stacked
- # graph in png format.
- defaultfile=arm64_inst.csv
- defaultout=arm64_inst.png
- gnuplot=/usr/bin/gnuplot
- # File containing CSV instruction data from simulator.
- file=${1:-$defaultfile}
- # Output graph png file.
- out=${2:-$defaultout}
- # Check input file exists.
- if [ ! -e $file ]; then
- echo "Input file not found: $file."
- echo "Usage: draw_instruction_graph.sh <input csv> <output png>"
- exit 1
- fi
- # Search for an error message, and if found, exit.
- error=`grep -m1 '# Error:' $file`
- if [ -n "$error" ]; then
- echo "Error message in input file:"
- echo " $error"
- exit 2
- fi
- # Sample period - period over which numbers for each category of instructions is
- # counted.
- sp=`grep -m1 '# sample_period=' $file | cut -d= -f2`
- # Get number of counters in the CSV file.
- nc=`grep -m1 '# counters=' $file | cut -d= -f2`
- # Find the annotation arrows. They appear as comments in the CSV file, in the
- # format:
- # # xx @ yyyyy
- # Where xx is a two character annotation identifier, and yyyyy is the
- # position in the executed instruction stream that generated the annotation.
- # Turn these locations into labelled arrows.
- arrows=`sed '/^[^#]/ d' $file | \
- perl -pe "s/^# .. @ (\d+)/set arrow from \1, graph 0.9 to \1, $sp/"`;
- labels=`sed '/^[^#]/d' $file | \
- sed -r 's/^# (..) @ (.+)/set label at \2, graph 0.9 "\1" \
- center offset 0,0.5 font "FreeSans, 8"/'`;
- # Check for gnuplot, and warn if not available.
- if [ ! -e $gnuplot ]; then
- echo "Can't find gnuplot at $gnuplot."
- echo "Gnuplot version 4.6.3 or later required."
- exit 3
- fi
- # Initialise gnuplot, and give it the data to draw.
- echo | $gnuplot <<EOF
- $arrows
- $labels
- MAXCOL=$nc
- set term png size 1920, 800 #ffffff
- set output '$out'
- set datafile separator ','
- set xtics font 'FreeSans, 10'
- set xlabel 'Instructions' font 'FreeSans, 10'
- set ytics font 'FreeSans, 10'
- set yrange [0:*]
- set key outside font 'FreeSans, 8'
- set style line 2 lc rgb '#800000'
- set style line 3 lc rgb '#d00000'
- set style line 4 lc rgb '#ff6000'
- set style line 5 lc rgb '#ffc000'
- set style line 6 lc rgb '#ffff00'
- set style line 7 lc rgb '#ff00ff'
- set style line 8 lc rgb '#ffc0ff'
- set style line 9 lc rgb '#004040'
- set style line 10 lc rgb '#008080'
- set style line 11 lc rgb '#40c0c0'
- set style line 12 lc rgb '#c0f0f0'
- set style line 13 lc rgb '#004000'
- set style line 14 lc rgb '#008000'
- set style line 15 lc rgb '#40c040'
- set style line 16 lc rgb '#c0f0c0'
- set style line 17 lc rgb '#2020f0'
- set style line 18 lc rgb '#6060f0'
- set style line 19 lc rgb '#a0a0f0'
- set style line 20 lc rgb '#000000'
- set style line 21 lc rgb '#ffffff'
- plot for [i=2:MAXCOL] '$file' using 1:(sum [col=i:MAXCOL] column(col)) \
- title columnheader(i) with filledcurve y1=0 ls i
- EOF
|