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)){
throw new \InvalidArgumentException("Cannot send empty batch");
}
Timings::$playerNetworkTimer->startTiming();
Timings::$playerNetworkSendCompressTimer->startTiming();
/** @var NetworkSession[] $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){
Timings::$playerNetworkReceiveDecryptTimer->startTiming();
try{
$payload = $this->cipher->decrypt($payload);
}catch(\InvalidArgumentException $e){
$this->server->getLogger()->debug("Encrypted packet from " . $this->ip . " " . $this->port . ": " . bin2hex($payload));
$this->disconnect("Packet decryption error: " . $e->getMessage());
return;
}finally{
Timings::$playerNetworkReceiveDecryptTimer->stopTiming();
}
}
Timings::$playerNetworkReceiveDecompressTimer->startTiming();
try{
$stream = new PacketStream(NetworkCompression::decompress($payload));
}catch(\ErrorException $e){
$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);
return;
}finally{
Timings::$playerNetworkReceiveDecompressTimer->stopTiming();
}
while(!$stream->feof() and $this->connected){
@ -206,7 +212,9 @@ class NetworkSession{
public function sendEncoded(string $payload, bool $immediate = false) : void{
if($this->cipher !== null){
Timings::$playerNetworkSendEncryptTimer->startTiming();
$payload = $this->cipher->encrypt($payload);
Timings::$playerNetworkSendEncryptTimer->stopTiming();
}
$this->interface->putPacket($this, $payload, $immediate);
}

View File

@ -42,10 +42,18 @@ abstract class Timings{
/** @var TimingsHandler */
public static $titleTickTimer;
/** @var TimingsHandler */
public static $playerNetworkTimer;
public static $playerNetworkSendTimer;
/** @var TimingsHandler */
public static $playerNetworkSendCompressTimer;
/** @var TimingsHandler */
public static $playerNetworkSendEncryptTimer;
/** @var TimingsHandler */
public static $playerNetworkReceiveTimer;
/** @var TimingsHandler */
public static $playerNetworkReceiveDecompressTimer;
/** @var TimingsHandler */
public static $playerNetworkReceiveDecryptTimer;
/** @var TimingsHandler */
public static $playerChunkOrderTimer;
/** @var TimingsHandler */
public static $playerChunkSendTimer;
@ -112,8 +120,15 @@ abstract class Timings{
self::$memoryManagerTimer = new TimingsHandler("Memory Manager");
self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer);
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::$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::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks");
self::$connectionTimer = new TimingsHandler("Connection Handler");
@ -218,7 +233,7 @@ abstract class Timings{
public static function getSendDataPacketTimings(DataPacket $pk) : TimingsHandler{
if(!isset(self::$packetSendTimingMap[$pk::NETWORK_ID])){
$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];