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;
+        }
     }
 }
 

Reply via email to