You are here

class StopwatchEvent in Devel 4.x

Same name and namespace in other branches
  1. 8.3 webprofiler/src/Stopwatch.php \Drupal\webprofiler\StopwatchEvent
  2. 8 webprofiler/src/Stopwatch.php \Drupal\webprofiler\StopwatchEvent
  3. 8.2 webprofiler/src/Stopwatch.php \Drupal\webprofiler\StopwatchEvent

Class StopwatchEvent.

Hierarchy

Expanded class hierarchy of StopwatchEvent

File

webprofiler/src/Stopwatch.php, line 334

Namespace

Drupal\webprofiler
View source
class StopwatchEvent {

  /**
   * @var \Symfony\Component\Stopwatch\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 \Symfony\Component\Stopwatch\StopwatchEvent
   *   The event.
   */
  public function start() {
    $this->started[] = $this
      ->getNow();
    return $this;
  }

  /**
   * Stops the last started event period.
   *
   * @return \Symfony\Component\Stopwatch\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 this event was started.
   *
   * @return bool
   *   True if this event was started.
   */
  public function isStarted() {
    return !empty($this->started);
  }

  /**
   * Stops the current period and then starts a new one.
   *
   * @return \Symfony\Component\Stopwatch\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 \Symfony\Component\Stopwatch\StopwatchPeriod[]
   *   An array of StopwatchPeriod instances.
   */
  public function getPeriods() {
    return $this->periods;
  }

  /**
   * Gets the relative time of the start of the first period.
   *
   * @return int
   *   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 int
   *   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 int
   *   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 int
   *   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 int|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

Namesort descending Modifiers Type Description Overrides
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 this 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.