NAME
    Devel::Timer - Track and report execution time for parts of code

SYNOPSIS
      use Devel::Timer;

      my $t = new Devel::Timer();

      $t->mark("first db query");

      ## do some work

      $t->mark("second db query");

      ## do some more work

      $t->mark("end of second db query");

      $t->report();

DESCRIPTION
    Devel::Timer allows developers to accurately time how long a specific
    piece of code takes to execute. This can be helpful in locating the
    slowest parts of an existing application.

    First, the Devel::Timer module is used and instantiated.

      use Devel::Timer;

      my $t = new Devel::Timer();

    Second, markers are placed before and after pieces of code that need to
    be timed. For this example, we are profiling the methods
    get_user_score() and get_average_user_score().

      $t->mark("first db query");
      &get_user_score($user);

      $t->mark("second db query");
      &get_average_user_score();

    Finally, at the end of the code that you want to profile, and end marker
    is place, and a report is generated on stderr.

      $t->mark("END");
      $t->report();

    Sample report:

      Devel::Timer Report -- Total time: 0.3464 secs
      Interval  Time    Percent
      ----------------------------------------------
      02 -> 03  0.3001  86.63%  second db query -> END
      01 -> 02  0.0461  13.30%  first db query -> second db query
      00 -> 01  0.0002   0.07%  INIT -> first db query

    The report is output using the method Devel::Timer::print() which
    currently just prints to stderr. If you want to send the output to a
    custom location you can override the print() method. The initialize()
    and shutdown() methods can also overridden if you want to open and close
    log files or database connections.

    e.g.

    package MyTimer;

    use strict; use Devel::Timer; use vars qw(@ISA);

    @ISA = ("Devel::Timer");

    sub initialize { my $log = "/tmp/timer.log"; open(LOG, ">>$log") or
    die("Unable to open [$log] for writing."); }

    sub print { my($self, $msg) = @_; print LOG $msg . "\n"; }

    sub shutdown { close LOG; }

    You would then use the new module MyTimer exactly as you would use
    Devel::Timer.

      use MyTimer;
      my $t = new MyTimer();
      $t->mark("about to do x");
      $t->mark("about to do y");
      $t->mark("done y");
      $t->report();

SEE ALSO
    Time::HiRes

AUTHOR
      Jason Moore - jmoore@sober.com

      Maintainer: Gabor Szabo - gabor@pti.co.il

