* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ declare(strict_types=1); namespace Symfony\Component\Mercure\Debug; use Symfony\Component\Mercure\PublisherInterface; use Symfony\Component\Mercure\Update; use Symfony\Component\Stopwatch\Stopwatch; use Symfony\Contracts\Service\ResetInterface; trigger_deprecation('symfony/mercure', '0.5', 'Class "%s" is deprecated, use "%s" instead.', TraceablePublisher::class, TraceableHub::class); /** * Traces updates for profiler. * * @author Vincent Chalamon * * @experimental * * @deprecated */ final class TraceablePublisher implements PublisherInterface, ResetInterface { private $publisher; private $stopwatch; private $messages = []; public function __construct(PublisherInterface $publisher, Stopwatch $stopwatch) { $this->publisher = $publisher; $this->stopwatch = $stopwatch; } public function __invoke(Update $update): string { $this->stopwatch->start(__CLASS__); $content = ($this->publisher)($update); $e = $this->stopwatch->stop(__CLASS__); $this->messages[] = [ 'object' => $update, 'duration' => $e->getDuration(), 'memory' => $e->getMemory(), ]; return $content; } public function reset(): void { $this->messages = []; } public function count(): int { return \count($this->messages); } public function getMessages(): array { return $this->messages; } public function getDuration(): float { return array_sum(array_map(function ($a) { return $a['duration']; }, $this->messages)); } public function getMemory(): int { return (int) array_sum(array_map(function ($a) { return $a['memory']; }, $this->messages)); } }