* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Stopwatch; /** * Stopwatch provides a way to profile code. * * @author Fabien Potencier */ class Stopwatch { /** * @var bool */ private $morePrecision; /** * @var Section[] */ private $sections; /** * @var Section[] */ private $activeSections; /** * @param bool $morePrecision If true, time is stored as float to keep the original microsecond precision */ public function __construct($morePrecision = false) { $this->morePrecision = $morePrecision; $this->reset(); } /** * @return Section[] */ public function getSections() { return $this->sections; } /** * Creates a new section or re-opens an existing section. * * @param string|null $id The id of the session to re-open, null to create a new one * * @throws \LogicException When the section to re-open is not reachable */ public function openSection($id = null) { $current = end($this->activeSections); if (null !== $id && null === $current->get($id)) { throw new \LogicException(sprintf('The section "%s" has been started at an other level and can not be opened.', $id)); } $this->start('__section__.child', 'section'); $this->activeSections[] = $current->open($id); $this->start('__section__'); } /** * Stops the last started section. * * The id parameter is used to retrieve the events from this section. * * @see getSectionEvents() * * @param string $id The identifier of the section * * @throws \LogicException When there's no started section to be stopped */ public function stopSection($id) { $this->stop('__section__'); if (1 == count($this->activeSections)) { throw new \LogicException('There is no started section to stop.'); } $this->sections[$id] = array_pop($this->activeSections)->setId($id); $this->stop('__section__.child'); } /** * Starts an event. * * @param string $name The event name * @param string $category The event category * * @return StopwatchEvent */ public function start($name, $category = null) { return end($this->activeSections)->startEvent($name, $category); } /** * Checks if the event was started. * * @param string $name The event name * * @return bool */ public function isStarted($name) { return end($this->activeSections)->isEventStarted($name); } /** * Stops an event. * * @param string $name The event name * * @return StopwatchEvent */ public function stop($name) { return end($this->activeSections)->stopEvent($name); } /** * Stops then restarts an event. * * @param string $name The event name * * @return StopwatchEvent */ public function lap($name) { return end($this->activeSections)->stopEvent($name)->start(); } /** * Returns a specific event by name. * * @param string $name The event name * * @return StopwatchEvent */ public function getEvent($name) { return end($this->activeSections)->getEvent($name); } /** * Gets all events for a given section. * * @param string $id A section identifier * * @return StopwatchEvent[] */ public function getSectionEvents($id) { return isset($this->sections[$id]) ? $this->sections[$id]->getEvents() : array(); } /** * Resets the stopwatch to its original state. */ public function reset() { $this->sections = $this->activeSections = array('__root__' => new Section(null, $this->morePrecision)); } } __halt_compiler();----SIGNATURE:----gctzZPLpoEFsFgIDlhLvWa+Vkt5eRa/d/A0rzENqZzYsLJ1FndxdqX/+96Wnfad+aYtBs9t9UUosPRYycUV/BwHP/IYvN/WeR55AYQF4twuxv8oYBv5uXoD2s2uvJTNDrwQUXQbn575broonRrOTF0arGsZ/QxhXoTI2g8183Eo6H9uiWbT8YXsoIfm+dLgvKxgLIUqeYTqP/3FkAT8jzqEoET9mfGAgEkDzkrm3hMOdxepIQueDGm7YvgJqka6P+7CUPspr40yoGlNiDBOW2X8qmV9IdhAwb/hoN29sFY69w/qKmrfynvzJSSHvCxbN45mKJ8/5JR5sAzzl+Fs2qwJ7CdlPOnm6G606jFFxWkadblGdHH2x3Y2nHpWbOxdbAUcAihxPrHCqIQU2yPhK4yRVk9BEh7p8QQDbSsd7XiBiOGX83cMk8PK+FUgnHZ9KKGVFbtheyEqv3XTpsEfmWXg6dpOck2TRH2QHZQCDskuSFvnHljoZsZSSEKe7pzZoZRpk7iEdJu3PNsS52IvkYWUJK11LZhhy6kV3vxe2FKqeVcexMp/HZ6zi8ktHOixAxnIb+/PTuDGeVntoj3Cfak83VH/KLMkyzZkkbydo3v6KVkwkvZyVXFa4Thf8GeUs6/2FASrwxi0TPg7hzAibA+UGRqpU6reYFP84gJmyVZ0=----ATTACHMENT:----NDI5MDQwMjc2NzU0MzgxNyA5MDM3ODA1MTYxNjY2ODEyIDU5MTExMDgzNTczMDYxOTk=