PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/phpunit/php-timer/PHP/Timer.php

https://gitlab.com/karora/awl
PHP | 159 lines | 58 code | 16 blank | 85 comment | 12 complexity | 5c3cf487c45342d84381284f965303b0 MD5 | raw file
  1. <?php
  2. /**
  3. * PHP_Timer
  4. *
  5. * Copyright (c) 2010-2012, Sebastian Bergmann <sb@sebastian-bergmann.de>.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * * Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * * Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * * Neither the name of Sebastian Bergmann nor the names of his
  21. * contributors may be used to endorse or promote products derived
  22. * from this software without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  27. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  28. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  29. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  30. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  31. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  34. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  35. * POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. * @package PHP
  38. * @subpackage Timer
  39. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  40. * @copyright 2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  41. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  42. * @link http://github.com/sebastianbergmann/php-timer
  43. * @since File available since Release 1.0.0
  44. */
  45. /**
  46. * Utility class for timing.
  47. *
  48. * @package PHP
  49. * @subpackage Timer
  50. * @author Sebastian Bergmann <sb@sebastian-bergmann.de>
  51. * @copyright 2010-2012 Sebastian Bergmann <sb@sebastian-bergmann.de>
  52. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  53. * @version Release: @package_version@
  54. * @link http://github.com/sebastianbergmann/php-timer
  55. * @since Class available since Release 1.0.0
  56. */
  57. class PHP_Timer
  58. {
  59. /**
  60. * @var array
  61. */
  62. protected static $startTimes = array();
  63. /**
  64. * @var float
  65. */
  66. public static $requestTime;
  67. /**
  68. * Starts the timer.
  69. */
  70. public static function start()
  71. {
  72. array_push(self::$startTimes, microtime(TRUE));
  73. }
  74. /**
  75. * Stops the timer and returns the elapsed time.
  76. *
  77. * @return float
  78. */
  79. public static function stop()
  80. {
  81. return microtime(TRUE) - array_pop(self::$startTimes);
  82. }
  83. /**
  84. * Formats the elapsed time as a string.
  85. *
  86. * @param float $time
  87. * @return string
  88. */
  89. public static function secondsToTimeString($time)
  90. {
  91. $buffer = '';
  92. $hours = sprintf('%02d', ($time >= 3600) ? floor($time / 3600) : 0);
  93. $minutes = sprintf(
  94. '%02d',
  95. ($time >= 60) ? floor($time / 60) - 60 * $hours : 0
  96. );
  97. $seconds = sprintf('%02d', $time - 60 * 60 * $hours - 60 * $minutes);
  98. if ($hours == 0 && $minutes == 0) {
  99. $seconds = sprintf('%1d', $seconds);
  100. $buffer .= $seconds . ' second';
  101. if ($seconds != '1') {
  102. $buffer .= 's';
  103. }
  104. } else {
  105. if ($hours > 0) {
  106. $buffer = $hours . ':';
  107. }
  108. $buffer .= $minutes . ':' . $seconds;
  109. }
  110. return $buffer;
  111. }
  112. /**
  113. * Formats the elapsed time since the start of the request as a string.
  114. *
  115. * @return string
  116. */
  117. public static function timeSinceStartOfRequest()
  118. {
  119. return self::secondsToTimeString(time() - self::$requestTime);
  120. }
  121. /**
  122. * Returns the resources (time, memory) of the request as a string.
  123. *
  124. * @return string
  125. */
  126. public static function resourceUsage()
  127. {
  128. return sprintf(
  129. 'Time: %s, Memory: %4.2fMb',
  130. self::timeSinceStartOfRequest(),
  131. memory_get_peak_usage(TRUE) / 1048576
  132. );
  133. }
  134. }
  135. if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
  136. PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT'];
  137. }
  138. else if (isset($_SERVER['REQUEST_TIME'])) {
  139. PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME'];
  140. }
  141. else {
  142. PHP_Timer::$requestTime = time();
  143. }