<?php
class Profiler {

   static protected $ticks = array();
   static protected $file = false;
   static private $buffer = 0;

   public function instantiate() {
      register_tick_function(array('Profiler', 'doSomethingWithTheTick'));
      self::$buffer = microtime(true);
   }

   static public function doSomethingWithTheTick() {
      $backtrace = debug_backtrace();
      if(!self::$file) {
         self::$file = $backtrace[0]['file'];
      }
      self::$ticks[$backtrace[0]['line']][] =  microtime(true) - self::$buffer;
      self::$buffer = microtime(true);
   }

   static public function getTicks() {
      return self::$ticks;
   }

   static public function printReport($return = false) {
      ksort(self::$ticks);

      $lines = array();
      $times = array();
      $rounds = array();

      $lines = array_keys(self::$ticks);
      foreach(self::$ticks as $time) {
         $times[] = round(array_sum($time) * 100, 5);
         $rounds[] = count($time);
      }

      $ouput = "
      <script type=\"text/javascript\">
         var c = new Chart(document.getElementById('chart'));
         c.setDefaultType(CHART_LINE);
         c.setGridDensity(" . count($lines) . ", 15);
         c.setHorizontalLabels([" . implode(', ', $lines) . "]);
         c.setShowLegend(true);
         c.add('Tijd', '#000000', [" . implode(', ', $times) . "]);
         c.draw();

         var d = new Chart(document.getElementById('chart2'));
         d.setDefaultType(CHART_LINE);
         d.setGridDensity(" . count($lines) . ", 15);
         d.setHorizontalLabels([" . implode(', ', $lines) . "]);
         d.setShowLegend(true);
         d.add('Rondes', '#FF0000', [" . implode(', ', $rounds) . "]);
         d.draw();
      </script>";
         if($return)
            return $ouput;
         else
            echo $output;
   }
}
?>
Voorbeeldcode:
<?php
require 'bovenstaandeKlasse.php';

Profiler::instantiate();

declare(ticks=1) {
 //hier je code
}

//geeft de javascript-code
Profiler::printReport();

//geeft de kale array
var_dump(Profiler::getTicks());

//geeft de javascript-code terug (return = true)
var_dump(Profiler::printReport(true));
?>