Skip to content

Commit 29ad5e1

Browse files
committed
Simplify callback collect when multiple threads are collected by one callback
1 parent f0161fc commit 29ad5e1

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

src/Server.php

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@
125125
use Ramsey\Uuid\UuidInterface;
126126
use Symfony\Component\Filesystem\Path;
127127
use function array_fill;
128-
use function array_merge;
129128
use function array_sum;
130129
use function base64_encode;
131130
use function chr;
@@ -913,25 +912,16 @@ public function __construct(
913912
$this->asyncPool->submitTaskToWorker(new TimingsControlTask(TimingsControlTask::RESET), $workerId);
914913
}
915914
});
916-
TimingsHandler::getCollectCallbacks()->add(function() : Promise{
915+
TimingsHandler::getCollectCallbacks()->add(function() : array{
917916
$promises = [];
918917
foreach($this->asyncPool->getRunningWorkers() as $workerId){
919918
$resolver = new PromiseResolver();
920919
$this->asyncPool->submitTaskToWorker(new TimingsCollectionTask($resolver), $workerId);
921920

922921
$promises[] = $resolver->getPromise();
923922
}
924-
$resolver = new PromiseResolver();
925-
Promise::all($promises)->onCompletion(
926-
function(array $workerRecords) use ($resolver) : void{
927-
$resolver->resolve(array_merge(...$workerRecords));
928-
},
929-
function() : void{
930-
throw new AssumptionFailedError("TimingsCollectionTask should never reject a promise");
931-
}
932-
);
933923

934-
return $resolver->getPromise();
924+
return $promises;
935925
});
936926

937927
$netCompressionThreshold = -1;

src/timings/TimingsHandler.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,14 @@
2929
use pocketmine\utils\ObjectSet;
3030
use pocketmine\utils\Utils;
3131
use function array_merge;
32+
use function array_push;
3233
use function hrtime;
3334
use function implode;
3435
use function spl_object_id;
3536

37+
/**
38+
* @phpstan-type CollectPromise Promise<list<string>>
39+
*/
3640
class TimingsHandler{
3741
private const FORMAT_VERSION = 3; //thread timings collection
3842

@@ -43,7 +47,7 @@ class TimingsHandler{
4347
private static ?ObjectSet $toggleCallbacks = null;
4448
/** @phpstan-var ObjectSet<\Closure() : void> */
4549
private static ?ObjectSet $resetCallbacks = null;
46-
/** @phpstan-var ObjectSet<\Closure() : Promise<list<string>>> */
50+
/** @phpstan-var ObjectSet<\Closure() : list<CollectPromise>> */
4751
private static ?ObjectSet $collectCallbacks = null;
4852

4953
/**
@@ -57,7 +61,7 @@ public static function getToggleCallbacks() : ObjectSet{ return self::$toggleCal
5761
public static function getResetCallbacks() : ObjectSet{ return self::$resetCallbacks ??= new ObjectSet(); }
5862

5963
/**
60-
* @phpstan-return ObjectSet<\Closure() : Promise<list<string>>>
64+
* @phpstan-return ObjectSet<\Closure() : list<CollectPromise>>
6165
*/
6266
public static function getCollectCallbacks() : ?ObjectSet{ return self::$collectCallbacks ??= new ObjectSet(); }
6367

@@ -151,7 +155,8 @@ public static function requestPrintTimings() : Promise{
151155
$otherThreadRecordPromises = [];
152156
if(self::$collectCallbacks !== null){
153157
foreach(self::$collectCallbacks as $callback){
154-
$otherThreadRecordPromises[] = $callback();
158+
$callbackPromises = $callback();
159+
array_push($otherThreadRecordPromises, ...$callbackPromises);
155160
}
156161
}
157162

0 commit comments

Comments
 (0)