vendor/shopware/core/Profiling/Profiler.php line 61
<?php declare(strict_types=1);namespace Shopware\Core\Profiling;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Profiling\Integration\ProfilerInterface;/*** @internal experimental atm*/#[Package('core')]class Profiler{/*** Profilers will be activated over the shopware.yaml file** All enabled profilers will be added here** @var ProfilerInterface[]*/private static array $profilers = [];/*** Tags will be added to each trace** @var array<string>*/private static array $tags = [];/*** @var array<string>*/private static array $openTraces = [];/*** @param array<string> $activeProfilers*/public function __construct(\Traversable $profilers,array $activeProfilers) {$profilers = iterator_to_array($profilers);self::$profilers = array_intersect_key($profilers, array_flip($activeProfilers));self::$tags = [];register_shutdown_function(fn () => self::cleanup());}/*** @return mixed*/public static function trace(string $name, \Closure $closure, string $category = 'shopware', array $tags = []){$tags = array_merge(self::$tags, $tags);try {foreach (self::$profilers as $profiler) {$profiler->start($name, $category, $tags);}$result = $closure();} finally {foreach (self::$profilers as $profiler) {$profiler->stop($name);}}return $result;}public static function start(string $title, string $category, array $tags): void{self::$openTraces[] = $title;$tags = array_merge(self::$tags, $tags);foreach (self::$profilers as $profiler) {$profiler->start($title, $category, $tags);}}public static function stop(string $title): void{foreach (self::$profilers as $profiler) {$profiler->stop($title);}unset(self::$openTraces[$title]);}public static function cleanup(): void{foreach (self::$openTraces as $name) {foreach (self::$profilers as $profiler) {$profiler->stop($name);}}self::$openTraces = [];}public static function addTag(string $key, string $value): void{self::$tags[$key] = $value;}public static function removeTag(string $key): void{unset(self::$tags[$key]);}}