Move command timings to Timings::

this avoids duplicate timings entries when command labels are changed and changed back, or if multiple command maps are in use.
In addition, it also solves some PHPStan issues :)
This commit is contained in:
Dylan K. Taylor 2022-10-16 16:57:10 +01:00
parent 53cae8911d
commit bd01a919e5
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
5 changed files with 20 additions and 29 deletions

View File

@ -31,8 +31,6 @@ use pocketmine\lang\KnownTranslationFactory;
use pocketmine\lang\Translatable;
use pocketmine\permission\PermissionManager;
use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
use pocketmine\utils\BroadcastLoggerForwarder;
use pocketmine\utils\TextFormat;
use function explode;
@ -60,8 +58,6 @@ abstract class Command{
private ?string $permission = null;
private ?string $permissionMessage = null;
public ?TimingsHandler $timings = null;
/**
* @param string[] $aliases
*/
@ -136,7 +132,6 @@ abstract class Command{
public function setLabel(string $name) : bool{
$this->nextLabel = $name;
if(!$this->isRegistered()){
$this->timings = new TimingsHandler(Timings::INCLUDED_BY_OTHER_TIMINGS_PREFIX . "Command: " . $name);
$this->label = $name;
return true;

View File

@ -26,6 +26,7 @@ namespace pocketmine\command;
use pocketmine\command\utils\CommandStringHelper;
use pocketmine\command\utils\InvalidCommandSyntaxException;
use pocketmine\lang\KnownTranslationFactory;
use pocketmine\timings\Timings;
use pocketmine\utils\AssumptionFailedError;
use pocketmine\utils\TextFormat;
use function array_map;
@ -82,14 +83,15 @@ class FormattedCommandAlias extends Command{
}
if(($target = $commandMap->getCommand($commandLabel)) !== null){
$target->timings->startTiming();
$timings = Timings::getCommandDispatchTimings($target->getLabel());
$timings->startTiming();
try{
$target->execute($sender, $commandLabel, $commandArgs);
}catch(InvalidCommandSyntaxException $e){
$sender->sendMessage($sender->getLanguage()->translate(KnownTranslationFactory::commands_generic_usage($target->getUsage())));
}finally{
$target->timings->stopTiming();
$timings->stopTiming();
}
}else{
$sender->sendMessage($sender->getLanguage()->translate(KnownTranslationFactory::pocketmine_command_notFound($commandLabel, "/help")->prefix(TextFormat::RED)));

View File

@ -68,6 +68,7 @@ use pocketmine\command\utils\CommandStringHelper;
use pocketmine\command\utils\InvalidCommandSyntaxException;
use pocketmine\lang\KnownTranslationFactory;
use pocketmine\Server;
use pocketmine\timings\Timings;
use pocketmine\utils\TextFormat;
use function array_shift;
use function count;
@ -199,7 +200,8 @@ class SimpleCommandMap implements CommandMap{
$sentCommandLabel = array_shift($args);
if($sentCommandLabel !== null && ($target = $this->getCommand($sentCommandLabel)) !== null){
$target->timings->startTiming();
$timings = Timings::getCommandDispatchTimings($target->getLabel());
$timings->startTiming();
try{
if($target->testPermission($sender)){
@ -208,7 +210,7 @@ class SimpleCommandMap implements CommandMap{
}catch(InvalidCommandSyntaxException $e){
$sender->sendMessage($sender->getLanguage()->translate(KnownTranslationFactory::commands_generic_usage($target->getUsage())));
}finally{
$target->timings->stopTiming();
$timings->stopTiming();
}
return true;
}

View File

@ -93,6 +93,12 @@ abstract class Timings{
/** @var TimingsHandler[] */
public static array $pluginTaskTimingMap = [];
/**
* @var TimingsHandler[]
* @phpstan-var array<string, TimingsHandler>
*/
private static array $commandTimingMap = [];
public static TimingsHandler $broadcastPackets;
public static function init() : void{
@ -227,4 +233,10 @@ abstract class Timings{
return self::$packetSendTimingMap[$pid];
}
public static function getCommandDispatchTimings(string $commandName) : TimingsHandler{
self::init();
return self::$commandTimingMap[$commandName] ??= new TimingsHandler(self::INCLUDED_BY_OTHER_TIMINGS_PREFIX . "Command - " . $commandName);
}
}

View File

@ -470,26 +470,6 @@ parameters:
count: 1
path: ../../../src/command/Command.php
-
message: "#^Cannot call method startTiming\\(\\) on pocketmine\\\\timings\\\\TimingsHandler\\|null\\.$#"
count: 1
path: ../../../src/command/FormattedCommandAlias.php
-
message: "#^Cannot call method stopTiming\\(\\) on pocketmine\\\\timings\\\\TimingsHandler\\|null\\.$#"
count: 1
path: ../../../src/command/FormattedCommandAlias.php
-
message: "#^Cannot call method startTiming\\(\\) on pocketmine\\\\timings\\\\TimingsHandler\\|null\\.$#"
count: 1
path: ../../../src/command/SimpleCommandMap.php
-
message: "#^Cannot call method stopTiming\\(\\) on pocketmine\\\\timings\\\\TimingsHandler\\|null\\.$#"
count: 1
path: ../../../src/command/SimpleCommandMap.php
-
message: "#^Cannot call method addParticle\\(\\) on pocketmine\\\\world\\\\World\\|null\\.$#"
count: 1