mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-06 01:51:51 +00:00
Make MemoryManager aware of ChunkCache
This commit is contained in:
parent
eb40b741ae
commit
5db3915aad
@ -24,6 +24,7 @@ declare(strict_types=1);
|
|||||||
namespace pocketmine;
|
namespace pocketmine;
|
||||||
|
|
||||||
use pocketmine\event\server\LowMemoryEvent;
|
use pocketmine\event\server\LowMemoryEvent;
|
||||||
|
use pocketmine\network\mcpe\cache\ChunkCache;
|
||||||
use pocketmine\scheduler\DumpWorkerMemoryTask;
|
use pocketmine\scheduler\DumpWorkerMemoryTask;
|
||||||
use pocketmine\scheduler\GarbageCollectionTask;
|
use pocketmine\scheduler\GarbageCollectionTask;
|
||||||
use pocketmine\timings\Timings;
|
use pocketmine\timings\Timings;
|
||||||
@ -187,6 +188,7 @@ class MemoryManager{
|
|||||||
foreach($this->server->getWorldManager()->getWorlds() as $world){
|
foreach($this->server->getWorldManager()->getWorlds() as $world){
|
||||||
$world->clearCache(true);
|
$world->clearCache(true);
|
||||||
}
|
}
|
||||||
|
ChunkCache::pruneCaches();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->lowMemChunkGC){
|
if($this->lowMemChunkGC){
|
||||||
|
16
src/network/mcpe/cache/ChunkCache.php
vendored
16
src/network/mcpe/cache/ChunkCache.php
vendored
@ -36,9 +36,6 @@ use function strlen;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is used by the current MCPE protocol system to store cached chunk packets for fast resending.
|
* This class is used by the current MCPE protocol system to store cached chunk packets for fast resending.
|
||||||
*
|
|
||||||
* TODO: make MemoryManager aware of this so the cache can be destroyed when memory is low
|
|
||||||
* TODO: this needs a hook for world unloading
|
|
||||||
*/
|
*/
|
||||||
class ChunkCache implements ChunkListener{
|
class ChunkCache implements ChunkListener{
|
||||||
/** @var self[][] */
|
/** @var self[][] */
|
||||||
@ -69,6 +66,19 @@ class ChunkCache implements ChunkListener{
|
|||||||
return self::$instances[$worldId][$compressorId];
|
return self::$instances[$worldId][$compressorId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function pruneCaches() : void{
|
||||||
|
foreach(self::$instances as $compressorMap){
|
||||||
|
foreach($compressorMap as $chunkCache){
|
||||||
|
foreach($chunkCache->caches as $chunkHash => $promise){
|
||||||
|
if($promise->hasResult()){
|
||||||
|
//Do not clear promises that are not yet fulfilled; they will have requesters waiting on them
|
||||||
|
unset($chunkCache->caches[$chunkHash]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** @var World */
|
/** @var World */
|
||||||
private $world;
|
private $world;
|
||||||
/** @var Compressor */
|
/** @var Compressor */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user