X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ba78426a00f0f0e74fe1dee5f40f2e1b416f9ee2..648979d110084d480eb59ada3de244305ffc324e:/tools/MSG_visualization/trace2fig.pl diff --git a/tools/MSG_visualization/trace2fig.pl b/tools/MSG_visualization/trace2fig.pl index 839f3a72c4..6b07413fa1 100755 --- a/tools/MSG_visualization/trace2fig.pl +++ b/tools/MSG_visualization/trace2fig.pl @@ -1,10 +1,10 @@ #!/usr/bin/perl -w use strict; -use Data::Dumper; +#use Data::Dumper; use XFig; -my($grid_size)=225; # xfig - +my($grid_Y_size)=225; # xfig +my($grid_X_size)=550; # xfig sub read_cat { my(%Cat); @@ -30,6 +30,51 @@ 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 read_link { + my($filename)=@_; + my($line); + my(%link); + + open INPUT, $filename; + + while (defined($line=)) { + chomp $line; + if($line =~ /^16\s/) { + my($event,$date,$type,$father,$channel,$src,$key) = split(/\s+/,$line); + $link{$key}{src}=$src; + $link{$key}{src_date}=$date; + } + if($line =~ /^17\s/) { + my($event,$date,$type,$father,$channel,$dst,$key) = split(/\s+/,$line); + $link{$key}{dst}=$dst; + $link{$key}{dst_date}=$date; + } + } + close INPUT; + return \%link; +} + + sub build_cat_tree { my($root,$Cat)=@_; my(@childs)=(); @@ -64,9 +109,11 @@ sub set_cat_position { my($i)=0; my($cat); foreach $cat (@$cat_list) { - $$Cat{$cat}{X_min} = $i; - $$Cat{$cat}{X_max} = $i+1; - $i++; + if(defined($$Cat{$cat}{state})) { + $$Cat{$cat}{Y_min} = $i; + $$Cat{$cat}{Y_max} = $i+1; + $i++; + } } } @@ -89,10 +136,77 @@ sub create_fig { return $fig; } +sub draw_cat { + my($fig,$Cat,$Link)=@_; + my($cat,$e,$link); + foreach $cat (keys %$Cat) { + next unless (defined($$Cat{$cat}{Y_min}) && + defined($$Cat{$cat}{Y_max})); + my($text) = new XFig ('text'); + $text->{'text'} = $$Cat{$cat}{name}; + $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); + } + } + } + + foreach $link (keys %$Link) { + my($line) = new XFig ('polyline'); + my($src_date)=$$Link{$link}{src_date}; + my($src)=$$Link{$link}{src}; + my($dst_date)=$$Link{$link}{dst_date}; + my($dst)=$$Link{$link}{dst}; + $line->{'subtype'} = 1; # line + + $line->{'points'} = [ [$src_date*$grid_X_size, + ($$Cat{$src}{Y_min}+$$Cat{$src}{Y_max})/2*$grid_Y_size], + [$dst_date*$grid_X_size, + ($$Cat{$dst}{Y_min}+$$Cat{$dst}{Y_max})/2*$grid_Y_size] ]; + $line->{'forwardarrow'} = ['1', '1', '1.00', '60.00', '120.00']; + $fig->add ($line); + } +} + sub main { my($Cat) = read_cat($ARGV[0]); my($cat_tree)=build_cat_tree("0",$Cat); + read_event($ARGV[0],$Cat); + my($Link)=read_link($ARGV[0]); # print Dumper($cat_tree); +# print Dumper($Cat); my($cat_list)=[]; build_cat_list($cat_tree,$cat_list); shift @$cat_list; @@ -102,14 +216,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,$Link); $fig->writefile (); + system "fig2dev -L pdf toto.fig toto.pdf"; } main;