[svn:p5ee] r11858 - p5ee/trunk/App-Context/lib/App
[email protected] Mon, 22 Sep 2008 09:59:43 -0700 (PDT)
| Newsgroups | perl.cvs.p5ee |
|---|---|
| Message-ID | <[email protected]> |
Author: spadkins
Date: Mon Sep 22 09:59:43 2008
New Revision: 11858
Modified:
p5ee/trunk/App-Context/lib/App/Context.pm
Log:
fiddled with profiling a bit
Modified: p5ee/trunk/App-Context/lib/App/Context.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context.pm Mon Sep 22 09:59:43 2008
@@ -1695,6 +1695,7 @@
$profile_state = {
last_timeofday => [ Time::HiRes::gettimeofday() ],
key_stack => [],
+ key_started => 1,
};
$self->{profile_state} = $profile_state;
}
@@ -1705,18 +1706,18 @@
}
my $last_timeofday = $profile_state->{last_timeofday};
my $key_stack = $profile_state->{key_stack};
+ my $key_started = $profile_state->{key_started};
my $last_key = ($#$key_stack > -1) ? $key_stack->[$#$key_stack] : "";
my @timeofday = Time::HiRes::gettimeofday();
if ($last_key) {
my $time_elapsed = Time::HiRes::tv_interval($last_timeofday, \@timeofday);
- $self->_profile_accumulate($profile_stats, $last_key, $time_elapsed);
+ $self->_profile_accumulate($profile_stats, $last_key, $time_elapsed, $key_started);
}
if ($#$key_stack > 100) {
- @$key_stack = ( $key );
- }
- else {
- push(@$key_stack, $key);
+ splice(@$key_stack, 0, 50);
}
+ push(@$key_stack, $key);
+ $profile_state->{key_started} = 1;
$profile_state->{last_timeofday} = \@timeofday;
}
@@ -1727,34 +1728,47 @@
if ($profile_state && $profile_stats) {
my $last_timeofday = $profile_state->{last_timeofday};
my $key_stack = $profile_state->{key_stack};
+ my $key_started = $profile_state->{key_started};
+ my $last_key = ($#$key_stack > -1) ? $key_stack->[$#$key_stack] : "";
my @timeofday = Time::HiRes::gettimeofday();
my $time_elapsed = Time::HiRes::tv_interval($last_timeofday, \@timeofday);
$profile_state->{last_timeofday} = \@timeofday;
- $self->_profile_accumulate($profile_stats, $key, $time_elapsed);
+ $self->_profile_accumulate($profile_stats, $last_key, $time_elapsed, $key_started);
while ($#$key_stack > -1) {
my $last_key = pop(@$key_stack);
last if ($last_key eq $key);
}
+ $profile_state->{key_started} = 0;
}
}
sub _profile_accumulate {
- my ($self, $profile_stats, $key, $time_elapsed) = @_;
+ my ($self, $profile_stats, $key, $time_elapsed, $key_started) = @_;
my $stats = $profile_stats->{$key};
if (!defined $stats) {
$stats = {
- count => 1,
- cumul_time => $time_elapsed,
- min_time => $time_elapsed,
- max_time => $time_elapsed,
+ count => 1,
+ cumul_time => $time_elapsed,
+ min_time => $time_elapsed,
+ max_time => $time_elapsed,
+ sample_time => $time_elapsed,
};
$profile_stats->{$key} = $stats;
}
else {
- $stats->{count}++;
- $stats->{cumul_time} += $time_elapsed;
- $stats->{min_time} = $time_elapsed if ($time_elapsed < $stats->{min_time});
- $stats->{max_time} = $time_elapsed if ($time_elapsed > $stats->{max_time});
+ $stats->{cumul_time} += $time_elapsed;
+ if ($key_started) {
+ $stats->{count}++;
+ my $sample_time = $stats->{sample_time};
+ if ($sample_time > 0) {
+ $stats->{min_time} = $sample_time if ($sample_time < $stats->{min_time});
+ $stats->{max_time} = $sample_time if ($sample_time > $stats->{max_time});
+ }
+ $stats->{sample_time} = $time_elapsed;
+ }
+ else {
+ $stats->{sample_time} += $time_elapsed;
+ }
}
}