summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm')
-rwxr-xr-xMaster/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm156
1 files changed, 156 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm b/Master/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm
new file mode 100755
index 00000000000..112c3a2e8d6
--- /dev/null
+++ b/Master/tlpkg/tlperl.straw/lib/IPC/Run3/ProfPP.pm
@@ -0,0 +1,156 @@
+package IPC::Run3::ProfPP;
+
+$VERSION = 0.043;
+
+=head1 NAME
+
+IPC::Run3::ProfPP - Generate reports from IPC::Run3 profiling data
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+Used by IPC::Run3 and/or run3profpp to print out profiling reports for
+human readers. Use other classes for extracting data in other ways.
+
+The output methods are plain text, override these (see the source for
+now) to provide other formats.
+
+This class generates reports on each run3_exit() and app_exit() call.
+
+=cut
+
+require IPC::Run3::ProfReporter;
+@ISA = qw( IPC::Run3::ProfReporter );
+
+use strict;
+use POSIX qw( floor );
+
+=head1 METHODS
+
+=head2 C<< IPC::Run3::ProfPP->new() >>
+
+Returns a new profile reporting object.
+
+=cut
+
+sub _emit { shift; warn @_ }
+
+sub _t {
+ sprintf "%10.6f secs", @_;
+}
+
+sub _r {
+ my ( $num, $denom ) = @_;
+ return () unless $denom;
+ sprintf "%10.6f", $num / $denom;
+}
+
+sub _pct {
+ my ( $num, $denom ) = @_;
+ return () unless $denom;
+ sprintf " (%3d%%)", floor( 100 * $num / $denom + 0.5 );
+}
+
+=head2 C<< $profpp->handle_app_call() >>
+
+=cut
+
+sub handle_app_call {
+ my $self = shift;
+ $self->_emit("IPC::Run3 parent: ",
+ join( " ", @{$self->get_app_cmd} ),
+ "\n",
+ );
+
+ $self->{NeedNL} = 1;
+}
+
+=head2 C<< $profpp->handle_app_exit() >>
+
+=cut
+
+sub handle_app_exit {
+ my $self = shift;
+
+ $self->_emit("\n") if $self->{NeedNL} && $self->{NeedNL} != 1;
+
+ $self->_emit( "IPC::Run3 total elapsed: ",
+ _t( $self->get_app_cumulative_time ),
+ "\n");
+ $self->_emit( "IPC::Run3 calls to run3(): ",
+ sprintf( "%10d", $self->get_run_count ),
+ "\n");
+ $self->_emit( "IPC::Run3 total spent in run3(): ",
+ _t( $self->get_run_cumulative_time ),
+ _pct( $self->get_run_cumulative_time, $self->get_app_cumulative_time ),
+ ", ",
+ _r( $self->get_run_cumulative_time, $self->get_run_count ),
+ " per call",
+ "\n");
+ my $exclusive =
+ $self->get_app_cumulative_time - $self->get_run_cumulative_time;
+ $self->_emit( "IPC::Run3 total spent not in run3(): ",
+ _t( $exclusive ),
+ _pct( $exclusive, $self->get_app_cumulative_time ),
+ "\n");
+ $self->_emit( "IPC::Run3 total spent in children: ",
+ _t( $self->get_sys_cumulative_time ),
+ _pct( $self->get_sys_cumulative_time, $self->get_app_cumulative_time ),
+ ", ",
+ _r( $self->get_sys_cumulative_time, $self->get_run_count ),
+ " per call",
+ "\n");
+ my $overhead =
+ $self->get_run_cumulative_time - $self->get_sys_cumulative_time;
+ $self->_emit( "IPC::Run3 total overhead: ",
+ _t( $overhead ),
+ _pct(
+ $overhead,
+ $self->get_sys_cumulative_time
+ ),
+ ", ",
+ _r( $overhead, $self->get_run_count ),
+ " per call",
+ "\n");
+}
+
+=head2 C<< $profpp->handle_run_exit() >>
+
+=cut
+
+sub handle_run_exit {
+ my $self = shift;
+ my $overhead = $self->get_run_time - $self->get_sys_time;
+
+ $self->_emit("\n") if $self->{NeedNL} && $self->{NeedNL} != 2;
+ $self->{NeedNL} = 3;
+
+ $self->_emit( "IPC::Run3 child: ",
+ join( " ", @{$self->get_run_cmd} ),
+ "\n");
+ $self->_emit( "IPC::Run3 run3() : ", _t( $self->get_run_time ), "\n",
+ "IPC::Run3 child : ", _t( $self->get_sys_time ), "\n",
+ "IPC::Run3 overhead: ", _t( $overhead ),
+ _pct( $overhead, $self->get_sys_time ),
+ "\n");
+}
+
+=head1 LIMITATIONS
+
+=head1 COPYRIGHT
+
+ Copyright 2003, R. Barrie Slaymaker, Jr., All Rights Reserved
+
+=head1 LICENSE
+
+You may use this module under the terms of the BSD, Artistic, or GPL licenses,
+any version.
+
+=head1 AUTHOR
+
+Barrie Slaymaker E<lt>barries@slaysys.comE<gt>
+
+=cut
+
+1;