summaryrefslogtreecommitdiffstats
path: root/lib/Reply/Plugin/Timer.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Reply/Plugin/Timer.pm')
-rw-r--r--lib/Reply/Plugin/Timer.pm52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/Reply/Plugin/Timer.pm b/lib/Reply/Plugin/Timer.pm
new file mode 100644
index 0000000..a3ec247
--- /dev/null
+++ b/lib/Reply/Plugin/Timer.pm
@@ -0,0 +1,52 @@
+package Reply::Plugin::Timer;
+use strict;
+use warnings;
+# ABSTRACT: time commands
+
+use base 'Reply::Plugin';
+
+use Time::HiRes qw(gettimeofday tv_interval);
+
+=head1 SYNOPSIS
+
+ ; .replyrc
+ [Timer]
+ mintime = 0.01
+
+=head1 DESCRIPTION
+
+This plugin prints timer info for results that take longer than C<mintime>.
+the default C<mintime> is C<< 0.01 >> seconds.
+
+=cut
+
+sub new {
+ my $class = shift;
+ my %opts = @_;
+
+ my $self = $class->SUPER::new(@_);
+ $self->{mintime} = $opts{mintime} || 0.01;
+
+ return $self;
+}
+
+
+sub execute {
+ my ($self, $next, @args) = @_;
+
+ my $t0 = [gettimeofday];
+ my $ret = $next->(@args);
+ my $elapsed = tv_interval($t0);
+
+ if ($elapsed > $self->{mintime}) {
+ if ($elapsed >= 1) {
+ printf "Execution Time: %0.3fs\n", $elapsed
+ } else {
+ printf "Execution Time: %dms\n", $elapsed * 1000
+ }
+ }
+
+ return $ret;
+}
+
+1;