From c6e800cf4247fa2fb1cf141ce035cc32c4889d7c Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 5 Jun 2017 22:05:46 +0100 Subject: [PATCH] Use compression level 0 when batch size is below threshold This isn't free, because of the adler32 checksum... but it's much lighter on performance for small packets. --- src/pocketmine/Server.php | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 7a83f099e..5e4b1bd27 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1783,17 +1783,7 @@ class Server{ public function broadcastPacket(array $players, DataPacket $packet){ $packet->encode(); $packet->isEncoded = true; - if(Network::$BATCH_THRESHOLD >= 0 and strlen($packet->buffer) >= Network::$BATCH_THRESHOLD){ - $this->batchPackets($players, [$packet], false); - return; - } - - foreach($players as $player){ - $player->dataPacket($packet); - } - if(isset($packet->__encapsulatedPacket)){ - unset($packet->__encapsulatedPacket); - } + $this->batchPackets($players, [$packet], false); } /** @@ -1821,11 +1811,17 @@ class Server{ $pk->addPacket($p); } + if(Network::$BATCH_THRESHOLD >= 0 and strlen($pk->payload) >= Network::$BATCH_THRESHOLD){ + $compressionLevel = $this->networkCompressionLevel; + }else{ + $compressionLevel = 0; //Do not compress packets under the threshold + } + if(!$forceSync and !$immediate and $this->networkCompressionAsync){ - $task = new CompressBatchedTask($pk, $targets, $this->networkCompressionLevel); + $task = new CompressBatchedTask($pk, $targets, $compressionLevel); $this->getScheduler()->scheduleAsyncTask($task); }else{ - $pk->compress($this->networkCompressionLevel); + $pk->compress($compressionLevel); $this->broadcastPacketsCallback($pk, $targets, $immediate); } }