From 57373b8c5e98e1ca427c2d647fcecd339de08dac Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Tue, 9 Sep 2014 18:07:27 +0200 Subject: [PATCH] TPS measurement improvement, moved interface handling to tick --- src/pocketmine/Server.php | 31 ++++++++++++------------------- src/pocketmine/level/Level.php | 2 +- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 3a5473c14..6e8e4ba9b 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -127,8 +127,7 @@ class Server{ */ private $tickCounter; private $nextTick = 0; - private $tickAverage = [20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20]; - private $tickTime = 0; + private $tickAverage = [20,20,20,20,20,20,20,20,20,20]; private $inTick = false; /** @var \AttachableThreadedLogger */ @@ -1928,19 +1927,7 @@ class Server{ private function tickProcessor(){ $lastLoop = 0; - $connectionTimer = Timings::$connectionTimer; while($this->isRunning){ - //TODO: move this to tick - $connectionTimer->startTiming(); - foreach($this->interfaces as $interface){ - if($interface->process()){ - $lastLoop = 0; - } - } - $connectionTimer->stopTiming(); - - $this->generationManager->handlePackets(); - ++$lastLoop; if(($ticks = $this->tick()) !== true){ @@ -2045,6 +2032,14 @@ class Server{ ++$this->tickCounter; $this->checkConsole(); + + //TODO: move this to tick + Timings::$connectionTimer->startTiming(); + foreach($this->interfaces as $interface){ + $interface->process(); + } + Timings::$connectionTimer->stopTiming(); + Timings::$schedulerTimer->startTiming(); $this->scheduler->mainThreadHeartbeat($this->tickCounter); Timings::$schedulerTimer->stopTiming(); @@ -2057,17 +2052,15 @@ class Server{ } } + $this->generationManager->handlePackets(); + Timings::$serverTickTimer->stopTiming(); TimingsHandler::tick(); $now = microtime(true); - $updateTime = max(0.01, $tickTime - $this->tickTime); - array_shift($this->tickAverage); - $this->tickAverage[] = 1 / $updateTime; - - $this->tickTime = $tickTime; + $this->tickAverage[] = min(20, 1 / ($now - $tickTime)); if(($this->nextTick - $tickTime) < -1){ $this->nextTick = $tickTime; diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 8ec56acdf..1bcc8dd93 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -934,7 +934,7 @@ class Level implements ChunkManager, Metadatable{ new Double("", $source->getY()), new Double("", $source->getZ()) ]), - //TODO: add random motion with physics + "Motion" => new Enum("Motion", [ new Double("", $motion->x), new Double("", $motion->y),