Use thread executors to speed up the database loading process

This commit is contained in:
KingRainbow44
2023-05-30 15:38:26 -04:00
parent 2009a90e66
commit 36a35c11aa
6 changed files with 184 additions and 79 deletions

View File

@@ -1,7 +1,5 @@
package emu.grasscutter.game.inventory;
import static emu.grasscutter.config.Configuration.INVENTORY_LIMITS;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.common.ItemParamData;
@@ -22,11 +20,14 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import static emu.grasscutter.config.Configuration.INVENTORY_LIMITS;
public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
private final Long2ObjectMap<GameItem> store;
private final Int2ObjectMap<InventoryTab> inventoryTypes;
@@ -572,6 +573,9 @@ public class Inventory extends BasePlayerManager implements Iterable<GameItem> {
}
}
}
// Load avatars after inventory.
this.getPlayer().getAvatars().postLoad();
}
@Override

View File

@@ -1313,16 +1313,17 @@ public class Player implements PlayerHook, FieldFetch {
}
// Load from db
this.achievements = Achievements.getByPlayer(this);
this.getAvatars().loadFromDatabase();
this.getInventory().loadFromDatabase();
var runner = Grasscutter.getThreadPool();
runner.submit(() -> this.achievements = Achievements.getByPlayer(this));
this.getFriendsList().loadFromDatabase();
this.getMailHandler().loadFromDatabase();
this.getQuestManager().loadFromDatabase();
runner.submit(this.getAvatars()::loadFromDatabase);
runner.submit(this.getInventory()::loadFromDatabase);
this.loadBattlePassManager();
this.getAvatars().postLoad(); // Needs to be called after inventory is handled
runner.submit(this.getFriendsList()::loadFromDatabase);
runner.submit(this.getMailHandler()::loadFromDatabase);
runner.submit(this.getQuestManager()::loadFromDatabase);
runner.submit(this::loadBattlePassManager);
this.getPlayerProgress().setPlayer(this); // Add reference to the player.
}
@@ -1397,7 +1398,7 @@ public class Player implements PlayerHook, FieldFetch {
home = GameHome.getByUid(getUid());
home.onOwnerLogin(this);
// Activity
activityManager = new ActivityManager(this);
this.activityManager = new ActivityManager(this);
session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world
session.send(new PacketPlayerLevelRewardUpdateNotify(rewardedLevels));