mirror of
https://github.com/DynamoRIO/dynamorio.git
synced 2026-10-12 02:02:04 +00:00
Left trailing spaces and tabs in libelftc patch files, in suite/tests/api/static.template, and in suite/tests/security-win32/except-execution.templatex (complex to remove there). SVN-Revision: 2543
258 lines
8.2 KiB
Perl
Executable File
258 lines
8.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
# **********************************************************
|
|
# Copyright (c) 2002 VMware, Inc. 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 VMware, 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 VMWARE, INC. 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.
|
|
|
|
# Derek's Graph Builder
|
|
# Need to have: perl-GD and perl-GIFgraph
|
|
|
|
# For linux, on balrog (RH7.2), I had to do:
|
|
# rpm -Uvh gd-2.0.1-4.i386.rpm gd-devel-2.0.1-4.i386.rpm
|
|
# rpm -ivh perl-5.6.1-14.i686.rpm
|
|
# rpm -Uvh perl-GD-1.33-3.i686.rpm
|
|
# rpm -ivh --oldpackage db3-3.1.17-7.i386.rpm
|
|
# rpm -ivh perl-modules-5.6.1-14.i686.rpm
|
|
# rpm -Uvh perl-GD-TextUtil-0.80-2.i386.rpm
|
|
# rpm -Uvh perl-GD-Graph-1.33-3.i686.rpm
|
|
# rpm -ivh perl-GIFgraph-1.20-4.i386.rpm
|
|
|
|
# Installing GIFgraph For win32:
|
|
# Got FreeType library from www.freetype.org, built & installed it
|
|
# Got gd library from http://www.boutell.com/gd/, built and installed it
|
|
# GIFgraph: gifs are no longer supported b/c of unisys patent on lzw!
|
|
# -> use GD::Graph
|
|
# Got GD-1.33, GDGraph-1.33, and GDTextUtil-0.80 from:
|
|
# ftp://cpan.valueclick.com/pub/CPAN/modules/by-module/
|
|
# Installing perl packages: "perl Makefile.PL; make; make install"
|
|
|
|
use GD::Graph::bars;
|
|
use GD;
|
|
|
|
# Datafile example:
|
|
# type=clustered
|
|
# size=600x400
|
|
# title=Dynamo Speedup
|
|
# x_label=Benchmark
|
|
# y_label=Speedup
|
|
# legend="-O0" "-O3"
|
|
# y_max_value=1.4
|
|
# y_tick_number=14
|
|
# y_number_format=%3.1f
|
|
#
|
|
# apsi 0.994019 0.994626
|
|
# art 1.23069 1.08014
|
|
# bzip2 0.928 0.825924
|
|
# crafty 0.210147 0.305814
|
|
# eon 0.310073 0.34035
|
|
# gap 0.268882 0.283897
|
|
# gcc 0.147219 0.14813
|
|
# gzip 0.643855 0.648045
|
|
# mcf 1.1145 1.12565
|
|
# parser 0.425933 0.48503
|
|
# perlbmk 0.193682 0.287931
|
|
# swim 0.997532 0.974938
|
|
# twolf 0.847986 0.805139
|
|
# vortex 0.207531 0.261248
|
|
# vpr 0.877838 0.926712
|
|
|
|
$usage = "Usage: $0 <datafile>\n";
|
|
die $usage if (@ARGV == 0);
|
|
$infile = shift;
|
|
|
|
# default parameters
|
|
$multiple_runs = 0;
|
|
$sep_slim = 0;
|
|
$overwrite = 0; # clustered
|
|
$sizex = 600; $sizey = 500;
|
|
$title = "Default Title";
|
|
$x_label = "X LABEL";
|
|
$y_label = "Y LABEL";
|
|
$y_max_value = 10;
|
|
$y_tick_number = 1;
|
|
$y_number_format = "%3.0f";
|
|
$legend_placement = 'RL';
|
|
$transparent = 1;
|
|
# lg_cols default is undefined
|
|
|
|
$n = 0;
|
|
$d = 0;
|
|
$data_sets = 0;
|
|
open(IN, "< $infile") || die "Error: Couldn't open $infile for input\n";
|
|
while (<IN>) {
|
|
next if /^\s*$/; # skip blank lines
|
|
next if /^\#/; # skip comments
|
|
if ($_ =~ /\S*=/) {
|
|
# parameter line
|
|
if ($_ =~ /multiple_runs/) {
|
|
$multiple_runs = 1;
|
|
} elsif ($_ =~ /sep_slim/) {
|
|
$sep_slim = 1;
|
|
} elsif ($_ =~ /type=(\w+)/) {
|
|
$type = $1;
|
|
if ($type eq "clustered") {
|
|
$overwrite = 0;
|
|
} else {
|
|
$overwrite = 2; # stacked
|
|
}
|
|
} elsif ($_ =~ /size=(\d+)x(\d+)/) {
|
|
$sizex = $1;
|
|
$sizey = $2;
|
|
} elsif ($_ =~ /title=(.+)/) {
|
|
$title = $1;
|
|
} elsif ($_ =~ /x_label=(.+)/) {
|
|
$x_label = $1;
|
|
} elsif ($_ =~ /y_label=(.+)/) {
|
|
$y_label = $1;
|
|
} elsif ($_ =~ /y_max_value=([\d\.]+)/) {
|
|
$y_max_value = $1;
|
|
} elsif ($_ =~ /y_tick_number=([\d\.]+)/) {
|
|
$y_tick_number = $1;
|
|
} elsif ($_ =~ /y_number_format=\"?(.*)\"?/) {
|
|
$y_number_format = $1;
|
|
} elsif ($_ =~ /legend_placement=(.+)/) {
|
|
$legend_placement = $1;
|
|
} elsif ($_ =~ /transparent=(.+)/) {
|
|
$transparent = $1;
|
|
} elsif ($_ =~ /lg_cols=([\d]+)/) {
|
|
$lg_cols = $1;
|
|
} elsif ($_ =~ /legend=/) {
|
|
$_ =~ s/legend=//;
|
|
chop;
|
|
@legend = split("\" ", $_);
|
|
# now remove quotes
|
|
foreach $l (@legend) {
|
|
$l =~ s/\"//g;
|
|
}
|
|
if ($sep_slim) {
|
|
# add blank legend for separator dataset
|
|
@legend = ("", @legend);
|
|
}
|
|
} else {
|
|
$_ =~ /(.*)=/;
|
|
die "Unknown parameter: $1\n";
|
|
}
|
|
} else {
|
|
# data line
|
|
# first get label
|
|
if ($multiple_runs) {
|
|
$_ =~ s/(\w+)\s+(\d+)\s+//;
|
|
$bm[$n] = "$1 $2";
|
|
$this_bm = $1;
|
|
} else {
|
|
$_ =~ s/(\w+)\s+//;
|
|
$bm[$n] = $1;
|
|
$this_bm = $1;
|
|
}
|
|
if ($sep_slim) {
|
|
# add empty data set for separator
|
|
$val[0][$n] = "";
|
|
$d++;
|
|
} else {
|
|
# add entire empty entry for separator
|
|
if ($n > 0 && $this_bm ne $last_bm) {
|
|
# separator
|
|
$temp = $bm[$n];
|
|
$bm[$n] = "";
|
|
for ($i=0; $i<$data_sets; $i++) {
|
|
$val[$i][$n] = "";
|
|
}
|
|
$n++;
|
|
$bm[$n] = $temp;
|
|
}
|
|
}
|
|
while (1) {
|
|
if ($_ =~ /^\s*$/) {
|
|
last;
|
|
}
|
|
$_ =~ s/([\d\.]+)\s*//;
|
|
$data = $1;
|
|
if ($data ne "") {
|
|
$val[$d][$n] = $data;
|
|
$d++;
|
|
} else {
|
|
last;
|
|
}
|
|
}
|
|
if ($n == 0) {
|
|
$data_sets = $d;
|
|
}
|
|
$d = 0;
|
|
$last_bm = $this_bm;
|
|
$n++;
|
|
}
|
|
}
|
|
|
|
@data = ([@bm]);
|
|
for ($d=0; $d<$data_sets; $d++) {
|
|
push(@data, @val[$d]);
|
|
}
|
|
$my_graph = new GD::Graph::bars($sizex, $sizey);
|
|
if (defined(@legend)) {
|
|
$my_graph->set_legend(@legend);
|
|
}
|
|
$my_graph->set_title_font(gdLargeFont);
|
|
$my_graph->set_x_axis_font(gdMediumBoldFont);
|
|
$my_graph->set_y_axis_font(gdMediumBoldFont);
|
|
$my_graph->set_x_label_font(gdMediumBoldFont);
|
|
$my_graph->set_y_label_font(gdMediumBoldFont);
|
|
$my_graph->set_legend_font(gdMediumBoldFont);
|
|
if ($sep_slim) {
|
|
$my_graph->set(dclrs =>
|
|
[ qw(pink lred lgreen lblue lyellow lpurple cyan lorange) ]);
|
|
}
|
|
if (defined($lg_cols)) {
|
|
$my_graph->set(lg_cols => $lg_cols);
|
|
}
|
|
$my_graph->set(
|
|
overwrite => $overwrite,
|
|
title => $title,
|
|
x_label => $x_label,
|
|
y_label => $y_label,
|
|
long_ticks => 1,
|
|
axis_space => 5,
|
|
y_max_value => $y_max_value,
|
|
y_tick_number => $y_tick_number,
|
|
y_label_skip => 1,
|
|
y_number_format => $y_number_format,
|
|
x_ticks => 0,
|
|
x_labels_vertical => 1,
|
|
x_label_position => 0.5,
|
|
legend_placement => $legend_placement,
|
|
transparent => $transparent,
|
|
);
|
|
|
|
## can't do gifs anymore!
|
|
## $my_graph->plot_to_gif( "$infile.gif", \@data );
|
|
|
|
open(IMG, "> $infile.png") or die $!;
|
|
binmode IMG;
|
|
print IMG $my_graph->plot(\@data)->png;
|
|
close(IMG);
|