From: alegrand Date: Sun, 18 Jun 2006 13:28:03 +0000 (+0000) Subject: Drawing states... X-Git-Tag: v3.3~2970 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/1f5961fb2d9a99ce7117287a031bea7129eba888?ds=inline Drawing states... git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2388 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/tools/MSG_visualization/trace2fig.pl b/tools/MSG_visualization/trace2fig.pl index 839f3a72c4..55fa06eefc 100755 --- a/tools/MSG_visualization/trace2fig.pl +++ b/tools/MSG_visualization/trace2fig.pl @@ -3,8 +3,8 @@ use strict; use Data::Dumper; use XFig; -my($grid_size)=225; # xfig - +my($grid_Y_size)=225; # xfig +my($grid_X_size)=225; # xfig sub read_cat { my(%Cat); @@ -30,6 +30,27 @@ sub read_cat { } +sub read_event { + my($filename,$Cat)=@_; + my($line); + + open INPUT, $filename; + + while (defined($line=)) { + chomp $line; + if($line =~ /^11\s/) { + my($event,$date,$type,$id,$state) = split(/\s+/,$line); + push @{$$Cat{$id}{state}}, [$date,$state]; + } + if($line =~ /^12\s/) { + my($event,$date,$type,$id) = split(/\s+/,$line); + push @{$$Cat{$id}{state}}, [$date]; + } + } + close INPUT; +} + + sub build_cat_tree { my($root,$Cat)=@_; my(@childs)=(); @@ -64,8 +85,8 @@ sub set_cat_position { my($i)=0; my($cat); foreach $cat (@$cat_list) { - $$Cat{$cat}{X_min} = $i; - $$Cat{$cat}{X_max} = $i+1; + $$Cat{$cat}{Y_min} = $i; + $$Cat{$cat}{Y_max} = $i+1; $i++; } } @@ -89,10 +110,60 @@ sub create_fig { return $fig; } +sub draw_cat { + my($fig,$Cat)=@_; + my($cat,$e); + foreach $cat (keys %$Cat) { + next unless (defined($$Cat{$cat}{Y_min}) && + defined($$Cat{$cat}{Y_max})); + my($text) = new XFig ('text'); + $text->{'text'} = $cat; + $text->{'y'} = ($$Cat{$cat}{Y_min}+$$Cat{$cat}{Y_max})/2*$grid_Y_size+68; + $fig->add ($text); + } + foreach $cat (keys %$Cat) { + next unless (defined($$Cat{$cat}{Y_min}) && + defined($$Cat{$cat}{Y_max})); + my(@states)=(); + my($e); + foreach $e (@{$$Cat{$cat}{state}}) { + my($new_date,$state) = ($$e[0],$$e[1]); + if(defined($state)) { + push @states, $e; + } else { + my($old_event) = pop @states; + my($old_date) = $$old_event[0]; + $state = $$old_event[1]; + + my($line) = new XFig ('polyline'); + + $line->{'subtype'} = 1; # line + $line->{'points'} = [ [$old_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size], + [$new_date*$grid_X_size, $$Cat{$cat}{Y_min}*$grid_Y_size], + [$new_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size], + [$old_date*$grid_X_size, $$Cat{$cat}{Y_max}*$grid_Y_size] ]; + $line->{'areafill'} = 20; + if($state eq "S") { + $line->{'fillcolor'} = 1; + } elsif ($state eq "E") { + $line->{'fillcolor'} = 2; + } elsif ($state eq "B") { + $line->{'fillcolor'} = 3; + } elsif ($state eq "C") { + $line->{'fillcolor'} = 4; + } + $fig->add ($line); + } + } + } +} + sub main { my($Cat) = read_cat($ARGV[0]); my($cat_tree)=build_cat_tree("0",$Cat); + read_event($ARGV[0],$Cat); # print Dumper($cat_tree); +# print Dumper($Cat); my($cat_list)=[]; build_cat_list($cat_tree,$cat_list); shift @$cat_list; @@ -102,14 +173,9 @@ sub main { set_cat_position($Cat,$cat_list); my($fig)=create_fig("toto.fig"); - my($cat); - foreach $cat (@$cat_list) { - my($text) = new XFig ('text'); - $text->{'text'} = $cat; - $text->{'y'} = ($$Cat{$cat}{X_min}+$$Cat{$cat}{X_max})/2*$grid_size+68; - $fig->add ($text); - } + draw_cat($fig,$Cat); $fig->writefile (); + system "fig2dev -L pdf toto.fig toto.pdf"; } main;