Author: spadkins
Date: Tue Aug 26 14:19:03 2008
New Revision: 11676
Modified:
p5ee/trunk/App-Context/lib/App/Context.pm
p5ee/trunk/App-Context/lib/App/Context/POE/ClusterController.pm
p5ee/trunk/App-Context/lib/App/Context/POE/ClusterNode.pm
p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm
Log:
add profiling
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 Tue Aug 26 14:19:03 2008
@@ -1688,6 +1688,86 @@
&App::sub_exit() if ($App::trace);
}
+sub profile_start {
+ my ($self, $key) = @_;
+ my $profile_state = $self->{profile_state};
+ if (!$profile_state) {
+ $profile_state = {
+ last_timeofday => [ Time::HiRes::gettimeofday() ],
+ key_stack => [],
+ };
+ $self->{profile_state} = $profile_state;
+ }
+ my $profile_stats = $self->{profile_stats};
+ if (!$profile_stats) {
+ $profile_stats = {};
+ $self->{profile_stats} = $profile_stats;
+ }
+ my $last_timeofday = $profile_state->{last_timeofday};
+ my $key_stack = $profile_state->{key_stack};
+ 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);
+ }
+ if ($#$key_stack > 100) {
+ @$key_stack = ( $key );
+ }
+ else {
+ push(@$key_stack, $key);
+ }
+ $profile_state->{last_timeofday} = [EMAIL PROTECTED];
+}
+
+sub profile_stop {
+ my ($self, $key) = @_;
+ my $profile_state = $self->{profile_state};
+ my $profile_stats = $self->{profile_stats};
+ if ($profile_state && $profile_stats) {
+ my $last_timeofday = $profile_state->{last_timeofday};
+ my $key_stack = $profile_state->{key_stack};
+ my @timeofday = Time::HiRes::gettimeofday();
+ my $time_elapsed = Time::HiRes::tv_interval($last_timeofday, [EMAIL
PROTECTED]);
+ $self->_profile_accumulate($profile_stats, $key, $time_elapsed);
+ while ($#$key_stack > -1) {
+ my $last_key = pop(@$key_stack);
+ last if ($last_key eq $key);
+ }
+ }
+}
+
+sub _profile_accumulate {
+ my ($self, $profile_stats, $key, $time_elapsed) = @_;
+ my $stats = $profile_stats->{$key};
+ if (!defined $stats) {
+ $stats = {
+ count => 1,
+ cumul_time => $time_elapsed,
+ min_time => $time_elapsed,
+ max_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});
+ }
+}
+
+sub profile_stats {
+ my ($self) = @_;
+ return($self->{profile_stats} || {});
+}
+
+sub profile_clear {
+ my ($self) = @_;
+ delete $self->{profile_stats};
+ delete $self->{profile_state};
+}
+
#############################################################################
# user()
#############################################################################
Modified: p5ee/trunk/App-Context/lib/App/Context/POE/ClusterController.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/POE/ClusterController.pm
(original)
+++ p5ee/trunk/App-Context/lib/App/Context/POE/ClusterController.pm Tue Aug
26 14:19:03 2008
@@ -210,11 +210,14 @@
my ($self, $kernel, $args) = @_[OBJECT, KERNEL, ARG0];
my ($node, $sys_info) = @$args;
- $self->log({level=>3},"poe_receive_node_status ($node) - " .
+ $self->profile_start("poe_receive_node_status") if $self->{poe_profile};
+ $self->log({level=>3},"poe_receive_node_status: BEGIN $node - " .
"load=$sys_info->{system_load}, " .
"memfree=$sys_info->{memfree}/$sys_info->{memtotal} " .
"swapfree=$sys_info->{swapfree}/$sys_info->{swaptotal}\n") if
$self->{options}{poe_trace};
$self->set_node_up($node, $sys_info);
+ $self->log({level=>3},"poe_receive_node_status: END $node\n") if
$self->{options}{poe_trace};
+ $self->profile_stop("poe_receive_node_status") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
@@ -228,13 +231,16 @@
my $args_str = join(",", @$args);
if ($event->{name}) {
my $service_type = $event->{service_type} || "SessionObject";
- $event_str =
"$service_type($event->{name}).$event->{method}($args_str)";
+ $event_str = "$service_type($event->{name}).$event->{method}";
}
else {
- $event_str = "$event->{method}($args_str)";
+ $event_str = "$event->{method}";
}
+ $self->profile_start("poe_run_event: $event_str") if $self->{poe_profile};
+ $self->log({level=>3},"poe_run_event: BEGIN $event_str\n") if
$self->{poe_trace};
$self->send_event($event);
-
+ $self->log({level=>3},"poe_run_event: END $event_str\n") if
$self->{poe_trace};
+ $self->profile_stop("poe_run_event: $event_str") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
Modified: p5ee/trunk/App-Context/lib/App/Context/POE/ClusterNode.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/POE/ClusterNode.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context/POE/ClusterNode.pm Tue Aug 26
14:19:03 2008
@@ -245,13 +245,15 @@
sub poe_cancel_async_event {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $arg0 ) = @_[ OBJECT, KERNEL, HEAP, ARG0 ];
+ $self->profile_start("poe_cancel_async_event") if $self->{poe_profile};
my ($runtime_event_token) = @$arg0;
+ $self->log({level=>3},"poe_cancel_async_event BEGIN
runtime_event_token=[$runtime_event_token]\n");
### Find if running
+ my ($event_token);
for my $pid (keys %{$self->{running_async_event}}) {
- my $event_token = $self->{running_async_event}{$pid}[0]{event_token};
+ $event_token = $self->{running_async_event}{$pid}[0]{event_token};
if ($runtime_event_token eq $event_token) {
- $self->log({level=>3},"CN : poe_cancel_async_event:
running_async_event: found event_token=[$event_token] pid=[$pid]\n");
### Kill it
if ($pid =~ /^[0-9]+$/) {
@@ -260,6 +262,7 @@
### Remove from pending
delete $self->{running_async_event}{$pid};
+ $self->log({level=>3},"poe_cancel_async_event FOUND RUNNING
event_token=[$event_token] pid=[$pid]\n");
last;
}
@@ -267,11 +270,14 @@
### Find if pending
for (my $i = 0; $i < @{$self->{pending_async_events}}; $i++) {
- my $event_token = $self->{pending_async_events}[$i][0]{event_token};
+ $event_token = $self->{pending_async_events}[$i][0]{event_token};
if ($runtime_event_token eq $event_token) {
splice(@{$self->{pending_async_events}}, $i, 1);
+ $self->log({level=>3},"poe_cancel_async_event FOUND PENDING
event_token=[$event_token]\n");
}
}
+ $self->log({level=>3},"poe_cancel_async_event END
event_token=[$event_token]\n");
+ $self->profile_stop("poe_cancel_async_event") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
Modified: p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context/POE/Server.pm Tue Aug 26
14:19:03 2008
@@ -51,20 +51,23 @@
$self->{poe_session_name} = "poe_session";
$self->{poe_kernel} = $poe_kernel;
- $self->{num_procs} = 0;
- $self->{max_procs} = $self->{options}{"app.context.max_procs"} || 10;
- $self->{max_async_events} =
$self->{options}{"app.context.max_async_events"}
+ $self->{num_procs} = 0;
+ $self->{max_procs} =
$self->{options}{"app.context.max_procs"} || 10;
+ $self->{max_async_events} =
$self->{options}{"app.context.max_async_events"}
if (defined $self->{options}{"app.context.max_async_events"});
- $self->{max_async_events} ||= 10;
- $self->{num_async_events} = 0;
- $self->{async_event_count} = 0;
- $self->{pending_async_events} = [];
- $self->{running_async_event} = {};
+ $self->{max_async_events} ||= 10;
+ $self->{num_async_events} = 0;
+ $self->{async_event_count} = 0;
+ $self->{pending_async_events} = [];
+ $self->{running_async_event} = {};
+ $self->{poe_profile} = $options->{poe_profile};
+ $self->{poe_profile} = 60 if ($self->{poe_profile} &&
$self->{poe_profile} == 1);
+ $self->{poe_trace} = $options->{poe_trace};
$self->{verbose} = $options->{verbose};
$self->{poe_states} = [qw(
- _start _stop _default poe_sigchld poe_sigterm poe_sigignore
poe_shutdown poe_alarm
+ _start _stop _default poe_sigchld poe_sigterm poe_sigignore
poe_shutdown poe_alarm poe_profile
ikc_register ikc_unregister ikc_shutdown
poe_run_event poe_event_loop_extension
poe_dispatch_pending_async_events
poe_server_state poe_http_server_state poe_debug poe_http_debug
poe_http_test_run
@@ -133,7 +136,7 @@
{ 'DIR' => '.*', 'SESSION' => $session_name, 'EVENT' =>
'poe_http_server_state', },
],
);
- $self->log({level=>3},"Listening for HTTP Requests on
$self->{host}:$self->{options}{http_port}\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"Listening for HTTP Requests on
$self->{host}:$self->{options}{http_port}\n") if $self->{poe_trace};
&App::sub_exit() if ($App::trace);
}
@@ -350,7 +353,7 @@
### POE state dumping - Currently commented out because it doesn't gain us
much
### in the way of visibility, and POE::API::Peek is a CPAN pain
### UNCOMMENT THIS IF YOU NEED IT, DEPENDS ON A PAINFUL LIBRARY
- if ($self->{options}{poe_trace}) {
+ if ($self->{poe_peek}) {
App->use("POE::API::Peek");
my $api = POE::API::Peek->new();
my @queue = $api->event_queue_dump();
@@ -459,8 +462,9 @@
sub dispatch_pending_async_events {
&App::sub_entry if ($App::trace);
my ($self, $max_events) = @_;
+ $self->profile_start("dispatch_pending_async_events") if
$self->{poe_profile};
my $t0 = [gettimeofday];
- $self->log({level=>3},"dispatch_pending_async_events enter:
max_events=[$max_events]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"dispatch_pending_async_events enter:
max_events=[$max_events]\n") if $self->{poe_trace};
$max_events ||= 9999;
my $pending_async_events = $self->{pending_async_events};
@@ -497,7 +501,8 @@
}
}
- $self->log({level=>3},"dispatch_pending_async_events exit:
events_occurred=[$events_occurred] time=[" . sprintf("%.4f", tv_interval($t0,
[gettimeofday])) . "]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"dispatch_pending_async_events exit:
events_occurred=[$events_occurred] time=[" . sprintf("%.4f", tv_interval($t0,
[gettimeofday])) . "]\n") if $self->{poe_trace};
+ $self->profile_stop("dispatch_pending_async_events") if
$self->{poe_profile};
&App::sub_exit($events_occurred) if ($App::trace);
return($events_occurred);
}
@@ -519,6 +524,7 @@
sub send_async_event_now {
&App::sub_entry if ($App::trace);
my ($self, $event, $callback_event) = @_;
+ $self->profile_start("send_async_event_now") if $self->{poe_profile};
if ($event->{destination} eq "in_process") {
my $event_token = $self->send_async_event_in_process($event,
$callback_event);
@@ -553,6 +559,7 @@
my $runtime_event_token = $pid;
$self->{running_async_event}{$runtime_event_token} = [ $event,
$callback_event ];
}
+ $self->profile_stop("send_async_event_now") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
=head2 wait_for_event()
@@ -785,7 +792,7 @@
my (@args);
@args = @$args if (ref($args) eq "ARRAY");
@args = ($args) if (!ref($args));
- $self->log({level=>3},"POE: _default: Entered an unhandled state ($state)
with args (@args)\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"POE: _default: Entered an unhandled state ($state)
with args (@args)\n") if $self->{poe_trace};
&App::sub_exit() if ($App::trace);
}
@@ -814,6 +821,7 @@
# don't start kicking off async events until we give the nodes a chance to
register themselves
$kernel->delay_set("poe_event_loop_extension", 5) if
(!$self->{disable_event_loop_extensions});
$kernel->delay_set("poe_alarm", 5);
+ $kernel->delay_set("poe_profile", $self->{poe_profile}) if
($self->{poe_profile});
&App::sub_exit() if ($App::trace);
}
@@ -916,7 +924,8 @@
sub poe_alarm {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
- $self->log({level=>3},"poe_alarm enter\n") if $self->{options}{poe_trace};
+ $self->profile_start("poe_alarm") if $self->{poe_profile};
+ $self->log({level=>3},"poe_alarm enter\n") if $self->{poe_trace};
my $main_service = $self->{main_service};
@@ -945,7 +954,7 @@
### call some POE profile dump functions, only happens when ENV variables
### POE_TRACE_PROFILE=1 POE_TRACE_STATISTICS=1
- if ($self->{options}{poe_trace}) {
+ if ($self->{poe_trace}) {
my %data = $kernel->stat_getdata();
for my $key (sort keys %data) {
$self->log({level=>3},"poe_alarm: poe_statistics [" .
sprintf("%20s : %s", $key, $data{$key}) . "]\n");
@@ -953,7 +962,36 @@
$kernel->stat_show_profile();
}
- $self->log({level=>3},"poe_alarm exit: events_occurred[$events_occurred]
sec_until_next_event[$sec_until_next_event]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"poe_alarm exit: events_occurred[$events_occurred]
sec_until_next_event[$sec_until_next_event]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_alarm") if $self->{poe_profile};
+ &App::sub_exit() if ($App::trace);
+}
+
+sub poe_profile {
+ &App::sub_entry if ($App::trace);
+ my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
+
+ my $poe_profile = $self->{poe_profile};
+ if ($poe_profile) {
+ $self->{poe_profile_id} = $kernel->delay_set("poe_profile",
$poe_profile);
+ my $profile_stats = $self->profile_stats();
+ $self->log("PROFILE: cumultime count avgtime mintime maxtime
key\n");
+ my ($stats);
+ foreach my $key (sort { $profile_stats->{$b}{cumul_time} <=>
$profile_stats->{$a}{cumul_time} } keys %$profile_stats) {
+ $stats = $profile_stats->{$key};
+ if ($stats->{count}) {
+ $self->log("PROFILE: %10.4f %10d %8.4f %8.4f %8.4f %s\n",
+ $stats->{cumul_time},
+ $stats->{count},
+ $stats->{cumul_time}/$stats->{count},
+ $stats->{min_time},
+ $stats->{max_time},
+ $key);
+ }
+ }
+ $self->profile_clear();
+ }
+
&App::sub_exit() if ($App::trace);
}
@@ -961,13 +999,14 @@
sub poe_shutdown {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $session, $heap ) = @_[ OBJECT, KERNEL, SESSION, HEAP
];
+ $self->profile_start("poe_shutdown") if $self->{poe_profile};
### Abort all running async events
for my $event_token (keys %{$self->{running_async_event}}) {
### We can't use the normal abort_async_event
### because POE and IKC are shutting down shortly
$self->_abort_running_async_event($event_token);
- $self->log({level=>3},"poe_shutdown: abort running events :
event_token=[$event_token]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"poe_shutdown: abort running events :
event_token=[$event_token]\n") if $self->{poe_trace};
}
### Clear your alias
@@ -985,6 +1024,7 @@
### Shut down POE IKC
$kernel->post('IKC', 'shutdown');
+ $self->profile_stop("poe_shutdown") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
return;
}
@@ -992,19 +1032,22 @@
sub poe_dispatch_pending_async_events {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $arg ) = @_[ OBJECT, KERNEL, HEAP, ARG0 ];
- $self->log({level=>3},"POE: poe_dispatch_pending_async_events enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_dispatch_pending_async_events") if
$self->{poe_profile};
+ $self->log({level=>3},"POE: poe_dispatch_pending_async_events enter\n") if
$self->{poe_trace};
$self->poe_yield_acknowledged("poe_dispatch_pending_async_events");
my $events_occurred = $self->dispatch_pending_async_events();
- $self->log({level=>3},"POE: poe_dispatch_pending_async_events exit:
events_occurred[$events_occurred]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_dispatch_pending_async_events exit:
events_occurred[$events_occurred]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_dispatch_pending_async_events") if
$self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
sub poe_event_loop_extension {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
- $self->log({level=>3},"POE: poe_event_loop_extension enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_event_loop_extension") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_event_loop_extension enter\n") if
$self->{poe_trace};
$self->poe_yield_acknowledged("poe_event_loop_extension");
my $event_loop_extensions = $self->{event_loop_extensions};
@@ -1024,7 +1067,8 @@
$self->poe_yield($kernel, "poe_event_loop_extension");
}
- $self->log({level=>3},"POE: poe_event_loop_extension exit:
event_loop_extensions[" . @$event_loop_extensions . "]
async_events_added[$async_events_added]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_event_loop_extension exit:
event_loop_extensions[" . @$event_loop_extensions . "]
async_events_added[$async_events_added]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_event_loop_extension") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
@@ -1040,21 +1084,23 @@
sub poe_run_event {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $event ) = @_[ OBJECT, KERNEL, HEAP, ARG0 ];
- $self->log({level=>3},"POE: poe_run_event enter\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_run_event enter\n") if $self->{poe_trace};
my ($event_str);
my $args = $event->{args} || [];
my $args_str = join(",", @$args);
if ($event->{name}) {
my $service_type = $event->{service_type} || "SessionObject";
- $event_str =
"$service_type($event->{name}).$event->{method}($args_str)";
+ $event_str = "$service_type($event->{name}).$event->{method}";
}
else {
- $event_str = "$event->{method}($args_str)";
+ $event_str = "$event->{method}";
}
+ $self->profile_start("poe_run_event: $event_str") if $self->{poe_profile};
$self->send_event($event);
- $self->log({level=>3},"POE: poe_run_event exit: event[$event_str]\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_run_event exit:
event[$event_str($args_str)]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_run_event: $event_str") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
@@ -1062,13 +1108,15 @@
sub poe_enqueue_async_event {
&App::sub_entry if ($App::trace);
my ($self, $kernel, $args) = @_[OBJECT, KERNEL, ARG0];
- $self->log({level=>3},"POE: poe_enqueue_async_event enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_enqueue_async_event") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_enqueue_async_event enter\n") if
$self->{poe_trace};
my ($sender, $event, $callback_event) = @$args;
my $runtime_event_token = $self->send_async_event($event, { method =>
"async_event_finished", args => [ $sender, $event, $callback_event ], });
$event->{event_token} = $runtime_event_token;
- $self->log({level=>3},"POE: poe_enqueue_async_event exit:
event[$event->{name}.$event->{method} token=$event->{event_token}]
runtime_event_token[$runtime_event_token]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_enqueue_async_event exit:
event[$event->{name}.$event->{method} token=$event->{event_token}]
runtime_event_token[$runtime_event_token]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_enqueue_async_event") if $self->{poe_profile};
&App::sub_exit([$runtime_event_token, [$event, $callback_event]]) if
($App::trace);
return([$runtime_event_token, [$event, $callback_event]]);
}
@@ -1077,12 +1125,14 @@
sub poe_enqueue_async_event_finished {
&App::sub_entry if ($App::trace);
my ($self, $kernel, $return_values) = @_[OBJECT, KERNEL, ARG0];
- $self->log({level=>3},"POE: poe_enqueue_async_event_finished enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_enqueue_async_event_finished") if
$self->{poe_profile};
+ $self->log({level=>3},"POE: poe_enqueue_async_event_finished enter\n") if
$self->{poe_trace};
my ($runtime_event_token, $async_event) = @$return_values;
$self->{running_async_event}{$runtime_event_token} = $async_event;
- $self->log({level=>3},"POE: poe_enqueue_async_event_finished exit:
event[$async_event->[0]{name}.$async_event->[0]{method} =>
$runtime_event_token]\n") if $self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_enqueue_async_event_finished exit:
event[$async_event->[0]{name}.$async_event->[0]{method} =>
$runtime_event_token]\n") if $self->{poe_trace};
+ $self->profile_stop("poe_enqueue_async_event_finished") if
$self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
@@ -1090,6 +1140,7 @@
sub async_event_finished {
&App::sub_entry if ($App::trace);
my ($self, $sender, $event, $callback_event) = @_;
+ $self->profile_start("async_event_finished") if $self->{poe_profile};
my $runtime_event_token = $event->{event_token};
my $remote_server_name = "poe_${sender}";
@@ -1101,6 +1152,7 @@
$kernel->post("IKC", "post",
"poe://$remote_server_name/$remote_session_alias/$remote_session_state",
[ $runtime_event_token, $callback_event->{args} ]);
+ $self->profile_stop("async_event_finished") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
@@ -1108,13 +1160,14 @@
sub poe_remote_async_event_finished {
&App::sub_entry if ($App::trace);
my ($self, $kernel, $args) = @_[OBJECT, KERNEL, ARG0];
- $self->log({level=>3},"POE: poe_remote_async_event_finished enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_remote_async_event_finished") if
$self->{poe_profile};
+ $self->log({level=>3},"POE: poe_remote_async_event_finished enter\n") if
$self->{poe_trace};
my ($runtime_event_token, $callback_args) = @$args;
my $async_event = $self->{running_async_event}{$runtime_event_token};
if ($async_event) {
my ($event, $callback_event) = @$async_event;
- $self->log({level=>3},"POE: poe_remote_async_event_finished :
($event->{name}.$event->{method} => $runtime_event_token)\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_remote_async_event_finished :
($event->{name}.$event->{method} => $runtime_event_token)\n") if
$self->{poe_trace};
delete $self->{running_async_event}{$runtime_event_token};
my $destination = $event->{destination} || "local";
@@ -1140,18 +1193,21 @@
}
}
- $self->log({level=>3},"POE: poe_remote_async_event_finished exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_remote_async_event_finished exit\n") if
$self->{poe_trace};
+ $self->profile_stop("poe_remote_async_event_finished") if
$self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
sub poe_server_state {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
- $self->log({level=>3},"POE: poe_server_state enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_server_state") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_server_state enter\n") if
$self->{poe_trace};
my $server_state = $self->state();
- $self->log({level=>3},"POE: poe_server_state exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_server_state exit\n") if
$self->{poe_trace};
+ $self->profile_stop("poe_server_state") if $self->{poe_profile};
&App::sub_exit($server_state) if ($App::trace);
return $server_state;
}
@@ -1159,7 +1215,8 @@
sub poe_http_server_state {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $request, $response ) = @_[ OBJECT, KERNEL,
HEAP, ARG0, ARG1 ];
- $self->log({level=>3},"POE: poe_http_server_state enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_http_server_state") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_http_server_state enter\n") if
$self->{poe_trace};
my $server_state = $kernel->call( $self->{poe_session_name},
'poe_server_state' );
### Build the response.
@@ -1169,7 +1226,8 @@
### Signal that the request was handled okay.
$kernel->post( $self->{poe_kernel_http_name}, 'DONE', $response );
- $self->log({level=>3},"POE: poe_http_server_state exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_http_server_state exit\n") if
$self->{poe_trace};
+ $self->profile_stop("poe_http_server_state") if $self->{poe_profile};
&App::sub_exit(RC_OK) if ($App::trace);
return RC_OK;
}
@@ -1177,11 +1235,13 @@
sub poe_debug {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap ) = @_[ OBJECT, KERNEL, HEAP ];
- $self->log({level=>3},"POE: poe_debug enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_debug") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_debug enter\n") if $self->{poe_trace};
my $debug = $self->debug();
- $self->log({level=>3},"POE: poe_debug exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_debug exit\n") if $self->{poe_trace};
+ $self->profile_stop("poe_debug") if $self->{poe_profile};
&App::sub_exit($debug) if ($App::trace);
return $debug;
}
@@ -1189,6 +1249,7 @@
sub poe_http_debug {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $request, $response ) = @_[ OBJECT, KERNEL,
HEAP, ARG0, ARG1 ];
+ $self->profile_start("poe_http_debug") if $self->{poe_profile};
$self->log({level=>3},"POE: poe_http_debug enter\n");
my $debug = $kernel->call( $self->{poe_session_name}, 'poe_debug' );
@@ -1199,7 +1260,8 @@
### Signal that the request was handled okay.
$kernel->post( $self->{poe_kernel_http_name}, 'DONE', $response );
- $self->log({level=>3},"POE: poe_http_debug exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_http_debug exit\n") if $self->{poe_trace};
+ $self->profile_stop("poe_http_debug") if $self->{poe_profile};
&App::sub_exit(RC_OK) if ($App::trace);
return RC_OK;
}
@@ -1207,7 +1269,8 @@
sub poe_http_test_run {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $request, $response ) = @_[ OBJECT, KERNEL,
HEAP, ARG0, ARG1 ];
- $self->log({level=>3},"POE: poe_http_test_run enter\n") if
$self->{options}{poe_trace};
+ $self->profile_start("poe_http_test_run") if $self->{poe_profile};
+ $self->log({level=>3},"POE: poe_http_test_run enter\n") if
$self->{poe_trace};
my $event = {
service_type => "SessionObject",
@@ -1225,7 +1288,8 @@
# Signal that the request was handled okay.
$kernel->post( $self->{poe_kernel_http_name}, 'DONE', $response );
- $self->log({level=>3},"POE: poe_http_test_run exit\n") if
$self->{options}{poe_trace};
+ $self->log({level=>3},"POE: poe_http_test_run exit\n") if
$self->{poe_trace};
+ $self->profile_stop("poe_http_test_run") if $self->{poe_profile};
&App::sub_exit(RC_OK) if ($App::trace);
return RC_OK;
}