blob: 43e4a449e4768a6d6051160711c8e99fd26cd3cf [file] [log] [blame]
Matthias Andreas Benkard12a57352021-12-28 18:02:04 +01001<?php
2
3/*
4 * This file is part of Twig.
5 *
6 * (c) Fabien Potencier
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Twig\Extension;
13
14use Twig\Profiler\NodeVisitor\ProfilerNodeVisitor;
15use Twig\Profiler\Profile;
16
17class ProfilerExtension extends AbstractExtension
18{
19 private $actives = [];
20
21 public function __construct(Profile $profile)
22 {
23 $this->actives[] = $profile;
24 }
25
26 /**
27 * @return void
28 */
29 public function enter(Profile $profile)
30 {
31 $this->actives[0]->addProfile($profile);
32 array_unshift($this->actives, $profile);
33 }
34
35 /**
36 * @return void
37 */
38 public function leave(Profile $profile)
39 {
40 $profile->leave();
41 array_shift($this->actives);
42
43 if (1 === \count($this->actives)) {
44 $this->actives[0]->leave();
45 }
46 }
47
48 public function getNodeVisitors(): array
49 {
50 return [new ProfilerNodeVisitor(static::class)];
51 }
52}