blob: d6e1336484a94613576c704cf9e2e8f620470f36 [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Andrey Andreevfe9309d2015-01-09 17:48:58 +02005 * An open source application development framework for PHP
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +02007 * This content is released under the MIT License (MIT)
Andrey Andreev2fbbfe32012-01-07 18:37:15 +02008 *
Andrey Andreevcce6bd12018-01-09 11:32:02 +02009 * Copyright (c) 2014 - 2018, British Columbia Institute of Technology
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020010 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020011 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020017 *
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020018 * The above copyright notice and this permission notice shall be included in
19 * all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27 * THE SOFTWARE.
28 *
29 * @package CodeIgniter
30 * @author EllisLab Dev Team
Andrey Andreev1924e872016-01-11 12:55:34 +020031 * @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
Andrey Andreevcce6bd12018-01-09 11:32:02 +020032 * @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020033 * @license http://opensource.org/licenses/MIT MIT License
Andrey Andreevbd202c92016-01-11 12:50:18 +020034 * @link https://codeigniter.com
Andrey Andreevbdb96ca2014-10-28 00:13:31 +020035 * @since Version 1.0.0
Derek Allard2067d1a2008-11-13 22:59:24 +000036 * @filesource
37 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020038defined('BASEPATH') OR exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +000039
Derek Allard2067d1a2008-11-13 22:59:24 +000040/**
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030041 * Benchmark Class
Derek Allard2067d1a2008-11-13 22:59:24 +000042 *
43 * This class enables you to mark points and calculate the time difference
Andrey Andreev92ebfb62012-05-17 12:49:24 +030044 * between them. Memory consumption can also be displayed.
Derek Allard2067d1a2008-11-13 22:59:24 +000045 *
46 * @package CodeIgniter
47 * @subpackage Libraries
48 * @category Libraries
Derek Jonesf4a4bd82011-10-20 12:18:42 -050049 * @author EllisLab Dev Team
Andrey Andreevbd202c92016-01-11 12:50:18 +020050 * @link https://codeigniter.com/user_guide/libraries/benchmark.html
Derek Allard2067d1a2008-11-13 22:59:24 +000051 */
52class CI_Benchmark {
53
root83e7a8e2011-08-14 19:55:57 +020054 /**
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030055 * List of all benchmark markers
root83e7a8e2011-08-14 19:55:57 +020056 *
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030057 * @var array
root83e7a8e2011-08-14 19:55:57 +020058 */
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030059 public $marker = array();
Derek Allard2067d1a2008-11-13 22:59:24 +000060
61 /**
62 * Set a benchmark marker
63 *
64 * Multiple calls to this function can be made so that several
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030065 * execution points can be timed.
Derek Allard2067d1a2008-11-13 22:59:24 +000066 *
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030067 * @param string $name Marker name
Derek Allard2067d1a2008-11-13 22:59:24 +000068 * @return void
69 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020070 public function mark($name)
Derek Allard2067d1a2008-11-13 22:59:24 +000071 {
dixyab3cab52012-04-21 00:58:00 +020072 $this->marker[$name] = microtime(TRUE);
Derek Allard2067d1a2008-11-13 22:59:24 +000073 }
74
75 // --------------------------------------------------------------------
76
77 /**
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030078 * Elapsed time
79 *
Derek Allard2067d1a2008-11-13 22:59:24 +000080 * Calculates the time difference between two marked points.
81 *
82 * If the first parameter is empty this function instead returns the
83 * {elapsed_time} pseudo-variable. This permits the full system
84 * execution time to be shown in a template. The output class will
85 * swap the real value for this variable.
86 *
Andrey Andreev3e9d2b82012-10-27 14:28:51 +030087 * @param string $point1 A particular marked point
88 * @param string $point2 A particular marked point
89 * @param int $decimals Number of decimal places
90 *
91 * @return string Calculated elapsed time on success,
92 * an '{elapsed_string}' if $point1 is empty
93 * or an empty string if $point1 is not found.
Derek Allard2067d1a2008-11-13 22:59:24 +000094 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +020095 public function elapsed_time($point1 = '', $point2 = '', $decimals = 4)
Derek Allard2067d1a2008-11-13 22:59:24 +000096 {
Alex Bilbieed944a32012-06-02 11:07:47 +010097 if ($point1 === '')
Derek Allard2067d1a2008-11-13 22:59:24 +000098 {
99 return '{elapsed_time}';
100 }
101
102 if ( ! isset($this->marker[$point1]))
103 {
104 return '';
105 }
106
107 if ( ! isset($this->marker[$point2]))
108 {
dixyab3cab52012-04-21 00:58:00 +0200109 $this->marker[$point2] = microtime(TRUE);
Derek Allard2067d1a2008-11-13 22:59:24 +0000110 }
Barry Mienydd671972010-10-04 16:33:58 +0200111
dixyab3cab52012-04-21 00:58:00 +0200112 return number_format($this->marker[$point2] - $this->marker[$point1], $decimals);
Derek Allard2067d1a2008-11-13 22:59:24 +0000113 }
Barry Mienydd671972010-10-04 16:33:58 +0200114
Derek Allard2067d1a2008-11-13 22:59:24 +0000115 // --------------------------------------------------------------------
116
117 /**
118 * Memory Usage
119 *
Andrey Andreev3e9d2b82012-10-27 14:28:51 +0300120 * Simply returns the {memory_usage} marker.
121 *
Derek Allard2067d1a2008-11-13 22:59:24 +0000122 * This permits it to be put it anywhere in a template
123 * without the memory being calculated until the end.
124 * The output class will swap the real value for this variable.
125 *
Andrey Andreev3e9d2b82012-10-27 14:28:51 +0300126 * @return string '{memory_usage}'
Derek Allard2067d1a2008-11-13 22:59:24 +0000127 */
Andrey Andreev2fbbfe32012-01-07 18:37:15 +0200128 public function memory_usage()
Derek Allard2067d1a2008-11-13 22:59:24 +0000129 {
130 return '{memory_usage}';
131 }
132
133}