Raw content of Bio::EnsEMBL::Utils::EprofStack =head1 LICENSE Copyright (c) 1999-2009 The European Bioinformatics Institute and Genome Research Limited. All rights reserved. This software is distributed under a modified Apache license. For license details, please see /info/about/code_licence.html =head1 CONTACT Please email comments or questions to the public Ensembl developers list at <ensembl-dev@ebi.ac.uk>. Questions may also be sent to the Ensembl help desk at <helpdesk@ensembl.org>. =cut =head1 NAME Bio::EnsEMBL::Util::EprofStack - DESCRIPTION of Object =head1 SYNOPSIS =head1 DESCRIPTION =head1 METHODS =cut package Bio::EnsEMBL::Utils::EprofStack; use strict; use warnings; use POSIX; use Bio::EnsEMBL::Utils::Exception ('warning'); BEGIN { eval { require Time::HiRes; Time::HiRes->import('time'); }; } sub new { my ( $proto, $name ) = @_; my $class = ref($proto) || $proto; my $self = bless( { 'is_active' => 0, 'total_time' => 0, 'total_time_time' => 0, 'max_time' => 0, 'min_time' => 999999999, 'number' => 0, 'tag' => $name }, $class ); return $self; } =head2 push_stack Title : push_stack Usage : Function: Example : Returns : Args : =cut sub push_stack { my ( $self, @args ) = @_; if ( $self->{'is_active'} == 1 ) { warning( sprintf( "Attempting to push stack on tag '%s' " . "when active. Discarding previous push." . $self->tag() ) ); } # my ( $user, $sys ) = times(); # $self->{'current_start'} = (POSIX::times)[0]; $self->{'current_start'} = time(); $self->{'is_active'} = 1; } =head2 pop_stack Title : pop_stack Usage : Function: Example : Returns : Args : =cut sub pop_stack { my ( $self, @args ) = @_; if ( $self->{'is_active'} == 0 ) { warning( sprintf( "Attempting to pop stack on tag '%s' " . "when not active. Ignoring.", $self->tag() ) ); } # my ( $user, $sys ) = times(); # my $clocktime = # ( (POSIX::times)[0] - $self->{'current_start'} )/ # POSIX::sysconf(&POSIX::_SC_CLK_TCK); my $clocktime = time() - $self->{'current_start'}; if ( $self->{'max_time'} < $clocktime ) { $self->{'max_time'} = $clocktime; } if ( $self->{'min_time'} > $clocktime ) { $self->{'min_time'} = $clocktime; } $self->{'total_time'} += $clocktime; $self->{'total_time_time'} += $clocktime*$clocktime; $self->{'number'}++; $self->{'is_active'} = 0; } ## end sub pop_stack =head2 total_time_time Title : total_time_time Usage : $obj->total_time_time($newval) Function: Returns : value of total_time_time Args : newvalue (optional) =cut sub total_time_time { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'total_time_time'} = $value } return $self->{'total_time_time'}; } =head2 max_time Title : max_time Usage : $obj->max_time($newval) Function: Returns : value of max_time Args : newvalue (optional) =cut sub max_time { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'max_time'} = $value } return $self->{'max_time'}; } =head2 min_time Title : min_time Usage : $obj->min_time($newval) Function: Returns : value of min_time Args : newvalue (optional) =cut sub min_time { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'min_time'} = $value } return $self->{'min_time'}; } =head2 total_time Title : total_time Usage : $obj->total_time($newval) Function: Returns : value of total_time Args : newvalue (optional) =cut sub total_time { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'total_time'} = $value } return $self->{'total_time'}; } =head2 number Title : number Usage : $obj->number($newval) Function: Returns : value of number Args : newvalue (optional) =cut sub number { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'number'} = $value } return $self->{'number'}; } =head2 is_active Title : is_active Usage : $obj->is_active($newval) Function: Returns : value of is_active Args : newvalue (optional) =cut sub is_active { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'is_active'} = $value } return $self->{'is_active'}; } =head2 current_start Title : current_start Usage : $obj->current_start($newval) Function: Returns : value of current_start Args : newvalue (optional) =cut sub current_start { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'current_start'} = $value } return $self->{'current_start'}; } =head2 tag Title : tag Usage : $obj->tag($newval) Function: Returns : value of tag Args : newvalue (optional) =cut sub tag { my ( $self, $value ) = @_; if ( defined($value) ) { $self->{'tag'} = $value } return $self->{'tag'}; } 1;