From 55e0d9c52098689d5bc184967e0769cf21e1f405 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 8 Nov 2020 14:30:12 +0000 Subject: [PATCH 1/4] Properly time chunk loading and chunk sending on timings reports, closes #3895 --- src/pocketmine/level/LevelTimings.php | 9 ++++----- src/pocketmine/timings/Timings.php | 3 +++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/pocketmine/level/LevelTimings.php b/src/pocketmine/level/LevelTimings.php index de925cd6c..5b7defdbe 100644 --- a/src/pocketmine/level/LevelTimings.php +++ b/src/pocketmine/level/LevelTimings.php @@ -80,15 +80,14 @@ class LevelTimings{ $this->entityTick = new TimingsHandler("** " . $name . "entityTick"); $this->tileEntityTick = new TimingsHandler("** " . $name . "tileEntityTick"); - $this->syncChunkSendTimer = new TimingsHandler("** " . $name . "syncChunkSend"); - $this->syncChunkSendPrepareTimer = new TimingsHandler("** " . $name . "syncChunkSendPrepare"); + Timings::init(); //make sure the timers we want are available + $this->syncChunkSendTimer = new TimingsHandler("** " . $name . "syncChunkSend", Timings::$playerChunkSendTimer); + $this->syncChunkSendPrepareTimer = new TimingsHandler("** " . $name . "syncChunkSendPrepare", Timings::$playerChunkSendTimer); - $this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad"); + $this->syncChunkLoadTimer = new TimingsHandler("** " . $name . "syncChunkLoad", Timings::$worldLoadTimer); $this->syncChunkLoadDataTimer = new TimingsHandler("** " . $name . "syncChunkLoad - Data"); $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"); diff --git a/src/pocketmine/timings/Timings.php b/src/pocketmine/timings/Timings.php index a234d5024..6fd16e246 100644 --- a/src/pocketmine/timings/Timings.php +++ b/src/pocketmine/timings/Timings.php @@ -59,6 +59,8 @@ abstract class Timings{ /** @var TimingsHandler */ public static $serverCommandTimer; /** @var TimingsHandler */ + public static $worldLoadTimer; + /** @var TimingsHandler */ public static $worldSaveTimer; /** @var TimingsHandler */ public static $populationTimer; @@ -126,6 +128,7 @@ abstract class Timings{ self::$connectionTimer = new TimingsHandler("Connection Handler"); self::$schedulerTimer = new TimingsHandler("Scheduler"); self::$serverCommandTimer = new TimingsHandler("Server Command"); + self::$worldLoadTimer = new TimingsHandler("World Load"); self::$worldSaveTimer = new TimingsHandler("World Save"); self::$populationTimer = new TimingsHandler("World Population"); self::$generationCallbackTimer = new TimingsHandler("World Generation Callback"); From 6c21c23444efbfc01c3093a4dc9bf6501b2e07d9 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 8 Nov 2020 14:48:31 +0000 Subject: [PATCH 2/4] Release 3.15.3 --- src/pocketmine/VersionInfo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pocketmine/VersionInfo.php b/src/pocketmine/VersionInfo.php index 75e3c83d1..440f52a5e 100644 --- a/src/pocketmine/VersionInfo.php +++ b/src/pocketmine/VersionInfo.php @@ -34,5 +34,5 @@ const _VERSION_INFO_INCLUDED = true; const NAME = "PocketMine-MP"; const BASE_VERSION = "3.15.3"; -const IS_DEVELOPMENT_BUILD = true; +const IS_DEVELOPMENT_BUILD = false; const BUILD_NUMBER = 0; From a421d32273e9201ac098728ad01072e20ccc43c2 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 8 Nov 2020 14:48:31 +0000 Subject: [PATCH 3/4] 3.15.4 is next --- src/pocketmine/VersionInfo.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pocketmine/VersionInfo.php b/src/pocketmine/VersionInfo.php index 440f52a5e..f0e73f017 100644 --- a/src/pocketmine/VersionInfo.php +++ b/src/pocketmine/VersionInfo.php @@ -33,6 +33,6 @@ if(defined('pocketmine\_VERSION_INFO_INCLUDED')){ const _VERSION_INFO_INCLUDED = true; const NAME = "PocketMine-MP"; -const BASE_VERSION = "3.15.3"; -const IS_DEVELOPMENT_BUILD = false; +const BASE_VERSION = "3.15.4"; +const IS_DEVELOPMENT_BUILD = true; const BUILD_NUMBER = 0; From fa920aa8685f5c8fd228eb0482abea954513d1aa Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 8 Nov 2020 19:25:55 +0000 Subject: [PATCH 4/4] Misplaced the changelog AGAIN --- changelogs/3.15.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/changelogs/3.15.md b/changelogs/3.15.md index 930c91e70..364fd298d 100644 --- a/changelogs/3.15.md +++ b/changelogs/3.15.md @@ -32,3 +32,20 @@ Plugin developers should **only** update their required API to this version if y - Fixed issues with preloading `SubChunk`. - `/gc` and automatic garbage collection will now release unused heap blocks back to the OS. Previously, the PHP process might hold onto these blocks indefinitely even when not used, causing elevated real memory usage. - Added some documentation to `FurnaceBurnEvent`. + +# 3.15.3 +- Fixed fall damage accumulation over continuous knockbacks (e.g. combo attacks in PvP). +- Fixed a bug in `Human->addXp()` that would cause a crash when saving player data. +- `Human->addXp()` will no longer modify the target's total XP if `PlayerExperienceChangeEvent` was cancelled. +- `AsyncPool->getTaskQueueSizes()` has been added to allow external detection of async pool overload. This is planned to be implemented as a core feature in the future, but it hasn't been done yet. +- `BaseInventory->canAddItem()` behaviour now matches `addItem()` by considering the max stack size of the given item. +- Fixed a bug in generator options handling for worlds loaded via `pocketmine.yml`. This fix has the following side effects: + - It's now possible to provide generator options as an `options` key when loading a world via `pocketmine.yml`. + - If generator options are not provided, the options from `server.properties` will be used, instead of using an empty preset. (It's not clear whether this is desired behaviour, but it was clearly intended, since there is code to do this which was broken until this release. As such, this behaviour is subject to change in the future.) +- Fixed a bug in region-based world loading where some files without filename extensions and names containing a region filename extension (e.g a file named `amca` in a McRegion world) would cause the world not to load. These files are now ignored. +- Default network compression level has been lowered to 6, due to level 7 being 25% more expensive for only a marginal improvement in bandwidth. +- Fixed a performance issue with chunk requesting when players trigger chunk generation on first join. +- Setup wizard will now always show IP information, even if the user chose to skip the setup wizard when prompted. (This doesn't affect `--no-wizard` in any way.) +- `Maximum memory (system)` is no longer reported in `/status` due to having a misleading output (it was the same as the current memory usage). +- The `Player Chunk Send` timer on timings reports now actually reports measurements of chunk sending, not chunk loading. +- A new parent timer `World Load` has been added to timings reports, which aggregates timings from `syncChunkLoad` and subtimings from all worlds.