blob: 2fabdf46e98f61d90cb2a1f27f99c0b6194b726f [file] [log] [blame]
Andrey Andreev2fbbfe32012-01-07 18:37:15 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreev2fbbfe32012-01-07 18:37:15 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020018 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
25 * @filesource
26 */
27
Derek Allard2067d1a2008-11-13 22:59:24 +000028/**
29 * CodeIgniter Benchmark Class
30 *
31 * This class enables you to mark points and calculate the time difference
Andrey Andreev92ebfb62012-05-17 12:49:24 +030032 * between them. Memory consumption can also be displayed.
Derek Allard2067d1a2008-11-13 22:59:24 +000033 *
34 * @package CodeIgniter
35 * @subpackage Libraries
36 * @category Libraries
Derek Jonesf4a4bd82011-10-20 12:18:42 -050037 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000038 * @link http://codeigniter.com/user_guide/libraries/benchmark.html
39 */
40class CI_Benchmark {
41
root83e7a8e2011-08-14 19:55:57 +020042 /**
43 * List of all benchmark markers and when they were added
44 *
45 * @var array
46 */
Timothy Warren48a7fbb2012-04-23 11:58:16 -040047 public $marker = array();
Derek Allard2067d1a2008-11-13 22:59:24 +000048
49 // --------------------------------------------------------------------
50
51 /**
52 * Set a benchmark marker
53 *
54 * Multiple calls to this function can be made so that several
55 * execution points can be timed
56 *
Derek Allard2067d1a2008-11-13 22:59:24 +000057 * @param string $name name of the marker
58 * @return void
59 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020060 public function mark($name)
Derek Allard2067d1a2008-11-13 22:59:24 +000061 {
dixyab3cab52012-04-21 00:58:00 +020062 $this->marker[$name] = microtime(TRUE);
Derek Allard2067d1a2008-11-13 22:59:24 +000063 }
64
65 // --------------------------------------------------------------------
66
67 /**
68 * Calculates the time difference between two marked points.
69 *
70 * If the first parameter is empty this function instead returns the
71 * {elapsed_time} pseudo-variable. This permits the full system
72 * execution time to be shown in a template. The output class will
73 * swap the real value for this variable.
74 *
Derek Allard2067d1a2008-11-13 22:59:24 +000075 * @param string a particular marked point
76 * @param string a particular marked point
77 * @param integer the number of decimal places
78 * @return mixed
79 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020080 public function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
Derek Allard2067d1a2008-11-13 22:59:24 +000081 {
Alex Bilbieed944a32012-06-02 11:07:47 +010082 if ($point1 === '')
Derek Allard2067d1a2008-11-13 22:59:24 +000083 {
84 return '{elapsed_time}';
85 }
86
87 if ( ! isset($this->marker[$point1]))
88 {
89 return '';
90 }
91
92 if ( ! isset($this->marker[$point2]))
93 {
dixyab3cab52012-04-21 00:58:00 +020094 $this->marker[$point2] = microtime(TRUE);
Derek Allard2067d1a2008-11-13 22:59:24 +000095 }
Barry Mienydd671972010-10-04 16:33:58 +020096
dixyab3cab52012-04-21 00:58:00 +020097 return number_format($this->marker[$point2] - $this->marker[$point1], $decimals);
Derek Allard2067d1a2008-11-13 22:59:24 +000098 }
Barry Mienydd671972010-10-04 16:33:58 +020099
Derek Allard2067d1a2008-11-13 22:59:24 +0000100 // --------------------------------------------------------------------
101
102 /**
103 * Memory Usage
104 *
105 * This function returns the {memory_usage} pseudo-variable.
106 * This permits it to be put it anywhere in a template
107 * without the memory being calculated until the end.
108 * The output class will swap the real value for this variable.
109 *
Derek Allard2067d1a2008-11-13 22:59:24 +0000110 * @return string
111 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +0200112 public function memory_usage()
Derek Allard2067d1a2008-11-13 22:59:24 +0000113 {
114 return '{memory_usage}';
115 }
116
117}
118
Derek Allard2067d1a2008-11-13 22:59:24 +0000119/* End of file Benchmark.php */
Andrey Andreev92ebfb62012-05-17 12:49:24 +0300120/* Location: ./system/core/Benchmark.php */