| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | 
							- <?php
 
- /*
 
-  * This file is part of the Symfony package.
 
-  *
 
-  * (c) Fabien Potencier <fabien@symfony.com>
 
-  *
 
-  * For the full copyright and license information, please view the LICENSE
 
-  * file that was distributed with this source code.
 
-  */
 
- namespace Symfony\Component\Stopwatch;
 
- /**
 
-  * Stopwatch section.
 
-  *
 
-  * @author Fabien Potencier <fabien@symfony.com>
 
-  */
 
- class Section
 
- {
 
-     /**
 
-      * @var StopwatchEvent[]
 
-      */
 
-     private $events = [];
 
-     /**
 
-      * @var float|null
 
-      */
 
-     private $origin;
 
-     /**
 
-      * @var bool
 
-      */
 
-     private $morePrecision;
 
-     /**
 
-      * @var string
 
-      */
 
-     private $id;
 
-     /**
 
-      * @var Section[]
 
-      */
 
-     private $children = [];
 
-     /**
 
-      * @param float|null $origin        Set the origin of the events in this section, use null to set their origin to their start time
 
-      * @param bool       $morePrecision If true, time is stored as float to keep the original microsecond precision
 
-      */
 
-     public function __construct(float $origin = null, bool $morePrecision = false)
 
-     {
 
-         $this->origin = $origin;
 
-         $this->morePrecision = $morePrecision;
 
-     }
 
-     /**
 
-      * Returns the child section.
 
-      *
 
-      * @return self|null
 
-      */
 
-     public function get(string $id)
 
-     {
 
-         foreach ($this->children as $child) {
 
-             if ($id === $child->getId()) {
 
-                 return $child;
 
-             }
 
-         }
 
-         return null;
 
-     }
 
-     /**
 
-      * Creates or re-opens a child section.
 
-      *
 
-      * @param string|null $id Null to create a new section, the identifier to re-open an existing one
 
-      *
 
-      * @return self
 
-      */
 
-     public function open(?string $id)
 
-     {
 
-         if (null === $id || null === $session = $this->get($id)) {
 
-             $session = $this->children[] = new self(microtime(true) * 1000, $this->morePrecision);
 
-         }
 
-         return $session;
 
-     }
 
-     /**
 
-      * @return string
 
-      */
 
-     public function getId()
 
-     {
 
-         return $this->id;
 
-     }
 
-     /**
 
-      * Sets the session identifier.
 
-      *
 
-      * @return $this
 
-      */
 
-     public function setId(string $id)
 
-     {
 
-         $this->id = $id;
 
-         return $this;
 
-     }
 
-     /**
 
-      * Starts an event.
 
-      *
 
-      * @return StopwatchEvent
 
-      */
 
-     public function startEvent(string $name, ?string $category)
 
-     {
 
-         if (!isset($this->events[$name])) {
 
-             $this->events[$name] = new StopwatchEvent($this->origin ?: microtime(true) * 1000, $category, $this->morePrecision, $name);
 
-         }
 
-         return $this->events[$name]->start();
 
-     }
 
-     /**
 
-      * Checks if the event was started.
 
-      *
 
-      * @return bool
 
-      */
 
-     public function isEventStarted(string $name)
 
-     {
 
-         return isset($this->events[$name]) && $this->events[$name]->isStarted();
 
-     }
 
-     /**
 
-      * Stops an event.
 
-      *
 
-      * @return StopwatchEvent
 
-      *
 
-      * @throws \LogicException When the event has not been started
 
-      */
 
-     public function stopEvent(string $name)
 
-     {
 
-         if (!isset($this->events[$name])) {
 
-             throw new \LogicException(sprintf('Event "%s" is not started.', $name));
 
-         }
 
-         return $this->events[$name]->stop();
 
-     }
 
-     /**
 
-      * Stops then restarts an event.
 
-      *
 
-      * @return StopwatchEvent
 
-      *
 
-      * @throws \LogicException When the event has not been started
 
-      */
 
-     public function lap(string $name)
 
-     {
 
-         return $this->stopEvent($name)->start();
 
-     }
 
-     /**
 
-      * Returns a specific event by name.
 
-      *
 
-      * @return StopwatchEvent
 
-      *
 
-      * @throws \LogicException When the event is not known
 
-      */
 
-     public function getEvent(string $name)
 
-     {
 
-         if (!isset($this->events[$name])) {
 
-             throw new \LogicException(sprintf('Event "%s" is not known.', $name));
 
-         }
 
-         return $this->events[$name];
 
-     }
 
-     /**
 
-      * Returns the events from this section.
 
-      *
 
-      * @return StopwatchEvent[]
 
-      */
 
-     public function getEvents()
 
-     {
 
-         return $this->events;
 
-     }
 
- }
 
 
  |