mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-08 09:27:58 +01:00
Fix incremental thread refresh
This commit is contained in:
parent
92f30070db
commit
1dbd3078c3
@ -126,7 +126,8 @@ public final class UpdateManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Clear removed entities & update threads
|
// Clear removed entities & update threads
|
||||||
this.threadProvider.refreshThreads();
|
long tickTime = System.currentTimeMillis() - tickStart;
|
||||||
|
this.threadProvider.refreshThreads(tickTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -327,20 +327,20 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//System.out.println(getAcquiredElement().getHandler().getBatchThread());
|
//System.out.println(getAcquiredElement().getHandler().getBatchThread());
|
||||||
Collection<Acquirable<Player>> players = new ArrayList<>();
|
/*Collection<Acquirable<Player>> players = new ArrayList<>();
|
||||||
//if (username.equals("TheMode911"))
|
if (username.equals("TheMode911"))
|
||||||
for (Player p1 : MinecraftServer.getConnectionManager().getOnlinePlayers()) {
|
for (Player p1 : MinecraftServer.getConnectionManager().getOnlinePlayers()) {
|
||||||
//players.add(p1.getAcquiredElement());
|
//players.add(p1.getAcquiredElement());
|
||||||
p1.getAcquiredElement().acquire(o -> {
|
p1.getAcquiredElement().acquire(o -> {
|
||||||
//System.out.println(getUsername()+": "+o+" "+getAliveTicks());
|
//System.out.println(getUsername()+": "+o+" "+getAliveTicks());
|
||||||
/*for (Player p2 : MinecraftServer.getConnectionManager().getOnlinePlayers())
|
for (Player p2 : MinecraftServer.getConnectionManager().getOnlinePlayers())
|
||||||
p2.getAcquiredElement().acquire(o2 -> {
|
p2.getAcquiredElement().acquire(o2 -> {
|
||||||
//System.out.println(getAcquiredElement().getHandler().getBatchThread().monitor.isOccupiedByCurrentThread());
|
//System.out.println(getAcquiredElement().getHandler().getBatchThread().monitor.isOccupiedByCurrentThread());
|
||||||
});*/
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*AcquirableCollection<Player> players1 = new AcquirableCollection<>(players);
|
AcquirableCollection<Player> players1 = new AcquirableCollection<>(players);
|
||||||
players1.forEach(player -> {
|
players1.forEach(player -> {
|
||||||
players1.forEach(player2 -> {
|
players1.forEach(player2 -> {
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package net.minestom.server.thread;
|
package net.minestom.server.thread;
|
||||||
|
|
||||||
import net.minestom.server.MinecraftServer;
|
|
||||||
import net.minestom.server.entity.Entity;
|
import net.minestom.server.entity.Entity;
|
||||||
import net.minestom.server.instance.Chunk;
|
import net.minestom.server.instance.Chunk;
|
||||||
import net.minestom.server.instance.Instance;
|
import net.minestom.server.instance.Instance;
|
||||||
@ -32,7 +31,9 @@ public abstract class ThreadProvider {
|
|||||||
|
|
||||||
// Represents the maximum percentage of tick time
|
// Represents the maximum percentage of tick time
|
||||||
// that can be spent refreshing chunks thread
|
// that can be spent refreshing chunks thread
|
||||||
protected float refreshPercentage = 0.3f;
|
protected double refreshPercentage = 0.3f;
|
||||||
|
// Minimum refresh time
|
||||||
|
private long min = 3;
|
||||||
|
|
||||||
public ThreadProvider(int threadCount) {
|
public ThreadProvider(int threadCount) {
|
||||||
this.threads = new ArrayList<>(threadCount);
|
this.threads = new ArrayList<>(threadCount);
|
||||||
@ -92,7 +93,7 @@ public abstract class ThreadProvider {
|
|||||||
|
|
||||||
protected @NotNull ChunkEntry setChunkThread(@NotNull Chunk chunk,
|
protected @NotNull ChunkEntry setChunkThread(@NotNull Chunk chunk,
|
||||||
@NotNull Function<@NotNull BatchThread, @NotNull ChunkEntry> chunkEntrySupplier) {
|
@NotNull Function<@NotNull BatchThread, @NotNull ChunkEntry> chunkEntrySupplier) {
|
||||||
final int threadId = (int) (Math.abs(findThread(chunk)) % threads.size());
|
final int threadId = getThreadId(chunk);
|
||||||
BatchThread thread = threads.get(threadId);
|
BatchThread thread = threads.get(threadId);
|
||||||
var chunks = threadChunkMap.computeIfAbsent(thread, batchThread -> ConcurrentHashMap.newKeySet());
|
var chunks = threadChunkMap.computeIfAbsent(thread, batchThread -> ConcurrentHashMap.newKeySet());
|
||||||
|
|
||||||
@ -114,6 +115,10 @@ public abstract class ThreadProvider {
|
|||||||
this.chunks.remove(chunk);
|
this.chunks.remove(chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int getThreadId(Chunk chunk) {
|
||||||
|
return (int) (Math.abs(findThread(chunk)) % threads.size());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepares the update.
|
* Prepares the update.
|
||||||
*
|
*
|
||||||
@ -152,7 +157,7 @@ public abstract class ThreadProvider {
|
|||||||
return countDownLatch;
|
return countDownLatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void refreshThreads() {
|
public synchronized void refreshThreads(long tickTime) {
|
||||||
// Clear removed entities
|
// Clear removed entities
|
||||||
{
|
{
|
||||||
for (Entity entity : removedEntities) {
|
for (Entity entity : removedEntities) {
|
||||||
@ -167,11 +172,11 @@ public abstract class ThreadProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
final long endTime = (long) (System.currentTimeMillis() + ((float) MinecraftServer.TICK_MS * refreshPercentage));
|
final long endTime = (System.currentTimeMillis() +
|
||||||
|
Math.max((long) ((double) tickTime * refreshPercentage), min));
|
||||||
final int size = chunks.size();
|
final int size = chunks.size();
|
||||||
int counter = 0;
|
int counter = 0;
|
||||||
while (counter++ < size ||
|
while (true) {
|
||||||
System.currentTimeMillis() < endTime) {
|
|
||||||
Chunk chunk = chunks.pollFirst();
|
Chunk chunk = chunks.pollFirst();
|
||||||
if (!ChunkUtils.isLoaded(chunk)) {
|
if (!ChunkUtils.isLoaded(chunk)) {
|
||||||
removeChunk(chunk);
|
removeChunk(chunk);
|
||||||
@ -196,6 +201,13 @@ public abstract class ThreadProvider {
|
|||||||
|
|
||||||
// Add back to the deque
|
// Add back to the deque
|
||||||
chunks.addLast(chunk);
|
chunks.addLast(chunk);
|
||||||
|
|
||||||
|
if (++counter > size)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (System.currentTimeMillis() >= endTime)
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
System.out.println("update " + counter);
|
System.out.println("update " + counter);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user