From e525699dd4d1135558c168e7b5fe70d6aea150f4 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 13 Nov 2023 11:35:39 +0000 Subject: [PATCH] TimeTrackingSleeperHandler: record time spent in each Snooze handler --- src/TimeTrackingSleeperHandler.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/TimeTrackingSleeperHandler.php b/src/TimeTrackingSleeperHandler.php index 970d85ce0..827ad370e 100644 --- a/src/TimeTrackingSleeperHandler.php +++ b/src/TimeTrackingSleeperHandler.php @@ -24,7 +24,9 @@ declare(strict_types=1); namespace pocketmine; use pocketmine\snooze\SleeperHandler; +use pocketmine\snooze\SleeperHandlerEntry; use pocketmine\timings\TimingsHandler; +use pocketmine\utils\Utils; use function hrtime; /** @@ -35,12 +37,29 @@ final class TimeTrackingSleeperHandler extends SleeperHandler{ private int $notificationProcessingTimeNs = 0; + /** + * @var TimingsHandler[] + * @phpstan-var array + */ + private static array $handlerTimings = []; + public function __construct( private TimingsHandler $timings ){ parent::__construct(); } + public function addNotifier(\Closure $handler) : SleeperHandlerEntry{ + $name = Utils::getNiceClosureName($handler); + $timings = self::$handlerTimings[$name] ??= new TimingsHandler("Snooze Handler: " . $name, $this->timings); + + return parent::addNotifier(function() use ($timings, $handler) : void{ + $timings->startTiming(); + $handler(); + $timings->stopTiming(); + }); + } + /** * Returns the time in nanoseconds spent processing notifications since the last reset. */