Timings: Clean up some terrible code, move namespaces

This commit is contained in:
Dylan K. Taylor 2018-03-19 19:05:51 +00:00
parent 209e28dfe5
commit 73e09392b6
20 changed files with 101 additions and 167 deletions

View File

@ -24,9 +24,9 @@ declare(strict_types=1);
namespace pocketmine; namespace pocketmine;
use pocketmine\event\server\LowMemoryEvent; use pocketmine\event\server\LowMemoryEvent;
use pocketmine\event\Timings;
use pocketmine\scheduler\DumpWorkerMemoryTask; use pocketmine\scheduler\DumpWorkerMemoryTask;
use pocketmine\scheduler\GarbageCollectionTask; use pocketmine\scheduler\GarbageCollectionTask;
use pocketmine\timings\Timings;
use pocketmine\utils\MainLogger; use pocketmine\utils\MainLogger;
use pocketmine\utils\Utils; use pocketmine\utils\Utils;

View File

@ -68,7 +68,6 @@ use pocketmine\event\player\PlayerToggleSneakEvent;
use pocketmine\event\player\PlayerToggleSprintEvent; use pocketmine\event\player\PlayerToggleSprintEvent;
use pocketmine\event\player\PlayerTransferEvent; use pocketmine\event\player\PlayerTransferEvent;
use pocketmine\event\server\DataPacketSendEvent; use pocketmine\event\server\DataPacketSendEvent;
use pocketmine\event\Timings;
use pocketmine\inventory\BigCraftingGrid; use pocketmine\inventory\BigCraftingGrid;
use pocketmine\inventory\CraftingGrid; use pocketmine\inventory\CraftingGrid;
use pocketmine\inventory\Inventory; use pocketmine\inventory\Inventory;
@ -153,6 +152,7 @@ use pocketmine\resourcepacks\ResourcePack;
use pocketmine\tile\ItemFrame; use pocketmine\tile\ItemFrame;
use pocketmine\tile\Spawnable; use pocketmine\tile\Spawnable;
use pocketmine\tile\Tile; use pocketmine\tile\Tile;
use pocketmine\timings\Timings;
use pocketmine\utils\TextFormat; use pocketmine\utils\TextFormat;
use pocketmine\utils\UUID; use pocketmine\utils\UUID;

View File

@ -41,8 +41,6 @@ use pocketmine\event\level\LevelLoadEvent;
use pocketmine\event\player\PlayerDataSaveEvent; use pocketmine\event\player\PlayerDataSaveEvent;
use pocketmine\event\server\QueryRegenerateEvent; use pocketmine\event\server\QueryRegenerateEvent;
use pocketmine\event\server\ServerCommandEvent; use pocketmine\event\server\ServerCommandEvent;
use pocketmine\event\Timings;
use pocketmine\event\TimingsHandler;
use pocketmine\inventory\CraftingManager; use pocketmine\inventory\CraftingManager;
use pocketmine\item\enchantment\Enchantment; use pocketmine\item\enchantment\Enchantment;
use pocketmine\item\Item; use pocketmine\item\Item;
@ -93,6 +91,8 @@ use pocketmine\scheduler\FileWriteTask;
use pocketmine\scheduler\SendUsageTask; use pocketmine\scheduler\SendUsageTask;
use pocketmine\scheduler\ServerScheduler; use pocketmine\scheduler\ServerScheduler;
use pocketmine\tile\Tile; use pocketmine\tile\Tile;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
use pocketmine\updater\AutoUpdater; use pocketmine\updater\AutoUpdater;
use pocketmine\utils\Binary; use pocketmine\utils\Binary;
use pocketmine\utils\Config; use pocketmine\utils\Config;
@ -1593,6 +1593,7 @@ class Server{
Timings::init(); Timings::init();
TimingsHandler::setEnabled((bool) $this->getProperty("settings.enable-profiling", false));
$this->consoleSender = new ConsoleCommandSender(); $this->consoleSender = new ConsoleCommandSender();
$this->commandMap = new SimpleCommandMap($this); $this->commandMap = new SimpleCommandMap($this);
@ -1611,7 +1612,6 @@ class Server{
$this->pluginManager = new PluginManager($this, $this->commandMap); $this->pluginManager = new PluginManager($this, $this->commandMap);
$this->pluginManager->subscribeToPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE, $this->consoleSender); $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->profilingTickRate = (float) $this->getProperty("settings.profile-report-trigger", 20);
$this->pluginManager->registerInterface(PharPluginLoader::class); $this->pluginManager->registerInterface(PharPluginLoader::class);
$this->pluginManager->registerInterface(ScriptPluginLoader::class); $this->pluginManager->registerInterface(ScriptPluginLoader::class);

View File

@ -26,10 +26,10 @@ declare(strict_types=1);
*/ */
namespace pocketmine\command; namespace pocketmine\command;
use pocketmine\event\TimingsHandler;
use pocketmine\lang\TextContainer; use pocketmine\lang\TextContainer;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\TimingsHandler;
use pocketmine\utils\TextFormat; use pocketmine\utils\TextFormat;
abstract class Command{ abstract class Command{

View File

@ -25,16 +25,14 @@ namespace pocketmine\command\defaults;
use pocketmine\command\CommandSender; use pocketmine\command\CommandSender;
use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\command\utils\InvalidCommandSyntaxException;
use pocketmine\event\TimingsHandler;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\scheduler\BulkCurlTask; use pocketmine\scheduler\BulkCurlTask;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\TimingsHandler;
class TimingsCommand extends VanillaCommand{ class TimingsCommand extends VanillaCommand{
public static $timingStart = 0;
public function __construct(string $name){ public function __construct(string $name){
parent::__construct( parent::__construct(
$name, $name,
@ -56,18 +54,17 @@ class TimingsCommand extends VanillaCommand{
$mode = strtolower($args[0]); $mode = strtolower($args[0]);
if($mode === "on"){ if($mode === "on"){
$sender->getServer()->getPluginManager()->setUseTimings(true); TimingsHandler::setEnabled();
TimingsHandler::reload();
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.enable")); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.enable"));
return true; return true;
}elseif($mode === "off"){ }elseif($mode === "off"){
$sender->getServer()->getPluginManager()->setUseTimings(false); TimingsHandler::setEnabled(false);
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.disable")); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.disable"));
return true; return true;
} }
if(!$sender->getServer()->getPluginManager()->useTimings()){ if(!TimingsHandler::isEnabled()){
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsDisabled")); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.timingsDisabled"));
return true; return true;
@ -79,25 +76,25 @@ class TimingsCommand extends VanillaCommand{
TimingsHandler::reload(); TimingsHandler::reload();
$sender->sendMessage(new TranslationContainer("pocketmine.command.timings.reset")); $sender->sendMessage(new TranslationContainer("pocketmine.command.timings.reset"));
}elseif($mode === "merged" or $mode === "report" or $paste){ }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; if(!file_exists($timingFolder)){
$index = 0; mkdir($timingFolder, 0777);
$timingFolder = $sender->getServer()->getDataPath() . "timings/"; }
$timings = $timingFolder . "timings.txt";
while(file_exists($timings)){
$timings = $timingFolder . "timings" . (++$index) . ".txt";
}
if(!file_exists($timingFolder)){ $fileTimings = fopen($timings, "a+b");
mkdir($timingFolder, 0777);
} }
$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); TimingsHandler::printTimings($fileTimings);
fwrite($fileTimings, "Sample time " . round($sampleTime * 1000000000) . " (" . $sampleTime . "s)" . PHP_EOL);
if($paste){ if($paste){
fseek($fileTimings, 0); fseek($fileTimings, 0);
$data = [ $data = [

View File

@ -48,8 +48,6 @@ use pocketmine\event\entity\EntityMotionEvent;
use pocketmine\event\entity\EntityRegainHealthEvent; use pocketmine\event\entity\EntityRegainHealthEvent;
use pocketmine\event\entity\EntitySpawnEvent; use pocketmine\event\entity\EntitySpawnEvent;
use pocketmine\event\entity\EntityTeleportEvent; use pocketmine\event\entity\EntityTeleportEvent;
use pocketmine\event\Timings;
use pocketmine\event\TimingsHandler;
use pocketmine\level\format\Chunk; use pocketmine\level\format\Chunk;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\level\Location; use pocketmine\level\Location;
@ -74,6 +72,8 @@ use pocketmine\network\mcpe\protocol\SetEntityMotionPacket;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\plugin\Plugin; use pocketmine\plugin\Plugin;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
abstract class Entity extends Location implements Metadatable, EntityIds{ abstract class Entity extends Location implements Metadatable, EntityIds{

View File

@ -30,7 +30,6 @@ use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityDeathEvent; use pocketmine\event\entity\EntityDeathEvent;
use pocketmine\event\entity\EntityEffectAddEvent; use pocketmine\event\entity\EntityEffectAddEvent;
use pocketmine\event\entity\EntityEffectRemoveEvent; use pocketmine\event\entity\EntityEffectRemoveEvent;
use pocketmine\event\Timings;
use pocketmine\inventory\ArmorInventory; use pocketmine\inventory\ArmorInventory;
use pocketmine\item\Armor; use pocketmine\item\Armor;
use pocketmine\item\Consumable; 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\LevelSoundEventPacket;
use pocketmine\network\mcpe\protocol\MobEffectPacket; use pocketmine\network\mcpe\protocol\MobEffectPacket;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\timings\Timings;
use pocketmine\utils\Binary; use pocketmine\utils\Binary;
use pocketmine\utils\Color; use pocketmine\utils\Color;

View File

@ -33,7 +33,6 @@ use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\ProjectileHitBlockEvent; use pocketmine\event\entity\ProjectileHitBlockEvent;
use pocketmine\event\entity\ProjectileHitEntityEvent; use pocketmine\event\entity\ProjectileHitEntityEvent;
use pocketmine\event\entity\ProjectileHitEvent; use pocketmine\event\entity\ProjectileHitEvent;
use pocketmine\event\Timings;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\math\RayTraceResult; use pocketmine\math\RayTraceResult;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
@ -41,6 +40,7 @@ use pocketmine\math\VoxelRayTrace;
use pocketmine\nbt\tag\ByteTag; use pocketmine\nbt\tag\ByteTag;
use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\CompoundTag;
use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\IntTag;
use pocketmine\timings\Timings;
abstract class Projectile extends Entity{ abstract class Projectile extends Entity{

View File

@ -23,12 +23,12 @@ declare(strict_types=1);
namespace pocketmine\inventory; namespace pocketmine\inventory;
use pocketmine\event\Timings;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\network\mcpe\protocol\BatchPacket; use pocketmine\network\mcpe\protocol\BatchPacket;
use pocketmine\network\mcpe\protocol\CraftingDataPacket; use pocketmine\network\mcpe\protocol\CraftingDataPacket;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\utils\Config; use pocketmine\utils\Config;
use pocketmine\utils\MainLogger; use pocketmine\utils\MainLogger;
use pocketmine\utils\UUID; use pocketmine\utils\UUID;

View File

@ -40,9 +40,7 @@ use pocketmine\event\level\ChunkUnloadEvent;
use pocketmine\event\level\LevelSaveEvent; use pocketmine\event\level\LevelSaveEvent;
use pocketmine\event\level\LevelUnloadEvent; use pocketmine\event\level\LevelUnloadEvent;
use pocketmine\event\level\SpawnChangeEvent; use pocketmine\event\level\SpawnChangeEvent;
use pocketmine\event\LevelTimings;
use pocketmine\event\player\PlayerInteractEvent; use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\event\Timings;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemFactory; use pocketmine\item\ItemFactory;
use pocketmine\level\format\Chunk; use pocketmine\level\format\Chunk;
@ -83,6 +81,7 @@ use pocketmine\Server;
use pocketmine\tile\Chest; use pocketmine\tile\Chest;
use pocketmine\tile\Container; use pocketmine\tile\Container;
use pocketmine\tile\Tile; use pocketmine\tile\Tile;
use pocketmine\timings\Timings;
use pocketmine\utils\Random; use pocketmine\utils\Random;
use pocketmine\utils\ReversePriorityQueue; use pocketmine\utils\ReversePriorityQueue;

View File

@ -21,9 +21,9 @@
declare(strict_types=1); declare(strict_types=1);
namespace pocketmine\event; namespace pocketmine\level;
use pocketmine\level\Level; use pocketmine\timings\TimingsHandler;
class LevelTimings{ class LevelTimings{
@ -34,36 +34,20 @@ class LevelTimings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doBlockSkyLightUpdates; public $doBlockSkyLightUpdates;
/** @var TimingsHandler */
public $mobSpawn;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doChunkUnload; public $doChunkUnload;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doPortalForcer;
/** @var TimingsHandler */
public $doTickPending; public $doTickPending;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doTickTiles; public $doTickTiles;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doVillages;
/** @var TimingsHandler */
public $doChunkMap;
/** @var TimingsHandler */
public $doChunkGC; public $doChunkGC;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $doSounds;
/** @var TimingsHandler */
public $entityTick; public $entityTick;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $tileEntityTick; public $tileEntityTick;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $tileEntityPending;
/** @var TimingsHandler */
public $tracker;
/** @var TimingsHandler */
public $doTick; public $doTick;
/** @var TimingsHandler */
public $tickEntities;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $syncChunkSendTimer; public $syncChunkSendTimer;
@ -75,15 +59,9 @@ class LevelTimings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public $syncChunkLoadDataTimer; public $syncChunkLoadDataTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $syncChunkLoadStructuresTimer;
/** @var TimingsHandler */
public $syncChunkLoadEntitiesTimer; public $syncChunkLoadEntitiesTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public $syncChunkLoadTileEntitiesTimer; public $syncChunkLoadTileEntitiesTimer;
/** @var TimingsHandler */
public $syncChunkLoadTileTicksTimer;
/** @var TimingsHandler */
public $syncChunkLoadPostTimer;
public function __construct(Level $level){ public function __construct(Level $level){
$name = $level->getFolderName() . " - "; $name = $level->getFolderName() . " - ";
@ -92,33 +70,22 @@ class LevelTimings{
$this->doBlockLightUpdates = new TimingsHandler("** " . $name . "doBlockLightUpdates"); $this->doBlockLightUpdates = new TimingsHandler("** " . $name . "doBlockLightUpdates");
$this->doBlockSkyLightUpdates = new TimingsHandler("** " . $name . "doBlockSkyLightUpdates"); $this->doBlockSkyLightUpdates = new TimingsHandler("** " . $name . "doBlockSkyLightUpdates");
$this->mobSpawn = new TimingsHandler("** " . $name . "mobSpawn");
$this->doChunkUnload = new TimingsHandler("** " . $name . "doChunkUnload"); $this->doChunkUnload = new TimingsHandler("** " . $name . "doChunkUnload");
$this->doTickPending = new TimingsHandler("** " . $name . "doTickPending"); $this->doTickPending = new TimingsHandler("** " . $name . "doTickPending");
$this->doTickTiles = new TimingsHandler("** " . $name . "doTickTiles"); $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->doChunkGC = new TimingsHandler("** " . $name . "doChunkGC");
$this->doPortalForcer = new TimingsHandler("** " . $name . "doPortalForcer");
$this->entityTick = new TimingsHandler("** " . $name . "entityTick"); $this->entityTick = new TimingsHandler("** " . $name . "entityTick");
$this->tileEntityTick = new TimingsHandler("** " . $name . "tileEntityTick"); $this->tileEntityTick = new TimingsHandler("** " . $name . "tileEntityTick");
$this->tileEntityPending = new TimingsHandler("** " . $name . "tileEntityPending");
$this->syncChunkSendTimer = new TimingsHandler("** " . $name . "syncChunkSend"); $this->syncChunkSendTimer = new TimingsHandler("** " . $name . "syncChunkSend");
$this->syncChunkSendPrepareTimer = new TimingsHandler("** " . $name . "syncChunkSendPrepare"); $this->syncChunkSendPrepareTimer = new TimingsHandler("** " . $name . "syncChunkSendPrepare");
$this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad"); $this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad");
$this->syncChunkLoadDataTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Data"); $this->syncChunkLoadDataTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Data");
$this->syncChunkLoadStructuresTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Structures");
$this->syncChunkLoadEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Entities"); $this->syncChunkLoadEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Entities");
$this->syncChunkLoadTileEntitiesTimer = new TimingsHandler("** " . $name . "syncChunkLoad - TileEntities"); $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->doTick = new TimingsHandler($name . "doTick");
$this->tickEntities = new TimingsHandler($name . "tickEntities");
} }
} }

View File

@ -25,7 +25,6 @@ namespace pocketmine\network\mcpe;
use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\event\Timings;
use pocketmine\network\mcpe\protocol\AdventureSettingsPacket; use pocketmine\network\mcpe\protocol\AdventureSettingsPacket;
use pocketmine\network\mcpe\protocol\AnimatePacket; use pocketmine\network\mcpe\protocol\AnimatePacket;
use pocketmine\network\mcpe\protocol\BlockEntityDataPacket; use pocketmine\network\mcpe\protocol\BlockEntityDataPacket;
@ -65,6 +64,7 @@ use pocketmine\network\mcpe\protocol\SpawnExperienceOrbPacket;
use pocketmine\network\mcpe\protocol\TextPacket; use pocketmine\network\mcpe\protocol\TextPacket;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
class PlayerNetworkSessionAdapter extends NetworkSession{ class PlayerNetworkSessionAdapter extends NetworkSession{

View File

@ -23,10 +23,10 @@ declare(strict_types=1);
namespace pocketmine\permission; namespace pocketmine\permission;
use pocketmine\event\Timings;
use pocketmine\plugin\Plugin; use pocketmine\plugin\Plugin;
use pocketmine\plugin\PluginException; use pocketmine\plugin\PluginException;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
class PermissibleBase implements Permissible{ class PermissibleBase implements Permissible{
/** @var ServerOperator */ /** @var ServerOperator */

View File

@ -23,19 +23,18 @@ declare(strict_types=1);
namespace pocketmine\plugin; namespace pocketmine\plugin;
use pocketmine\command\defaults\TimingsCommand;
use pocketmine\command\PluginCommand; use pocketmine\command\PluginCommand;
use pocketmine\command\SimpleCommandMap; use pocketmine\command\SimpleCommandMap;
use pocketmine\event\Event; use pocketmine\event\Event;
use pocketmine\event\EventPriority; use pocketmine\event\EventPriority;
use pocketmine\event\HandlerList; use pocketmine\event\HandlerList;
use pocketmine\event\Listener; use pocketmine\event\Listener;
use pocketmine\event\Timings;
use pocketmine\event\TimingsHandler;
use pocketmine\network\mcpe\protocol\ProtocolInfo; use pocketmine\network\mcpe\protocol\ProtocolInfo;
use pocketmine\permission\Permissible; use pocketmine\permission\Permissible;
use pocketmine\permission\Permission; use pocketmine\permission\Permission;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
/** /**
* Manages all the plugins, Permissions and Permissibles * Manages all the plugins, Permissions and Permissibles
@ -91,8 +90,6 @@ class PluginManager{
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $pluginParentTimer; public static $pluginParentTimer;
public static $useTimings = false;
/** /**
* @param Server $server * @param Server $server
* @param SimpleCommandMap $commandMap * @param SimpleCommandMap $commandMap
@ -334,12 +331,8 @@ class PluginManager{
} }
} }
TimingsCommand::$timingStart = microtime(true);
return $loadedPlugins; return $loadedPlugins;
}else{ }else{
TimingsCommand::$timingStart = microtime(true);
return []; return [];
} }
} }
@ -798,19 +791,4 @@ class PluginManager{
return $event::$handlerList; return $event::$handlerList;
} }
/**
* @return bool
*/
public function useTimings() : bool{
return self::$useTimings;
}
/**
* @param bool $use
*/
public function setUseTimings(bool $use){
self::$useTimings = $use;
}
} }

View File

@ -26,7 +26,7 @@ namespace pocketmine\plugin;
use pocketmine\event\Cancellable; use pocketmine\event\Cancellable;
use pocketmine\event\Event; use pocketmine\event\Event;
use pocketmine\event\Listener; use pocketmine\event\Listener;
use pocketmine\event\TimingsHandler; use pocketmine\timings\TimingsHandler;
class RegisteredListener{ class RegisteredListener{

View File

@ -23,8 +23,8 @@ declare(strict_types=1);
namespace pocketmine\scheduler; namespace pocketmine\scheduler;
use pocketmine\event\Timings;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
class AsyncPool{ class AsyncPool{

View File

@ -23,8 +23,8 @@ declare(strict_types=1);
namespace pocketmine\scheduler; namespace pocketmine\scheduler;
use pocketmine\event\Timings; use pocketmine\timings\Timings;
use pocketmine\event\TimingsHandler; use pocketmine\timings\TimingsHandler;
use pocketmine\utils\MainLogger; use pocketmine\utils\MainLogger;
class TaskHandler{ class TaskHandler{

View File

@ -28,8 +28,6 @@ declare(strict_types=1);
namespace pocketmine\tile; namespace pocketmine\tile;
use pocketmine\block\Block; use pocketmine\block\Block;
use pocketmine\event\Timings;
use pocketmine\event\TimingsHandler;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\level\Level; use pocketmine\level\Level;
use pocketmine\level\Position; use pocketmine\level\Position;
@ -39,6 +37,8 @@ use pocketmine\nbt\tag\IntTag;
use pocketmine\nbt\tag\StringTag; use pocketmine\nbt\tag\StringTag;
use pocketmine\Player; use pocketmine\Player;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
abstract class Tile extends Position{ abstract class Tile extends Position{

View File

@ -21,7 +21,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace pocketmine\event; namespace pocketmine\timings;
use pocketmine\entity\Entity; use pocketmine\entity\Entity;
use pocketmine\network\mcpe\protocol\DataPacket; use pocketmine\network\mcpe\protocol\DataPacket;
@ -44,8 +44,6 @@ abstract class Timings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $titleTickTimer; public static $titleTickTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerListTimer;
/** @var TimingsHandler */
public static $playerNetworkTimer; public static $playerNetworkTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $playerNetworkReceiveTimer; public static $playerNetworkReceiveTimer;
@ -56,20 +54,12 @@ abstract class Timings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $connectionTimer; public static $connectionTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $tickablesTimer;
/** @var TimingsHandler */
public static $schedulerTimer; public static $schedulerTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $chunkIOTickTimer;
/** @var TimingsHandler */
public static $timeUpdateTimer;
/** @var TimingsHandler */
public static $serverCommandTimer; public static $serverCommandTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $worldSaveTimer; public static $worldSaveTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $generationTimer;
/** @var TimingsHandler */
public static $populationTimer; public static $populationTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $generationCallbackTimer; public static $generationCallbackTimer;
@ -83,22 +73,12 @@ abstract class Timings{
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $tickEntityTimer; public static $tickEntityTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $activatedEntityTimer;
/** @var TimingsHandler */
public static $tickTileEntityTimer; public static $tickTileEntityTimer;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $timerEntityBaseTick; public static $timerEntityBaseTick;
/** @var TimingsHandler */ /** @var TimingsHandler */
public static $timerLivingEntityBaseTick; 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 */ /** @var TimingsHandler */
public static $schedulerSyncTimer; public static $schedulerSyncTimer;
@ -132,19 +112,14 @@ abstract class Timings{
self::$memoryManagerTimer = new TimingsHandler("Memory Manager"); self::$memoryManagerTimer = new TimingsHandler("Memory Manager");
self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer); self::$garbageCollectorTimer = new TimingsHandler("Garbage Collector", self::$memoryManagerTimer);
self::$titleTickTimer = new TimingsHandler("Console Title Tick"); self::$titleTickTimer = new TimingsHandler("Console Title Tick");
self::$playerListTimer = new TimingsHandler("Player List");
self::$playerNetworkTimer = new TimingsHandler("Player Network Send"); self::$playerNetworkTimer = new TimingsHandler("Player Network Send");
self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive"); self::$playerNetworkReceiveTimer = new TimingsHandler("Player Network Receive");
self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks"); self::$playerChunkOrderTimer = new TimingsHandler("Player Order Chunks");
self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks"); self::$playerChunkSendTimer = new TimingsHandler("Player Send Chunks");
self::$connectionTimer = new TimingsHandler("Connection Handler"); self::$connectionTimer = new TimingsHandler("Connection Handler");
self::$tickablesTimer = new TimingsHandler("Tickables");
self::$schedulerTimer = new TimingsHandler("Scheduler"); self::$schedulerTimer = new TimingsHandler("Scheduler");
self::$chunkIOTickTimer = new TimingsHandler("ChunkIOTick");
self::$timeUpdateTimer = new TimingsHandler("Time Update");
self::$serverCommandTimer = new TimingsHandler("Server Command"); self::$serverCommandTimer = new TimingsHandler("Server Command");
self::$worldSaveTimer = new TimingsHandler("World Save"); self::$worldSaveTimer = new TimingsHandler("World Save");
self::$generationTimer = new TimingsHandler("World Generation");
self::$populationTimer = new TimingsHandler("World Population"); self::$populationTimer = new TimingsHandler("World Population");
self::$generationCallbackTimer = new TimingsHandler("World Generation Callback"); self::$generationCallbackTimer = new TimingsHandler("World Generation Callback");
self::$permissibleCalculationTimer = new TimingsHandler("Permissible Calculation"); self::$permissibleCalculationTimer = new TimingsHandler("Permissible Calculation");
@ -152,15 +127,10 @@ abstract class Timings{
self::$entityMoveTimer = new TimingsHandler("** entityMove"); self::$entityMoveTimer = new TimingsHandler("** entityMove");
self::$tickEntityTimer = new TimingsHandler("** tickEntity"); self::$tickEntityTimer = new TimingsHandler("** tickEntity");
self::$activatedEntityTimer = new TimingsHandler("** activatedTickEntity");
self::$tickTileEntityTimer = new TimingsHandler("** tickTileEntity"); self::$tickTileEntityTimer = new TimingsHandler("** tickTileEntity");
self::$timerEntityBaseTick = new TimingsHandler("** entityBaseTick"); self::$timerEntityBaseTick = new TimingsHandler("** entityBaseTick");
self::$timerLivingEntityBaseTick = new TimingsHandler("** livingEntityBaseTick"); 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::$schedulerSyncTimer = new TimingsHandler("** Scheduler - Sync Tasks", PluginManager::$pluginParentTimer);
self::$schedulerAsyncTimer = new TimingsHandler("** Scheduler - Async Tasks"); self::$schedulerAsyncTimer = new TimingsHandler("** Scheduler - Async Tasks");

View File

@ -21,42 +21,19 @@
declare(strict_types=1); declare(strict_types=1);
namespace pocketmine\event; namespace pocketmine\timings;
use pocketmine\command\defaults\TimingsCommand;
use pocketmine\entity\Living; use pocketmine\entity\Living;
use pocketmine\plugin\PluginManager;
use pocketmine\Server; use pocketmine\Server;
class TimingsHandler{ class TimingsHandler{
/** @var TimingsHandler[] */ /** @var TimingsHandler[] */
private static $HANDLERS = []; private static $HANDLERS = [];
/** @var bool */
private $name; private static $enabled = false;
/** @var TimingsHandler */ /** @var float */
private $parent = null; private static $timingStart = 0;
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;
}
/** /**
* @param resource $fp * @param resource $fp
@ -92,23 +69,39 @@ class TimingsHandler{
fwrite($fp, "# Entities " . $entities . PHP_EOL); fwrite($fp, "# Entities " . $entities . PHP_EOL);
fwrite($fp, "# LivingEntities " . $livingEntities . 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(){ public static function reload(){
if(Server::getInstance()->getPluginManager()->useTimings()){ if(self::$enabled){
foreach(self::$HANDLERS as $timings){ foreach(self::$HANDLERS as $timings){
$timings->reset(); $timings->reset();
} }
TimingsCommand::$timingStart = microtime(true); self::$timingStart = microtime(true);
} }
} }
public static function tick(bool $measure = true){ public static function tick(bool $measure = true){
if(PluginManager::$useTimings){ if(self::$enabled){
if($measure){ if($measure){
foreach(self::$HANDLERS as $timings){ foreach(self::$HANDLERS as $timings){
if($timings->curTickTotal > 0.05){ if($timings->curTickTotal > 0.05){
$timings->violations += round($timings->curTickTotal / 0.05); $timings->violations += (int) round($timings->curTickTotal / 0.05);
} }
$timings->curTickTotal = 0; $timings->curTickTotal = 0;
$timings->curCount = 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(){ public function startTiming(){
if(PluginManager::$useTimings and ++$this->timingDepth === 1){ if(self::$enabled and ++$this->timingDepth === 1){
$this->start = microtime(true); $this->start = microtime(true);
if($this->parent !== null and ++$this->parent->timingDepth === 1){ if($this->parent !== null and ++$this->parent->timingDepth === 1){
$this->parent->start = $this->start; $this->parent->start = $this->start;
@ -137,7 +161,7 @@ class TimingsHandler{
} }
public function stopTiming(){ public function stopTiming(){
if(PluginManager::$useTimings){ if(self::$enabled){
if(--$this->timingDepth !== 0 or $this->start === 0){ if(--$this->timingDepth !== 0 or $this->start === 0){
return; return;
} }
@ -167,5 +191,4 @@ class TimingsHandler{
public function remove(){ public function remove(){
unset(self::$HANDLERS[spl_object_hash($this)]); unset(self::$HANDLERS[spl_object_hash($this)]);
} }
} }