Make timings for player network more detailed

This commit is contained in:
Dylan K. Taylor 2018-07-31 16:34:15 +01:00
parent 2bf6764112
commit 488c03c200
3 changed files with 28 additions and 5 deletions

View File

@ -1877,7 +1877,7 @@ class Server{
if(empty($packets)){ if(empty($packets)){
throw new \InvalidArgumentException("Cannot send empty batch"); throw new \InvalidArgumentException("Cannot send empty batch");
} }
Timings::$playerNetworkTimer->startTiming(); Timings::$playerNetworkSendCompressTimer->startTiming();
/** @var NetworkSession[] $targets */ /** @var NetworkSession[] $targets */
$targets = []; $targets = [];
@ -1908,7 +1908,7 @@ class Server{
} }
} }
Timings::$playerNetworkTimer->stopTiming(); Timings::$playerNetworkSendCompressTimer->stopTiming();
} }
/** /**

View File

@ -146,21 +146,27 @@ class NetworkSession{
} }
if($this->cipher !== null){ if($this->cipher !== null){
Timings::$playerNetworkReceiveDecryptTimer->startTiming();
try{ try{
$payload = $this->cipher->decrypt($payload); $payload = $this->cipher->decrypt($payload);
}catch(\InvalidArgumentException $e){ }catch(\InvalidArgumentException $e){
$this->server->getLogger()->debug("Encrypted packet from " . $this->ip . " " . $this->port . ": " . bin2hex($payload)); $this->server->getLogger()->debug("Encrypted packet from " . $this->ip . " " . $this->port . ": " . bin2hex($payload));
$this->disconnect("Packet decryption error: " . $e->getMessage()); $this->disconnect("Packet decryption error: " . $e->getMessage());
return; return;
}finally{
Timings::$playerNetworkReceiveDecryptTimer->stopTiming();
} }
} }
Timings::$playerNetworkReceiveDecompressTimer->startTiming();
try{ try{
$stream = new PacketStream(NetworkCompression::decompress($payload)); $stream = new PacketStream(NetworkCompression::decompress($payload));
}catch(\ErrorException $e){ }catch(\ErrorException $e){
$this->server->getLogger()->debug("Failed to decompress packet from " . $this->ip . " " . $this->port . ": " . bin2hex($payload)); $this->server->getLogger()->debug("Failed to decompress packet from " . $this->ip . " " . $this->port . ": " . bin2hex($payload));
$this->disconnect("Compressed packet batch decode error (incompatible game version?)", false); $this->disconnect("Compressed packet batch decode error (incompatible game version?)", false);
return; return;
}finally{
Timings::$playerNetworkReceiveDecompressTimer->stopTiming();
} }
while(!$stream->feof() and $this->connected){ while(!$stream->feof() and $this->connected){
@ -206,7 +212,9 @@ class NetworkSession{
public function sendEncoded(string $payload, bool $immediate = false) : void{ public function sendEncoded(string $payload, bool $immediate = false) : void{
if($this->cipher !== null){ if($this->cipher !== null){
Timings::$playerNetworkSendEncryptTimer->startTiming();
$payload = $this->cipher->encrypt($payload); $payload = $this->cipher->encrypt($payload);
Timings::$playerNetworkSendEncryptTimer->stopTiming();
} }
$this->interface->putPacket($this, $payload, $immediate); $this->interface->putPacket($this, $payload, $immediate);
} }

View File

@ -42,10 +42,18 @@ abstract class Timings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $titleTickTimer; public static $titleTickTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerNetworkTimer; public static $playerNetworkSendTimer;
/** @var TimingsHandler */
public static $playerNetworkSendCompressTimer;
/** @var TimingsHandler */
public static $playerNetworkSendEncryptTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerNetworkReceiveTimer; public static $playerNetworkReceiveTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerNetworkReceiveDecompressTimer;
/** @var TimingsHandler */
public static $playerNetworkReceiveDecryptTimer;
/** @var TimingsHandler */
public static $playerChunkOrderTimer; public static $playerChunkOrderTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerChunkSendTimer; public static $playerChunkSendTimer;
@ -112,8 +120,15 @@ abstract class Timings{
self::$memoryManagerTimer = new TimingsHandler("Memory Manager"); self::$memoryManagerTimer = new TimingsHandler("Memory Manager");
self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer); self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer);
self::$titleTickTimer = new TimingsHandler("Console Title Tick"); self::$titleTickTimer = new TimingsHandler("Console Title Tick");
self::$playerNetworkTimer = new TimingsHandler("Player Network Send");
self::$playerNetworkSendTimer = new TimingsHandler("Player Network Send");
self::$playerNetworkSendCompressTimer = new TimingsHandler("** Player Network Send - Compression", self::$playerNetworkSendTimer);
self::$playerNetworkSendEncryptTimer = new TimingsHandler("** Player Network Send - Encryption", self::$playerNetworkSendTimer);
self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive"); self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive");
self::$playerNetworkReceiveDecompressTimer = new TimingsHandler("** Player Network Receive - Decompression", self::$playerNetworkReceiveTimer);
self::$playerNetworkReceiveDecryptTimer = new TimingsHandler("** Player Network Receive - Decryption", self::$playerNetworkReceiveTimer);
self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks"); self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks");
self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks"); self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks");
self::$connectionTimer = new TimingsHandler("Connection Handler"); self::$connectionTimer = new TimingsHandler("Connection Handler");
@ -218,7 +233,7 @@ abstract class Timings{
public static function getSendDataPacketTimings(DataPacket $pk) : TimingsHandler{ public static function getSendDataPacketTimings(DataPacket $pk) : TimingsHandler{
if(!isset(self::$packetSendTimingMap[$pk::NETWORK_ID])){ if(!isset(self::$packetSendTimingMap[$pk::NETWORK_ID])){
$pkName = (new \ReflectionClass($pk))->getShortName(); $pkName = (new \ReflectionClass($pk))->getShortName();
self::$packetSendTimingMap[$pk::NETWORK_ID] = new TimingsHandler("** sendPacket - " . $pkName . " [0x" . dechex($pk::NETWORK_ID) . "]", self::$playerNetworkTimer); self::$packetSendTimingMap[$pk::NETWORK_ID] = new TimingsHandler("** sendPacket - " . $pkName . " [0x" . dechex($pk::NETWORK_ID) . "]", self::$playerNetworkSendTimer);
} }
return self::$packetSendTimingMap[$pk::NETWORK_ID]; return self::$packetSendTimingMap[$pk::NETWORK_ID];