home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / Benchmark / Iterate.php next >
PHP Script  |  2001-03-03  |  4KB  |  138 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4.0                                                      |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2001 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.02 of the PHP license,      |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Sebastian Bergmann <sb@sebastian-bergmann.de>               |
  17. // +----------------------------------------------------------------------+
  18. //
  19. // $Id: Iterate.php,v 1.6 2001/03/03 06:36:44 sbergmann Exp $
  20. //
  21.  
  22. require_once 'Benchmark/Timer.php';
  23.  
  24. /**
  25. * Benchmark::Benchmark_Iterate
  26. * Purpose:
  27. *     Benchmarking
  28. * Example:
  29. *     require_once "Benchmark/Iterate.php";
  30. *     $benchmark = new Benchmark_Iterate;
  31. *     function foo($string)
  32. *     {
  33. *         print $string."<br>";
  34. *     }
  35. *     $benchmark->run(100, 'foo', 'test');
  36. *     $result = $benchmark->get();
  37. * @author   Sebastian Bergmann <sb@sebastian-bergmann.de>
  38. * @version  $Revision: 1.6 $
  39. * @access   public
  40. */
  41.  
  42. class Benchmark_Iterate extends Benchmark_Timer
  43. {
  44.     // {{{ run()
  45.  
  46.     /**
  47.     * Benchmarks a function.
  48.     *
  49.     * @access public
  50.     */
  51.  
  52.     function run()
  53.     {
  54.         // get arguments
  55.         $arguments = func_get_args();
  56.         $iterations = array_shift($arguments);
  57.         $function_name = array_shift($arguments);
  58.  
  59.         // main loop
  60.         for ($i = 1; $i <= $iterations; $i++)
  61.         {
  62.             // set 'start' marker for current iteration
  63.             $this->setMarker('start_'.$i);
  64.  
  65.             // call function to be benchmarked
  66.             call_user_func_array($function_name, $arguments);
  67.  
  68.             // set 'end' marker for current iteration
  69.             $this->setMarker('end_'.$i);
  70.         }
  71.     }
  72.  
  73.     // }}}
  74.     // {{{ get()
  75.  
  76.     /**
  77.     * Returns benchmark result.
  78.     *
  79.     * $result[x           ] = execution time of iteration x
  80.     * $result['mean'      ] = mean execution time
  81.     * $result['iterations'] = number of iterations
  82.     *
  83.     * @return array $result
  84.     * @access public
  85.     */
  86.  
  87.     function get()
  88.     {
  89.         // init result array
  90.         $result = array();
  91.  
  92.         // init variable
  93.         $total = 0;
  94.  
  95.         $iterations = count($this->markers)/2;
  96.  
  97.         // loop through iterations
  98.         for ($i = 1; $i <= $iterations; $i++)
  99.         {
  100.             // get elapsed time for current iteration
  101.             $time = $this->timeElapsed('start_'.$i , 'end_'.$i);
  102.  
  103.             // sum up total time spent
  104.             if (extension_loaded('bcmath')) {
  105.                 $total = bcadd($total, $time, 6);
  106.             } else {
  107.                 $total = $total + $time;
  108.             }
  109.             
  110.             // store time
  111.             $result[$i] = $time;
  112.         }
  113.  
  114.         // calculate and store mean time
  115.         if (extension_loaded('bcmath')) {
  116.             $result['mean'] = bcdiv($total, $iterations, 6);
  117.         } else {
  118.             $result['mean'] = $total / $iterations;
  119.         }
  120.  
  121.         // store iterations
  122.         $result['iterations'] = $iterations;
  123.  
  124.         // return result array
  125.         return $result;
  126.     }
  127.  
  128.     // }}}
  129. }
  130. ?>
  131.