87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package     FrameworkOnFramework
 | |
|  * @subpackage  utils
 | |
|  * @copyright   Copyright (C) 2010-2016 Nicholas K. Dionysopoulos / Akeeba Ltd. All rights reserved.
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt
 | |
|  */
 | |
| 
 | |
| defined('F0F_INCLUDED') or die;
 | |
| 
 | |
| /**
 | |
|  * An execution timer monitor class
 | |
|  */
 | |
| class F0FUtilsTimer
 | |
| {
 | |
| 	/** @var float Maximum execution time allowance */
 | |
| 	private $max_exec_time = null;
 | |
| 
 | |
| 	/** @var float Timestamp of execution start */
 | |
| 	private $start_time = null;
 | |
| 
 | |
| 	/**
 | |
| 	 * Public constructor, creates the timer object and calculates the execution
 | |
| 	 * time limits.
 | |
| 	 *
 | |
| 	 * @param float $max_exec_time Maximum execution time allowance
 | |
| 	 * @param float $runtime_bias  Execution time bias (expressed as % of $max_exec_time)
 | |
| 	 */
 | |
| 	public function __construct($max_exec_time = 5.0, $runtime_bias = 75.0)
 | |
| 	{
 | |
| 		// Initialize start time
 | |
| 		$this->start_time = $this->microtime_float();
 | |
| 
 | |
| 		$this->max_exec_time = $max_exec_time * $runtime_bias / 100.0;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Wake-up function to reset internal timer when we get unserialized
 | |
| 	 */
 | |
| 	public function __wakeup()
 | |
| 	{
 | |
| 		// Re-initialize start time on wake-up
 | |
| 		$this->start_time = $this->microtime_float();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Gets the number of seconds left, before we hit the "must break" threshold. Negative
 | |
| 	 * values mean that we have already crossed that threshold.
 | |
| 	 *
 | |
| 	 * @return  float
 | |
| 	 */
 | |
| 	public function getTimeLeft()
 | |
| 	{
 | |
| 		return $this->max_exec_time - $this->getRunningTime();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Gets the time elapsed since object creation/unserialization, effectively
 | |
| 	 * how long we are running
 | |
| 	 *
 | |
| 	 * @return  float
 | |
| 	 */
 | |
| 	public function getRunningTime()
 | |
| 	{
 | |
| 		return $this->microtime_float() - $this->start_time;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns the current timestamp in decimal seconds
 | |
| 	 *
 | |
| 	 * @return  float
 | |
| 	 */
 | |
| 	private function microtime_float()
 | |
| 	{
 | |
| 		list($usec, $sec) = explode(" ", microtime());
 | |
| 		return ((float)$usec + (float)$sec);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Reset the timer
 | |
| 	 */
 | |
| 	public function resetTime()
 | |
| 	{
 | |
| 		$this->start_time = $this->microtime_float();
 | |
| 	}
 | |
| 
 | |
| } |