diff options
author | xue <> | 2006-06-19 02:31:27 +0000 |
---|---|---|
committer | xue <> | 2006-06-19 02:31:27 +0000 |
commit | b59ab2490b1bb82dc1d0b58d89584182b405d0a0 (patch) | |
tree | d6770beffd006c092b3211208b686462cd279ab0 /buildscripts/Benchmark/Iterate.php | |
parent | 9b918c5b7fa3aac6e077f15dc06c1d8d7185f5aa (diff) |
build script update. Fixed #82 and #165.
Diffstat (limited to 'buildscripts/Benchmark/Iterate.php')
-rw-r--r-- | buildscripts/Benchmark/Iterate.php | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/buildscripts/Benchmark/Iterate.php b/buildscripts/Benchmark/Iterate.php new file mode 100644 index 00000000..acf1ec08 --- /dev/null +++ b/buildscripts/Benchmark/Iterate.php @@ -0,0 +1,167 @@ +<?php
+//
+// +------------------------------------------------------------------------+
+// | PEAR :: Benchmark |
+// +------------------------------------------------------------------------+
+// | Copyright (c) 2001-2006 Sebastian Bergmann <sb@sebastian-bergmann.de>. |
+// +------------------------------------------------------------------------+
+// | This source file is subject to the New BSD license, That is bundled |
+// | with this package in the file LICENSE, and is available through |
+// | the world-wide-web at |
+// | http://www.opensource.org/licenses/bsd-license.php |
+// | If you did not receive a copy of the new BSDlicense and are unable |
+// | to obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +------------------------------------------------------------------------+
+//
+// $Id: Iterate.php,v 1.12 2006/02/17 16:29:44 toggg Exp $
+//
+
+require_once 'Benchmark/Timer.php';
+
+/**
+ * Provides timing and profiling information.
+ *
+ * Example 1
+ *
+ * <code>
+ * <?php
+ * require_once 'Benchmark/Iterate.php';
+ *
+ * $benchmark = new Benchmark_Iterate;
+ *
+ * function foo($string) {
+ * print $string . '<br>';
+ * }
+ *
+ * $benchmark->run(100, 'foo', 'test');
+ * $result = $benchmark->get();
+ * ?>
+ * </code>
+ *
+ * Example 2
+ *
+ * <code>
+ * <?php
+ * require_once 'Benchmark/Iterate.php';
+ *
+ * $benchmark = new Benchmark_Iterate;
+ *
+ * class MyClass {
+ * function foo($string) {
+ * print $string . '<br>';
+ * }
+ * }
+ *
+ * $benchmark->run(100, 'myclass::foo', 'test');
+ * $result = $benchmark->get();
+ * ?>
+ * </code>
+ *
+ * Example 3
+ *
+ * <code>
+ * <?php
+ * require_once 'Benchmark/Iterate.php';
+ *
+ * $benchmark = new Benchmark_Iterate;
+ *
+ * class MyClass {
+ * function foo($string) {
+ * print $string . '<br>';
+ * }
+ * }
+ *
+ * $o = new MyClass();
+ *
+ * $benchmark->run(100, 'o->foo', 'test');
+ * $result = $benchmark->get();
+ * ?>
+ * </code>
+ *
+ * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @copyright Copyright © 2002-2005 Sebastian Bergmann <sb@sebastian-bergmann.de>
+ * @license http://www.php.net/license/3_0.txt The PHP License, Version 3.0
+ * @category Benchmarking
+ * @package Benchmark
+ */
+class Benchmark_Iterate extends Benchmark_Timer {
+ /**
+ * Benchmarks a function or method.
+ *
+ * @access public
+ */
+ function run() {
+ $arguments = func_get_args();
+ $iterations = array_shift($arguments);
+ $function_name = array_shift($arguments);
+
+ if (strstr($function_name, '::')) {
+ $function_name = explode('::', $function_name);
+ $objectmethod = $function_name[1];
+ }
+
+ if (strstr($function_name, '->')) {
+ $function_name = explode('->', $function_name);
+ $objectname = $function_name[0];
+
+ $object = $GLOBALS[$objectname];
+ $objectmethod = $function_name[1];
+
+ for ($i = 1; $i <= $iterations; $i++) {
+ $this->setMarker('start_' . $i);
+ call_user_func_array(array($object, $function_name[1]), $arguments);
+ $this->setMarker('end_' . $i);
+ }
+
+ return(0);
+ }
+
+ for ($i = 1; $i <= $iterations; $i++) {
+ $this->setMarker('start_' . $i);
+ call_user_func_array($function_name, $arguments);
+ $this->setMarker('end_' . $i);
+ }
+ }
+
+ /**
+ * Returns benchmark result.
+ *
+ * $result[x ] = execution time of iteration x
+ * $result['mean' ] = mean execution time
+ * $result['iterations'] = number of iterations
+ *
+ * @return array
+ * @access public
+ */
+ function get($simple_output = false) {
+ $result = array();
+ $total = 0;
+
+ $iterations = count($this->markers)/2;
+
+ for ($i = 1; $i <= $iterations; $i++) {
+ $time = $this->timeElapsed('start_'.$i , 'end_'.$i);
+
+ if (extension_loaded('bcmath')) {
+ $total = bcadd($total, $time, 6);
+ } else {
+ $total = $total + $time;
+ }
+
+ if (!$simple_output) {
+ $result[$i] = $time;
+ }
+ }
+
+ if (extension_loaded('bcmath')) {
+ $result['mean'] = bcdiv($total, $iterations, 6);
+ } else {
+ $result['mean'] = $total / $iterations;
+ }
+
+ $result['iterations'] = $iterations;
+
+ return $result;
+ }
+}
|