class StopwatchEvent

Class StopwatchEvent

Hierarchy

Expanded class hierarchy of StopwatchEvent

File

webprofiler/src/Stopwatch.php, line 293

Namespace

Drupal\webprofiler
View source
class StopwatchEvent {
    
    /**
     * @var StopwatchPeriod[]
     */
    private $periods = [];
    
    /**
     * @var float
     */
    private $origin;
    
    /**
     * @var string
     */
    private $category;
    
    /**
     * @var float[]
     */
    private $started = [];
    
    /**
     * Constructor.
     *
     * @param float $origin The origin time in milliseconds
     * @param string|null $category The event category or null to use the default
     *
     * @throws \InvalidArgumentException When the raw time is not valid
     */
    public function __construct($origin, $category = NULL) {
        $this->origin = $this->formatTime($origin);
        $this->category = is_string($category) ? $category : 'default';
    }
    
    /**
     * Gets the category.
     *
     * @return string The category
     */
    public function getCategory() {
        return $this->category;
    }
    
    /**
     * Gets the origin.
     *
     * @return float The origin in milliseconds
     */
    public function getOrigin() {
        return $this->origin;
    }
    
    /**
     * Starts a new event period.
     *
     * @return StopwatchEvent The event
     */
    public function start() {
        $this->started[] = $this->getNow();
        return $this;
    }
    
    /**
     * Stops the last started event period.
     *
     * @throws \LogicException When start wasn't called before stopping
     *
     * @return StopwatchEvent The event
     *
     * @throws \LogicException When stop() is called without a matching call to start()
     */
    public function stop() {
        if (!count($this->started)) {
            throw new \LogicException('stop() called but start() has not been called before.');
        }
        $this->periods[] = new StopwatchPeriod(array_pop($this->started), $this->getNow());
        return $this;
    }
    
    /**
     * Checks if the event was started
     *
     * @return bool
     */
    public function isStarted() {
        return !empty($this->started);
    }
    
    /**
     * Stops the current period and then starts a new one.
     *
     * @return StopwatchEvent The event
     */
    public function lap() {
        return $this->stop()
            ->start();
    }
    
    /**
     * Stops all non already stopped periods.
     */
    public function ensureStopped() {
        while (count($this->started)) {
            $this->stop();
        }
    }
    
    /**
     * Gets all event periods.
     *
     * @return StopwatchPeriod[] An array of StopwatchPeriod instances
     */
    public function getPeriods() {
        return $this->periods;
    }
    
    /**
     * Gets the relative time of the start of the first period.
     *
     * @return integer The time (in milliseconds)
     */
    public function getStartTime() {
        return isset($this->periods[0]) ? $this->periods[0]
            ->getStartTime() : 0;
    }
    
    /**
     * Gets the relative time of the end of the last period.
     *
     * @return integer The time (in milliseconds)
     */
    public function getEndTime() {
        return ($count = count($this->periods)) ? $this->periods[$count - 1]
            ->getEndTime() : 0;
    }
    
    /**
     * Gets the duration of the events (including all periods).
     *
     * @return integer The duration (in milliseconds)
     */
    public function getDuration() {
        $total = 0;
        foreach ($this->periods as $period) {
            $total += $period->getDuration();
        }
        return $total;
    }
    
    /**
     * Gets the max memory usage of all periods.
     *
     * @return integer The memory usage (in bytes)
     */
    public function getMemory() {
        $memory = 0;
        foreach ($this->periods as $period) {
            if ($period->getMemory() > $memory) {
                $memory = $period->getMemory();
            }
        }
        return $memory;
    }
    
    /**
     * Return the current time relative to origin.
     *
     * @return float Time in ms
     */
    protected function getNow() {
        return $this->formatTime(microtime(TRUE) * 1000 - $this->origin);
    }
    
    /**
     * Formats a time.
     *
     * @param integer|float $time A raw time
     *
     * @return float The formatted time
     *
     * @throws \InvalidArgumentException When the raw time is not valid
     */
    private function formatTime($time) {
        if (!is_numeric($time)) {
            throw new \InvalidArgumentException('The time must be a numerical value');
        }
        return round($time, 1);
    }

}

Members

Title Sort descending Modifiers Object type Summary
StopwatchEvent::$category private property
StopwatchEvent::$origin private property
StopwatchEvent::$periods private property
StopwatchEvent::$started private property
StopwatchEvent::ensureStopped public function Stops all non already stopped periods.
StopwatchEvent::formatTime private function Formats a time.
StopwatchEvent::getCategory public function Gets the category.
StopwatchEvent::getDuration public function Gets the duration of the events (including all periods).
StopwatchEvent::getEndTime public function Gets the relative time of the end of the last period.
StopwatchEvent::getMemory public function Gets the max memory usage of all periods.
StopwatchEvent::getNow protected function Return the current time relative to origin.
StopwatchEvent::getOrigin public function Gets the origin.
StopwatchEvent::getPeriods public function Gets all event periods.
StopwatchEvent::getStartTime public function Gets the relative time of the start of the first period.
StopwatchEvent::isStarted public function Checks if the event was started
StopwatchEvent::lap public function Stops the current period and then starts a new one.
StopwatchEvent::start public function Starts a new event period.
StopwatchEvent::stop public function Stops the last started event period.
StopwatchEvent::__construct public function Constructor.