diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 66701c559..36258439c 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1073,11 +1073,16 @@ class Level implements ChunkManager, Metadatable{ } public function saveChunks(){ - foreach($this->chunks as $chunk){ - if(($chunk->hasChanged() or count($chunk->getTiles()) > 0 or count($chunk->getSavableEntities()) > 0) and $chunk->isGenerated()){ - $this->provider->saveChunk($chunk); - $chunk->setChanged(false); + $this->timings->syncChunkSaveTimer->startTiming(); + try{ + foreach($this->chunks as $chunk){ + if(($chunk->hasChanged() or count($chunk->getTiles()) > 0 or count($chunk->getSavableEntities()) > 0) and $chunk->isGenerated()){ + $this->provider->saveChunk($chunk); + $chunk->setChanged(false); + } } + }finally{ + $this->timings->syncChunkSaveTimer->stopTiming(); } } @@ -2639,7 +2644,12 @@ class Level implements ChunkManager, Metadatable{ if($trySave and $this->getAutoSave() and $chunk->isGenerated()){ if($chunk->hasChanged() or count($chunk->getTiles()) > 0 or count($chunk->getSavableEntities()) > 0){ - $this->provider->saveChunk($chunk); + $this->timings->syncChunkSaveTimer->startTiming(); + try{ + $this->provider->saveChunk($chunk); + }finally{ + $this->timings->syncChunkSaveTimer->stopTiming(); + } } } diff --git a/src/pocketmine/level/LevelTimings.php b/src/pocketmine/level/LevelTimings.php index a8f758ca9..de925cd6c 100644 --- a/src/pocketmine/level/LevelTimings.php +++ b/src/pocketmine/level/LevelTimings.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace pocketmine\level; +use pocketmine\timings\Timings; use pocketmine\timings\TimingsHandler; class LevelTimings{ @@ -62,6 +63,8 @@ class LevelTimings{ public $syncChunkLoadEntitiesTimer; /** @var TimingsHandler */ public $syncChunkLoadTileEntitiesTimer; + /** @var TimingsHandler */ + public $syncChunkSaveTimer; public function __construct(Level $level){ $name = $level->getFolderName() . " - "; @@ -85,6 +88,9 @@ class LevelTimings{ $this->syncChunkLoadEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Entities"); $this->syncChunkLoadTileEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileEntities"); + Timings::init(); //make sure the timer we want is available + $this->syncChunkSaveTimer = new TimingsHandler("** " . $name . "syncChunkSave", Timings::$worldSaveTimer); + $this->doTick = new TimingsHandler($name . "doTick"); } }