diff --git a/bin/bmark_pq b/bin/bmark_pq index 1bd6c3d..4ccff11 100755 --- a/bin/bmark_pq +++ b/bin/bmark_pq @@ -32,16 +32,26 @@ $out_fh = IO::File->new($out_file, 'w') or die "Can't open $out_file for writing: $!\n" if defined $out_file; -STDERR->autoflush(1); - -{ - my @results = run_workloads( - tasks => @tasks && \@tasks, - backends => @backends && \@backends, - ranks => \@ranks, - timeout => $timeout, - progress => $verbose && sub { +my %format_op = ( + csv => { + start => sub { STDERR->autoflush(1) }, + generate => sub { + my @results = @_; + + print STDERR "\n" if $verbose; + + # XXX: probably better to use a real CSV-generating module + local $\ = "\x0D\x0A"; # CSV uses CRLF + print $out_fh join ',', + qw; + for my $result (@results) { + print $out_fh join ',', map { $result->$_ } + qw; + } + }, + progress => sub { my ($task, $backend, $rank) = @_; + return if !$verbose; state $prev_task = ''; state $prev_backend = ''; print STDERR "\nRunning $task on $backend " @@ -49,16 +59,21 @@ STDERR->autoflush(1); print STDERR '.'; ($prev_task, $prev_backend) = ($task, $backend); }, + }, +); + +my ($format) = keys %format_op; # temporarily + +{ + $format_op{$format}{start}->(); + my @results = run_workloads( + tasks => @tasks && \@tasks, + backends => @backends && \@backends, + ranks => \@ranks, + timeout => $timeout, + progress => $format_op{$format}{progress}, ); - print STDERR "\n" if $verbose; - - # XXX: probably better to use a real CSV-generating module - local $\ = "\x0D\x0A"; # CSV uses CRLF - print $out_fh join ',', qw; - for my $result (@results) { - print $out_fh join ',', map { $result->$_ } - qw; - } + $format_op{$format}{generate}->(@results); } close $out_fh