137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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\HttpKernel\DataCollector;
 | |
| 
 | |
| use Symfony\Component\HttpFoundation\Request;
 | |
| use Symfony\Component\HttpFoundation\Response;
 | |
| use Symfony\Component\HttpKernel\KernelInterface;
 | |
| 
 | |
| /**
 | |
|  * TimeDataCollector.
 | |
|  *
 | |
|  * @author Fabien Potencier <fabien@symfony.com>
 | |
|  */
 | |
| class TimeDataCollector extends DataCollector implements LateDataCollectorInterface
 | |
| {
 | |
|     protected $kernel;
 | |
|     protected $stopwatch;
 | |
| 
 | |
|     public function __construct(KernelInterface $kernel = null, $stopwatch = null)
 | |
|     {
 | |
|         $this->kernel = $kernel;
 | |
|         $this->stopwatch = $stopwatch;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * {@inheritdoc}
 | |
|      */
 | |
|     public function collect(Request $request, Response $response, \Exception $exception = null)
 | |
|     {
 | |
|         if (null !== $this->kernel) {
 | |
|             $startTime = $this->kernel->getStartTime();
 | |
|         } else {
 | |
|             $startTime = $request->server->get('REQUEST_TIME_FLOAT', $request->server->get('REQUEST_TIME'));
 | |
|         }
 | |
| 
 | |
|         $this->data = array(
 | |
|             'token' => $response->headers->get('X-Debug-Token'),
 | |
|             'start_time' => $startTime * 1000,
 | |
|             'events' => array(),
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * {@inheritdoc}
 | |
|      */
 | |
|     public function lateCollect()
 | |
|     {
 | |
|         if (null !== $this->stopwatch && isset($this->data['token'])) {
 | |
|             $this->setEvents($this->stopwatch->getSectionEvents($this->data['token']));
 | |
|         }
 | |
|         unset($this->data['token']);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Sets the request events.
 | |
|      *
 | |
|      * @param array $events The request events
 | |
|      */
 | |
|     public function setEvents(array $events)
 | |
|     {
 | |
|         foreach ($events as $event) {
 | |
|             $event->ensureStopped();
 | |
|         }
 | |
| 
 | |
|         $this->data['events'] = $events;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets the request events.
 | |
|      *
 | |
|      * @return array The request events
 | |
|      */
 | |
|     public function getEvents()
 | |
|     {
 | |
|         return $this->data['events'];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets the request elapsed time.
 | |
|      *
 | |
|      * @return float The elapsed time
 | |
|      */
 | |
|     public function getDuration()
 | |
|     {
 | |
|         if (!isset($this->data['events']['__section__'])) {
 | |
|             return 0;
 | |
|         }
 | |
| 
 | |
|         $lastEvent = $this->data['events']['__section__'];
 | |
| 
 | |
|         return $lastEvent->getOrigin() + $lastEvent->getDuration() - $this->getStartTime();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets the initialization time.
 | |
|      *
 | |
|      * This is the time spent until the beginning of the request handling.
 | |
|      *
 | |
|      * @return float The elapsed time
 | |
|      */
 | |
|     public function getInitTime()
 | |
|     {
 | |
|         if (!isset($this->data['events']['__section__'])) {
 | |
|             return 0;
 | |
|         }
 | |
| 
 | |
|         return $this->data['events']['__section__']->getOrigin() - $this->getStartTime();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Gets the request time.
 | |
|      *
 | |
|      * @return int The time
 | |
|      */
 | |
|     public function getStartTime()
 | |
|     {
 | |
|         return $this->data['start_time'];
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * {@inheritdoc}
 | |
|      */
 | |
|     public function getName()
 | |
|     {
 | |
|         return 'time';
 | |
|     }
 | |
| }
 | 
