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, [EMAIL
PROTECTED]);
- $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} = [EMAIL PROTECTED];
}
@@ -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, [EMAIL
PROTECTED]);
$profile_state->{last_timeofday} = [EMAIL PROTECTED];
- $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;
+ }
}
}