1: <?php defined('_JOOS_CORE') or exit();
2:
3: /**
4: * Библиотека профилирования системы
5: *
6: * @version 1.0
7: * @package Core\Libraries
8: * @subpackage Benchmark
9: * @category Libraries
10: * @author Joostina Team <info@joostina.ru>
11: * @copyright (C) 2007-2012 Joostina Team
12: * @license MIT License http://www.opensource.org/licenses/mit-license.php
13: * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
14: *
15: * */
16: class joosBenchmark
17: {
18: /**
19: * Внутренний массив хранения временных меток
20: *
21: * @var array
22: */
23: private static $markers = array();
24:
25: /**
26: * Время установки первой точки рассчета
27: *
28: * @var float
29: */
30: private static $start;
31:
32: public static function start()
33: {
34: if (self::$start !== null) {
35: throw new joosException('Таймер уже запущен');
36: }
37: self::$start = microtime(true);
38: }
39:
40: /**
41: * Установка точки рассчета времени
42: *
43: * @param string $name название точки рассчера
44: *
45: * @return int время прошедшее с установки последней точки до текущей
46: */
47: public static function mark($name)
48: {
49: if (self::$start === null) {
50: throw new joosException('Таймер сначала должен быть запущен');
51: }
52:
53: $mark = array();
54: // название точки рассчета
55: $mark['id'] = $name;
56: // время на момент создания точки
57: $mark['microtime'] = microtime(true);
58: // время, прошедшее с начала рассчета
59: $mark['since_start'] = $mark['microtime'] - self::$start;
60: // время с момента установки последней точки
61: $mark['since_last_mark'] = count(self::$markers) ? ($mark['microtime'] - self::$markers[count(self::$markers) - 1]['microtime']) : $mark['since_start'];
62: self::$markers[] = $mark;
63:
64: return $mark['since_last_mark'];
65: }
66:
67: /**
68: * Рассчет времени между двёмя точками рассчета
69: *
70: * @param string $mark1 название первой точки рассчета
71: * @param string $mark2 название второй точки рассчета
72: *
73: * @return float разница во времени между первой и второй точками рассчета в милисекундах
74: */
75: public static function elapsed_time($mark1, $mark2)
76: {
77: return self::$markers[$mark2] - self::$markers[$mark1];
78: }
79:
80: /**
81: * Очистка всех данных о внутренних точках рассчате и их значениях
82: *
83: */
84: public static function clear()
85: {
86: self::$markers = array();
87: }
88:
89: /**
90: * Получение внутренней информации о точках рассчета времени
91: *
92: * @return array массив информации о стоп-точках рассчета времени
93: */
94: public static function get_markers()
95: {
96: return self::$markers;
97: }
98:
99: /**
100: * Получение полного времени с момента старта до текущего момента
101: *
102: * @return float затраченное время
103: */
104: public static function get_time()
105: {
106: return round((microtime(true) - self::$start), 5);
107: }
108:
109: }
110: