From 73e09392b6ad60d49e28bbefd9ec660cd3546297 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Mon, 19 Mar 2018 19:05:51 +0000 Subject: [PATCH] Timings: Clean up some terrible code, move namespaces --- src/pocketmine/MemoryManager.php | 2 +- src/pocketmine/Player.php | 2 +- src/pocketmine/Server.php | 6 +- src/pocketmine/command/Command.php | 2 +- .../command/defaults/TimingsCommand.php | 39 ++++---- src/pocketmine/entity/Entity.php | 4 +- src/pocketmine/entity/Living.php | 2 +- .../entity/projectile/Projectile.php | 2 +- src/pocketmine/inventory/CraftingManager.php | 2 +- src/pocketmine/level/Level.php | 3 +- .../{event => level}/LevelTimings.php | 37 +------- .../mcpe/PlayerNetworkSessionAdapter.php | 2 +- src/pocketmine/permission/PermissibleBase.php | 2 +- src/pocketmine/plugin/PluginManager.php | 26 +----- src/pocketmine/plugin/RegisteredListener.php | 2 +- src/pocketmine/scheduler/AsyncPool.php | 2 +- src/pocketmine/scheduler/TaskHandler.php | 4 +- src/pocketmine/tile/Tile.php | 4 +- src/pocketmine/{event => timings}/Timings.php | 32 +------ .../{event => timings}/TimingsHandler.php | 93 ++++++++++++------- 20 files changed, 101 insertions(+), 167 deletions(-) rename src/pocketmine/{event => level}/LevelTimings.php (66%) rename src/pocketmine/{event => timings}/Timings.php (85%) rename src/pocketmine/{event => timings}/TimingsHandler.php (79%) diff --git a/src/pocketmine/MemoryManager.php b/src/pocketmine/MemoryManager.php index bf32ea277..cbf214ce8 100644 --- a/src/pocketmine/MemoryManager.php +++ b/src/pocketmine/MemoryManager.php @@ -24,9 +24,9 @@ declare(strict_types=1); namespace pocketmine; use pocketmine\event\server\LowMemoryEvent; -use pocketmine\event\Timings; use pocketmine\scheduler\DumpWorkerMemoryTask; use pocketmine\scheduler\GarbageCollectionTask; +use pocketmine\timings\Timings; use pocketmine\utils\MainLogger; use pocketmine\utils\Utils; diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 694fedad5..0b39ee2ed 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -68,7 +68,6 @@ use pocketmine\event\player\PlayerToggleSneakEvent; use pocketmine\event\player\PlayerToggleSprintEvent; use pocketmine\event\player\PlayerTransferEvent; use pocketmine\event\server\DataPacketSendEvent; -use pocketmine\event\Timings; use pocketmine\inventory\BigCraftingGrid; use pocketmine\inventory\CraftingGrid; use pocketmine\inventory\Inventory; @@ -153,6 +152,7 @@ use pocketmine\resourcepacks\ResourcePack; use pocketmine\tile\ItemFrame; use pocketmine\tile\Spawnable; use pocketmine\tile\Tile; +use pocketmine\timings\Timings; use pocketmine\utils\TextFormat; use pocketmine\utils\UUID; diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 4fbb978c4..76191e64d 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -41,8 +41,6 @@ use pocketmine\event\level\LevelLoadEvent; use pocketmine\event\player\PlayerDataSaveEvent; use pocketmine\event\server\QueryRegenerateEvent; use pocketmine\event\server\ServerCommandEvent; -use pocketmine\event\Timings; -use pocketmine\event\TimingsHandler; use pocketmine\inventory\CraftingManager; use pocketmine\item\enchantment\Enchantment; use pocketmine\item\Item; @@ -93,6 +91,8 @@ use pocketmine\scheduler\FileWriteTask; use pocketmine\scheduler\SendUsageTask; use pocketmine\scheduler\ServerScheduler; use pocketmine\tile\Tile; +use pocketmine\timings\Timings; +use pocketmine\timings\TimingsHandler; use pocketmine\updater\AutoUpdater; use pocketmine\utils\Binary; use pocketmine\utils\Config; @@ -1593,6 +1593,7 @@ class Server{ Timings::init(); + TimingsHandler::setEnabled((bool) $this->getProperty("settings.enable-profiling", false)); $this->consoleSender = new ConsoleCommandSender(); $this->commandMap = new SimpleCommandMap($this); @@ -1611,7 +1612,6 @@ class Server{ $this->pluginManager = new PluginManager($this, $this->commandMap); $this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender); - $this->pluginManager->setUseTimings($this->getProperty("settings.enable-profiling", false)); $this->profilingTickRate = (float) $this->getProperty("settings.profile-report-trigger", 20); $this->pluginManager->registerInterface(PharPluginLoader::class); $this->pluginManager->registerInterface(ScriptPluginLoader::class); diff --git a/src/pocketmine/command/Command.php b/src/pocketmine/command/Command.php index 7d01ca74d..168315401 100644 --- a/src/pocketmine/command/Command.php +++ b/src/pocketmine/command/Command.php @@ -26,10 +26,10 @@ declare(strict_types=1); */ namespace pocketmine\command; -use pocketmine\event\TimingsHandler; use pocketmine\lang\TextContainer; use pocketmine\lang\TranslationContainer; use pocketmine\Server; +use pocketmine\timings\TimingsHandler; use pocketmine\utils\TextFormat; abstract class Command{ diff --git a/src/pocketmine/command/defaults/TimingsCommand.php b/src/pocketmine/command/defaults/TimingsCommand.php index 77a99a2bb..52bca0688 100644 --- a/src/pocketmine/command/defaults/TimingsCommand.php +++ b/src/pocketmine/command/defaults/TimingsCommand.php @@ -25,16 +25,14 @@ namespace pocketmine\command\defaults; use pocketmine\command\CommandSender; use pocketmine\command\utils\InvalidCommandSyntaxException; -use pocketmine\event\TimingsHandler; use pocketmine\lang\TranslationContainer; use pocketmine\Player; use pocketmine\scheduler\BulkCurlTask; use pocketmine\Server; +use pocketmine\timings\TimingsHandler; class TimingsCommand extends VanillaCommand{ - public static $timingStart = 0; - public function __construct(string $name){ parent::__construct( $name, @@ -56,18 +54,17 @@ class TimingsCommand extends VanillaCommand{ $mode = strtolower($args[0]); if($mode === "on"){ - $sender->getServer()->getPluginManager()->setUseTimings(true); - TimingsHandler::reload(); + TimingsHandler::setEnabled(); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.enable")); return true; }elseif($mode === "off"){ - $sender->getServer()->getPluginManager()->setUseTimings(false); + TimingsHandler::setEnabled(false); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.disable")); return true; } - if(!$sender->getServer()->getPluginManager()->useTimings()){ + if(!TimingsHandler::isEnabled()){ $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsDisabled")); return true; @@ -79,25 +76,25 @@ class TimingsCommand extends VanillaCommand{ TimingsHandler::reload(); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.reset")); }elseif($mode === "merged" or $mode === "report" or $paste){ + $timings = ""; + if($paste){ + $fileTimings = fopen("php://temp", "r+b"); + }else{ + $index = 0; + $timingFolder = $sender->getServer()->getDataPath() . "timings/"; - $sampleTime = microtime(true) - self::$timingStart; - $index = 0; - $timingFolder = $sender->getServer()->getDataPath() . "timings/"; + if(!file_exists($timingFolder)){ + mkdir($timingFolder, 0777); + } + $timings = $timingFolder . "timings.txt"; + while(file_exists($timings)){ + $timings = $timingFolder . "timings" . (++$index) . ".txt"; + } - if(!file_exists($timingFolder)){ - mkdir($timingFolder, 0777); + $fileTimings = fopen($timings, "a+b"); } - $timings = $timingFolder . "timings.txt"; - while(file_exists($timings)){ - $timings = $timingFolder . "timings" . (++$index) . ".txt"; - } - - $fileTimings = $paste ? fopen("php://temp", "r+b") : fopen($timings, "a+b"); - TimingsHandler::printTimings($fileTimings); - fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL); - if($paste){ fseek($fileTimings, 0); $data = [ diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index f4c63fa43..464ae2769 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -48,8 +48,6 @@ use pocketmine\event\entity\EntityMotionEvent; use pocketmine\event\entity\EntityRegainHealthEvent; use pocketmine\event\entity\EntitySpawnEvent; use pocketmine\event\entity\EntityTeleportEvent; -use pocketmine\event\Timings; -use pocketmine\event\TimingsHandler; use pocketmine\level\format\Chunk; use pocketmine\level\Level; use pocketmine\level\Location; @@ -74,6 +72,8 @@ use pocketmine\network\mcpe\protocol\SetEntityMotionPacket; use pocketmine\Player; use pocketmine\plugin\Plugin; use pocketmine\Server; +use pocketmine\timings\Timings; +use pocketmine\timings\TimingsHandler; abstract class Entity extends Location implements Metadatable, EntityIds{ diff --git a/src/pocketmine/entity/Living.php b/src/pocketmine/entity/Living.php index 8d3219133..2aaff2db2 100644 --- a/src/pocketmine/entity/Living.php +++ b/src/pocketmine/entity/Living.php @@ -30,7 +30,6 @@ use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityDeathEvent; use pocketmine\event\entity\EntityEffectAddEvent; use pocketmine\event\entity\EntityEffectRemoveEvent; -use pocketmine\event\Timings; use pocketmine\inventory\ArmorInventory; use pocketmine\item\Armor; use pocketmine\item\Consumable; @@ -47,6 +46,7 @@ use pocketmine\network\mcpe\protocol\EntityEventPacket; use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\network\mcpe\protocol\MobEffectPacket; use pocketmine\Player; +use pocketmine\timings\Timings; use pocketmine\utils\Binary; use pocketmine\utils\Color; diff --git a/src/pocketmine/entity/projectile/Projectile.php b/src/pocketmine/entity/projectile/Projectile.php index bdb942315..f70ecf939 100644 --- a/src/pocketmine/entity/projectile/Projectile.php +++ b/src/pocketmine/entity/projectile/Projectile.php @@ -33,7 +33,6 @@ use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\ProjectileHitBlockEvent; use pocketmine\event\entity\ProjectileHitEntityEvent; use pocketmine\event\entity\ProjectileHitEvent; -use pocketmine\event\Timings; use pocketmine\level\Level; use pocketmine\math\RayTraceResult; use pocketmine\math\Vector3; @@ -41,6 +40,7 @@ use pocketmine\math\VoxelRayTrace; use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\IntTag; +use pocketmine\timings\Timings; abstract class Projectile extends Entity{ diff --git a/src/pocketmine/inventory/CraftingManager.php b/src/pocketmine/inventory/CraftingManager.php index db486bdc2..16814bf8b 100644 --- a/src/pocketmine/inventory/CraftingManager.php +++ b/src/pocketmine/inventory/CraftingManager.php @@ -23,12 +23,12 @@ declare(strict_types=1); namespace pocketmine\inventory; -use pocketmine\event\Timings; use pocketmine\item\Item; use pocketmine\item\ItemFactory; use pocketmine\network\mcpe\protocol\BatchPacket; use pocketmine\network\mcpe\protocol\CraftingDataPacket; use pocketmine\Server; +use pocketmine\timings\Timings; use pocketmine\utils\Config; use pocketmine\utils\MainLogger; use pocketmine\utils\UUID; diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 0e8b17a48..7646bf87c 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -40,9 +40,7 @@ use pocketmine\event\level\ChunkUnloadEvent; use pocketmine\event\level\LevelSaveEvent; use pocketmine\event\level\LevelUnloadEvent; use pocketmine\event\level\SpawnChangeEvent; -use pocketmine\event\LevelTimings; use pocketmine\event\player\PlayerInteractEvent; -use pocketmine\event\Timings; use pocketmine\item\Item; use pocketmine\item\ItemFactory; use pocketmine\level\format\Chunk; @@ -83,6 +81,7 @@ use pocketmine\Server; use pocketmine\tile\Chest; use pocketmine\tile\Container; use pocketmine\tile\Tile; +use pocketmine\timings\Timings; use pocketmine\utils\Random; use pocketmine\utils\ReversePriorityQueue; diff --git a/src/pocketmine/event/LevelTimings.php b/src/pocketmine/level/LevelTimings.php similarity index 66% rename from src/pocketmine/event/LevelTimings.php rename to src/pocketmine/level/LevelTimings.php index 8f67736f7..eafe9a8ab 100644 --- a/src/pocketmine/event/LevelTimings.php +++ b/src/pocketmine/level/LevelTimings.php @@ -21,9 +21,9 @@ declare(strict_types=1); -namespace pocketmine\event; +namespace pocketmine\level; -use pocketmine\level\Level; +use pocketmine\timings\TimingsHandler; class LevelTimings{ @@ -34,36 +34,20 @@ class LevelTimings{ /** @var TimingsHandler */ public $doBlockSkyLightUpdates; - /** @var TimingsHandler */ - public $mobSpawn; /** @var TimingsHandler */ public $doChunkUnload; /** @var TimingsHandler */ - public $doPortalForcer; - /** @var TimingsHandler */ public $doTickPending; /** @var TimingsHandler */ public $doTickTiles; /** @var TimingsHandler */ - public $doVillages; - /** @var TimingsHandler */ - public $doChunkMap; - /** @var TimingsHandler */ public $doChunkGC; /** @var TimingsHandler */ - public $doSounds; - /** @var TimingsHandler */ public $entityTick; /** @var TimingsHandler */ public $tileEntityTick; /** @var TimingsHandler */ - public $tileEntityPending; - /** @var TimingsHandler */ - public $tracker; - /** @var TimingsHandler */ public $doTick; - /** @var TimingsHandler */ - public $tickEntities; /** @var TimingsHandler */ public $syncChunkSendTimer; @@ -75,15 +59,9 @@ class LevelTimings{ /** @var TimingsHandler */ public $syncChunkLoadDataTimer; /** @var TimingsHandler */ - public $syncChunkLoadStructuresTimer; - /** @var TimingsHandler */ public $syncChunkLoadEntitiesTimer; /** @var TimingsHandler */ public $syncChunkLoadTileEntitiesTimer; - /** @var TimingsHandler */ - public $syncChunkLoadTileTicksTimer; - /** @var TimingsHandler */ - public $syncChunkLoadPostTimer; public function __construct(Level $level){ $name = $level->getFolderName() . " - "; @@ -92,33 +70,22 @@ class LevelTimings{ $this->doBlockLightUpdates = new TimingsHandler("** " . $name . "doBlockLightUpdates"); $this->doBlockSkyLightUpdates = new TimingsHandler("** " . $name . "doBlockSkyLightUpdates"); - $this->mobSpawn = new TimingsHandler("** " . $name . "mobSpawn"); $this->doChunkUnload = new TimingsHandler("** " . $name . "doChunkUnload"); $this->doTickPending = new TimingsHandler("** " . $name . "doTickPending"); $this->doTickTiles = new TimingsHandler("** " . $name . "doTickTiles"); - $this->doVillages = new TimingsHandler("** " . $name . "doVillages"); - $this->doChunkMap = new TimingsHandler("** " . $name . "doChunkMap"); - $this->doSounds = new TimingsHandler("** " . $name . "doSounds"); $this->doChunkGC = new TimingsHandler("** " . $name . "doChunkGC"); - $this->doPortalForcer = new TimingsHandler("** " . $name . "doPortalForcer"); $this->entityTick = new TimingsHandler("** " . $name . "entityTick"); $this->tileEntityTick = new TimingsHandler("** " . $name . "tileEntityTick"); - $this->tileEntityPending = new TimingsHandler("** " . $name . "tileEntityPending"); $this->syncChunkSendTimer = new TimingsHandler("** " . $name . "syncChunkSend"); $this->syncChunkSendPrepareTimer = new TimingsHandler("** " . $name . "syncChunkSendPrepare"); $this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad"); $this->syncChunkLoadDataTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Data"); - $this->syncChunkLoadStructuresTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Structures"); $this->syncChunkLoadEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Entities"); $this->syncChunkLoadTileEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileEntities"); - $this->syncChunkLoadTileTicksTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileTicks"); - $this->syncChunkLoadPostTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Post"); - $this->tracker = new TimingsHandler($name . "tracker"); $this->doTick = new TimingsHandler($name . "doTick"); - $this->tickEntities = new TimingsHandler($name . "tickEntities"); } } diff --git a/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php b/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php index 8d14f67b0..9fa12c4c6 100644 --- a/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php +++ b/src/pocketmine/network/mcpe/PlayerNetworkSessionAdapter.php @@ -25,7 +25,6 @@ namespace pocketmine\network\mcpe; use pocketmine\event\server\DataPacketReceiveEvent; -use pocketmine\event\Timings; use pocketmine\network\mcpe\protocol\AdventureSettingsPacket; use pocketmine\network\mcpe\protocol\AnimatePacket; use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; @@ -65,6 +64,7 @@ use pocketmine\network\mcpe\protocol\SpawnExperienceOrbPacket; use pocketmine\network\mcpe\protocol\TextPacket; use pocketmine\Player; use pocketmine\Server; +use pocketmine\timings\Timings; class PlayerNetworkSessionAdapter extends NetworkSession{ diff --git a/src/pocketmine/permission/PermissibleBase.php b/src/pocketmine/permission/PermissibleBase.php index 85670d014..5015a6710 100644 --- a/src/pocketmine/permission/PermissibleBase.php +++ b/src/pocketmine/permission/PermissibleBase.php @@ -23,10 +23,10 @@ declare(strict_types=1); namespace pocketmine\permission; -use pocketmine\event\Timings; use pocketmine\plugin\Plugin; use pocketmine\plugin\PluginException; use pocketmine\Server; +use pocketmine\timings\Timings; class PermissibleBase implements Permissible{ /** @var ServerOperator */ diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index d5f1a1ad9..4c7d258d5 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -23,19 +23,18 @@ declare(strict_types=1); namespace pocketmine\plugin; -use pocketmine\command\defaults\TimingsCommand; use pocketmine\command\PluginCommand; use pocketmine\command\SimpleCommandMap; use pocketmine\event\Event; use pocketmine\event\EventPriority; use pocketmine\event\HandlerList; use pocketmine\event\Listener; -use pocketmine\event\Timings; -use pocketmine\event\TimingsHandler; use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\permission\Permissible; use pocketmine\permission\Permission; use pocketmine\Server; +use pocketmine\timings\Timings; +use pocketmine\timings\TimingsHandler; /** * Manages all the plugins, Permissions and Permissibles @@ -91,8 +90,6 @@ class PluginManager{ /** @var TimingsHandler */ public static $pluginParentTimer; - public static $useTimings = false; - /** * @param Server $server * @param SimpleCommandMap $commandMap @@ -334,12 +331,8 @@ class PluginManager{ } } - TimingsCommand::$timingStart = microtime(true); - return $loadedPlugins; }else{ - TimingsCommand::$timingStart = microtime(true); - return []; } } @@ -798,19 +791,4 @@ class PluginManager{ return $event::$handlerList; } - - /** - * @return bool - */ - public function useTimings() : bool{ - return self::$useTimings; - } - - /** - * @param bool $use - */ - public function setUseTimings(bool $use){ - self::$useTimings = $use; - } - } diff --git a/src/pocketmine/plugin/RegisteredListener.php b/src/pocketmine/plugin/RegisteredListener.php index f69fe2c6b..7db4cadea 100644 --- a/src/pocketmine/plugin/RegisteredListener.php +++ b/src/pocketmine/plugin/RegisteredListener.php @@ -26,7 +26,7 @@ namespace pocketmine\plugin; use pocketmine\event\Cancellable; use pocketmine\event\Event; use pocketmine\event\Listener; -use pocketmine\event\TimingsHandler; +use pocketmine\timings\TimingsHandler; class RegisteredListener{ diff --git a/src/pocketmine/scheduler/AsyncPool.php b/src/pocketmine/scheduler/AsyncPool.php index 15e115297..5bf93a97f 100644 --- a/src/pocketmine/scheduler/AsyncPool.php +++ b/src/pocketmine/scheduler/AsyncPool.php @@ -23,8 +23,8 @@ declare(strict_types=1); namespace pocketmine\scheduler; -use pocketmine\event\Timings; use pocketmine\Server; +use pocketmine\timings\Timings; class AsyncPool{ diff --git a/src/pocketmine/scheduler/TaskHandler.php b/src/pocketmine/scheduler/TaskHandler.php index b1f887ff5..0e980b96f 100644 --- a/src/pocketmine/scheduler/TaskHandler.php +++ b/src/pocketmine/scheduler/TaskHandler.php @@ -23,8 +23,8 @@ declare(strict_types=1); namespace pocketmine\scheduler; -use pocketmine\event\Timings; -use pocketmine\event\TimingsHandler; +use pocketmine\timings\Timings; +use pocketmine\timings\TimingsHandler; use pocketmine\utils\MainLogger; class TaskHandler{ diff --git a/src/pocketmine/tile/Tile.php b/src/pocketmine/tile/Tile.php index aa0f5f843..d08b0fde2 100644 --- a/src/pocketmine/tile/Tile.php +++ b/src/pocketmine/tile/Tile.php @@ -28,8 +28,6 @@ declare(strict_types=1); namespace pocketmine\tile; use pocketmine\block\Block; -use pocketmine\event\Timings; -use pocketmine\event\TimingsHandler; use pocketmine\item\Item; use pocketmine\level\Level; use pocketmine\level\Position; @@ -39,6 +37,8 @@ use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\StringTag; use pocketmine\Player; use pocketmine\Server; +use pocketmine\timings\Timings; +use pocketmine\timings\TimingsHandler; abstract class Tile extends Position{ diff --git a/src/pocketmine/event/Timings.php b/src/pocketmine/timings/Timings.php similarity index 85% rename from src/pocketmine/event/Timings.php rename to src/pocketmine/timings/Timings.php index a2ad5e5e2..87053ef77 100644 --- a/src/pocketmine/event/Timings.php +++ b/src/pocketmine/timings/Timings.php @@ -21,7 +21,7 @@ declare(strict_types=1); -namespace pocketmine\event; +namespace pocketmine\timings; use pocketmine\entity\Entity; use pocketmine\network\mcpe\protocol\DataPacket; @@ -44,8 +44,6 @@ abstract class Timings{ /** @var TimingsHandler */ public static $titleTickTimer; /** @var TimingsHandler */ - public static $playerListTimer; - /** @var TimingsHandler */ public static $playerNetworkTimer; /** @var TimingsHandler */ public static $playerNetworkReceiveTimer; @@ -56,20 +54,12 @@ abstract class Timings{ /** @var TimingsHandler */ public static $connectionTimer; /** @var TimingsHandler */ - public static $tickablesTimer; - /** @var TimingsHandler */ public static $schedulerTimer; /** @var TimingsHandler */ - public static $chunkIOTickTimer; - /** @var TimingsHandler */ - public static $timeUpdateTimer; - /** @var TimingsHandler */ public static $serverCommandTimer; /** @var TimingsHandler */ public static $worldSaveTimer; /** @var TimingsHandler */ - public static $generationTimer; - /** @var TimingsHandler */ public static $populationTimer; /** @var TimingsHandler */ public static $generationCallbackTimer; @@ -83,22 +73,12 @@ abstract class Timings{ /** @var TimingsHandler */ public static $tickEntityTimer; /** @var TimingsHandler */ - public static $activatedEntityTimer; - /** @var TimingsHandler */ public static $tickTileEntityTimer; /** @var TimingsHandler */ public static $timerEntityBaseTick; /** @var TimingsHandler */ public static $timerLivingEntityBaseTick; - /** @var TimingsHandler */ - public static $timerEntityAI; - /** @var TimingsHandler */ - public static $timerEntityAICollision; - /** @var TimingsHandler */ - public static $timerEntityAIMove; - /** @var TimingsHandler */ - public static $timerEntityTickRest; /** @var TimingsHandler */ public static $schedulerSyncTimer; @@ -132,19 +112,14 @@ 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::$playerListTimer = new TimingsHandler("Player List"); self::$playerNetworkTimer = new TimingsHandler("Player Network Send"); self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive"); self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks"); self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks"); self::$connectionTimer = new TimingsHandler("Connection Handler"); - self::$tickablesTimer = new TimingsHandler("Tickables"); self::$schedulerTimer = new TimingsHandler("Scheduler"); - self::$chunkIOTickTimer = new TimingsHandler("ChunkIOTick"); - self::$timeUpdateTimer = new TimingsHandler("Time Update"); self::$serverCommandTimer = new TimingsHandler("Server Command"); self::$worldSaveTimer = new TimingsHandler("World Save"); - self::$generationTimer = new TimingsHandler("World Generation"); self::$populationTimer = new TimingsHandler("World Population"); self::$generationCallbackTimer = new TimingsHandler("World Generation Callback"); self::$permissibleCalculationTimer = new TimingsHandler("Permissible Calculation"); @@ -152,15 +127,10 @@ abstract class Timings{ self::$entityMoveTimer = new TimingsHandler("** entityMove"); self::$tickEntityTimer = new TimingsHandler("** tickEntity"); - self::$activatedEntityTimer = new TimingsHandler("** activatedTickEntity"); self::$tickTileEntityTimer = new TimingsHandler("** tickTileEntity"); self::$timerEntityBaseTick = new TimingsHandler("** entityBaseTick"); self::$timerLivingEntityBaseTick = new TimingsHandler("** livingEntityBaseTick"); - self::$timerEntityAI = new TimingsHandler("** livingEntityAI"); - self::$timerEntityAICollision = new TimingsHandler("** livingEntityAICollision"); - self::$timerEntityAIMove = new TimingsHandler("** livingEntityAIMove"); - self::$timerEntityTickRest = new TimingsHandler("** livingEntityTickRest"); self::$schedulerSyncTimer = new TimingsHandler("** Scheduler - Sync Tasks", PluginManager::$pluginParentTimer); self::$schedulerAsyncTimer = new TimingsHandler("** Scheduler - Async Tasks"); diff --git a/src/pocketmine/event/TimingsHandler.php b/src/pocketmine/timings/TimingsHandler.php similarity index 79% rename from src/pocketmine/event/TimingsHandler.php rename to src/pocketmine/timings/TimingsHandler.php index cbda952a2..eebbd05e5 100644 --- a/src/pocketmine/event/TimingsHandler.php +++ b/src/pocketmine/timings/TimingsHandler.php @@ -21,42 +21,19 @@ declare(strict_types=1); -namespace pocketmine\event; +namespace pocketmine\timings; -use pocketmine\command\defaults\TimingsCommand; use pocketmine\entity\Living; -use pocketmine\plugin\PluginManager; use pocketmine\Server; class TimingsHandler{ /** @var TimingsHandler[] */ private static $HANDLERS = []; - - private $name; - /** @var TimingsHandler */ - private $parent = null; - - private $count = 0; - private $curCount = 0; - private $start = 0; - private $timingDepth = 0; - private $totalTime = 0; - private $curTickTotal = 0; - private $violations = 0; - - /** - * @param string $name - * @param TimingsHandler $parent - */ - public function __construct(string $name, TimingsHandler $parent = null){ - $this->name = $name; - if($parent !== null){ - $this->parent = $parent; - } - - self::$HANDLERS[spl_object_hash($this)] = $this; - } + /** @var bool */ + private static $enabled = false; + /** @var float */ + private static $timingStart = 0; /** * @param resource $fp @@ -92,23 +69,39 @@ class TimingsHandler{ fwrite($fp, "# Entities " . $entities . PHP_EOL); fwrite($fp, "# LivingEntities " . $livingEntities . PHP_EOL); + + $sampleTime = microtime(true) - self::$timingStart; + fwrite($fp, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL); + } + + public static function isEnabled() : bool{ + return self::$enabled; + } + + public static function setEnabled(bool $enable = true) : void{ + self::$enabled = $enable; + self::reload(); + } + + public static function getStartTime() : float{ + return self::$timingStart; } public static function reload(){ - if(Server::getInstance()->getPluginManager()->useTimings()){ + if(self::$enabled){ foreach(self::$HANDLERS as $timings){ $timings->reset(); } - TimingsCommand::$timingStart = microtime(true); + self::$timingStart = microtime(true); } } public static function tick(bool $measure = true){ - if(PluginManager::$useTimings){ + if(self::$enabled){ if($measure){ foreach(self::$HANDLERS as $timings){ if($timings->curTickTotal > 0.05){ - $timings->violations += round($timings->curTickTotal / 0.05); + $timings->violations += (int) round($timings->curTickTotal / 0.05); } $timings->curTickTotal = 0; $timings->curCount = 0; @@ -127,8 +120,39 @@ class TimingsHandler{ } } + /** @var string */ + private $name; + /** @var TimingsHandler */ + private $parent = null; + + /** @var int */ + private $count = 0; + /** @var int */ + private $curCount = 0; + /** @var float */ + private $start = 0; + /** @var int */ + private $timingDepth = 0; + /** @var float */ + private $totalTime = 0; + /** @var float */ + private $curTickTotal = 0; + /** @var int */ + private $violations = 0; + + /** + * @param string $name + * @param TimingsHandler $parent + */ + public function __construct(string $name, TimingsHandler $parent = null){ + $this->name = $name; + $this->parent = $parent; + + self::$HANDLERS[spl_object_hash($this)] = $this; + } + public function startTiming(){ - if(PluginManager::$useTimings and ++$this->timingDepth === 1){ + if(self::$enabled and ++$this->timingDepth === 1){ $this->start = microtime(true); if($this->parent !== null and ++$this->parent->timingDepth === 1){ $this->parent->start = $this->start; @@ -137,7 +161,7 @@ class TimingsHandler{ } public function stopTiming(){ - if(PluginManager::$useTimings){ + if(self::$enabled){ if(--$this->timingDepth !== 0 or $this->start === 0){ return; } @@ -167,5 +191,4 @@ class TimingsHandler{ public function remove(){ unset(self::$HANDLERS[spl_object_hash($this)]); } - }