From 42f9336f7acdd1eecd6691ac4aeca6abfbbaa3c6 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 24 Jul 2022 21:16:52 +0100 Subject: [PATCH] Split packet receive timings into decode and handle subcomponents --- src/network/mcpe/NetworkSession.php | 11 +++++++++-- src/timings/Timings.php | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 9fde7ed23..ee965cfa1 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -374,9 +374,8 @@ class NetworkSession{ throw new PacketHandlingException("Unexpected non-serverbound packet"); } - $timings = Timings::getReceiveDataPacketTimings($packet); + $timings = Timings::getDecodeDataPacketTimings($packet); $timings->startTiming(); - try{ $stream = PacketSerializer::decoder($buffer, 0, $this->packetSerializerContext); try{ @@ -388,7 +387,15 @@ class NetworkSession{ $remains = substr($stream->getBuffer(), $stream->getOffset()); $this->logger->debug("Still " . strlen($remains) . " bytes unread in " . $packet->getName() . ": " . bin2hex($remains)); } + }finally{ + $timings->stopTiming(); + } + $timings = Timings::getHandleDataPacketTimings($packet); + $timings->startTiming(); + try{ + //TODO: I'm not sure DataPacketReceiveEvent should be included in the handler timings, but it needs to be + //included for now to ensure the receivePacket timings are counted the way they were before $ev = new DataPacketReceiveEvent($this, $packet); $ev->call(); if(!$ev->isCancelled() && ($this->handler === null || !$packet->handle($this->handler))){ diff --git a/src/timings/Timings.php b/src/timings/Timings.php index 6f0b38cc7..5d0ece80d 100644 --- a/src/timings/Timings.php +++ b/src/timings/Timings.php @@ -119,6 +119,12 @@ abstract class Timings{ public static $tileEntityTypeTimingMap = []; /** @var TimingsHandler[] */ public static $packetReceiveTimingMap = []; + + /** @var TimingsHandler[] */ + private static array $packetDecodeTimingMap = []; + /** @var TimingsHandler[] */ + private static array $packetHandleTimingMap = []; + /** @var TimingsHandler[] */ public static $packetSendTimingMap = []; /** @var TimingsHandler[] */ @@ -229,6 +235,22 @@ abstract class Timings{ return self::$packetReceiveTimingMap[$pid]; } + public static function getDecodeDataPacketTimings(ServerboundPacket $pk) : TimingsHandler{ + $pid = $pk->pid(); + return self::$packetDecodeTimingMap[$pid] ??= new TimingsHandler( + self::INCLUDED_BY_OTHER_TIMINGS_PREFIX . "Decode - " . $pk->getName() . " [0x" . dechex($pid) . "]", + self::getReceiveDataPacketTimings($pk) + ); + } + + public static function getHandleDataPacketTimings(ServerboundPacket $pk) : TimingsHandler{ + $pid = $pk->pid(); + return self::$packetHandleTimingMap[$pid] ??= new TimingsHandler( + self::INCLUDED_BY_OTHER_TIMINGS_PREFIX . "Handler - " . $pk->getName() . " [0x" . dechex($pid) . "]", + self::getReceiveDataPacketTimings($pk) + ); + } + public static function getSendDataPacketTimings(ClientboundPacket $pk) : TimingsHandler{ $pid = $pk->pid(); if(!isset(self::$packetSendTimingMap[$pid])){