project: resize EvictingDualNodeHashTable
This commit is contained in:
@@ -145,6 +145,7 @@ import net.runelite.rs.api.RSChatChannel;
|
||||
import net.runelite.rs.api.RSClanChannel;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSEnumComposition;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSFriendSystem;
|
||||
import net.runelite.rs.api.RSIndexedSprite;
|
||||
import net.runelite.rs.api.RSInterfaceParent;
|
||||
@@ -1767,6 +1768,13 @@ public abstract class RSClientMixin implements RSClient
|
||||
updateCamera();
|
||||
}
|
||||
|
||||
@Inject
|
||||
@MethodHook(value = "draw", end = true)
|
||||
public void drawEnd(boolean var1)
|
||||
{
|
||||
checkResize();
|
||||
}
|
||||
|
||||
@MethodHook("drawInterface")
|
||||
@Inject
|
||||
public static void preRenderWidgetLayer(Widget[] widgets, int parentId, int minX, int minY, int maxX, int maxY, int x, int y, int var8)
|
||||
@@ -2695,5 +2703,68 @@ public abstract class RSClientMixin implements RSClient
|
||||
{
|
||||
client.getCallbacks().tick();
|
||||
}
|
||||
|
||||
@Inject
|
||||
public static void check(String name, RSEvictingDualNodeHashTable dualNodeHashTable)
|
||||
{
|
||||
boolean var3 = dualNodeHashTable.isTrashing();
|
||||
dualNodeHashTable.setThreshold(dualNodeHashTable.getThreshold() * 0.92F + (var3 ? 0.07999998F : 0.0F));
|
||||
if (var3)
|
||||
{
|
||||
if (dualNodeHashTable.getThreshold() > 0.2F)
|
||||
{
|
||||
client.getLogger().trace("cache {} is thrashing", name);
|
||||
}
|
||||
|
||||
if (dualNodeHashTable.getThreshold() > 0.9F && dualNodeHashTable.getCapacity() < dualNodeHashTable.getTmpCapacity() * 8)
|
||||
{
|
||||
dualNodeHashTable.increaseCapacity(dualNodeHashTable.getCapacity() * 2);
|
||||
client.getLogger().info("cache {} thrashing, enlarging to {} entries", name, dualNodeHashTable.getCapacity());
|
||||
}
|
||||
}
|
||||
|
||||
dualNodeHashTable.getDeque().add(dualNodeHashTable.getDualNode());
|
||||
}
|
||||
|
||||
@Inject
|
||||
public static void checkResize()
|
||||
{
|
||||
check("Script_cached", client.getScriptCache());
|
||||
check("StructDefinition_cached", client.getRSStructCompositionCache());
|
||||
check("HealthBarDefinition_cached", client.getHealthBarCache());
|
||||
check("HealthBarDefinition_cachedSprites", client.getHealthBarSpriteCache());
|
||||
check("ObjectDefinition_cachedModels", client.getObjectDefinitionModelsCache());
|
||||
check("Widget_cachedSprites", client.getWidgetSpriteCache());
|
||||
check("ItemDefinition_cached", client.getItemCompositionCache());
|
||||
check("VarbitDefinition_cached", client.getVarbitCache());
|
||||
check("EnumDefinition_cached", client.getEnumDefinitionCache());
|
||||
check("FloorUnderlayDefinition_cached", client.getFloorUnderlayDefinitionCache());
|
||||
check("FloorOverlayDefinition_cached", client.getFloorOverlayDefinitionCache());
|
||||
check("HitSplatDefinition_cached", client.getHitSplatDefinitionCache());
|
||||
check("HitSplatDefinition_cachedSprites", client.getHitSplatDefinitionSpritesCache());
|
||||
check("HitSplatDefinition_cachedFonts", client.getHitSplatDefinitionDontsCache());
|
||||
check("InvDefinition_cached", client.getInvDefinitionCache());
|
||||
check("ItemDefinition_cachedModels", client.getItemDefinitionModelsCache());
|
||||
check("ItemDefinition_cachedSprites", client.getItemDefinitionSpritesCache());
|
||||
check("KitDefinition_cached", client.getKitDefinitionCache());
|
||||
check("NpcDefinition_cached", client.getNpcDefinitionCache());
|
||||
check("NpcDefinition_cachedModels", client.getNpcDefinitionModelsCache());
|
||||
check("ObjectDefinition_cached", client.getObjectDefinitionCache());
|
||||
check("ObjectDefinition_cachedModelData", client.getObjectDefinitionModelDataCache());
|
||||
check("ObjectDefinition_cachedEntities", client.getObjectDefinitionEntitiesCache());
|
||||
check("ParamDefinition_cached", client.getParamDefinitionCache());
|
||||
check("PlayerAppearance_cachedModels", client.getPlayerAppearanceModelsCache());
|
||||
check("SequenceDefinition_cached", client.getSequenceDefinitionCache());
|
||||
check("SequenceDefinition_cachedFrames", client.getSequenceDefinitionFramesCache());
|
||||
check("SequenceDefinition_cachedModel", client.getSequenceDefinitionModelsCache());
|
||||
check("SpotAnimationDefinition_cached", client.getSpotAnimationDefinitionCache());
|
||||
check("SpotAnimationDefinition_cachedModels", client.getSpotAnimationDefinitionModlesCache());
|
||||
check("VarcInt_cached", client.getVarcIntCache());
|
||||
check("VarpDefinition_cached", client.getVarpDefinitionCache());
|
||||
check("Widget_cachedModels", client.getModelsCache());
|
||||
check("Widget_cachedFonts", client.getFontsCache());
|
||||
check("Widget_cachedSpriteMasks", client.getSpriteMasksCache());
|
||||
check("WorldMapElement_cachedSprites", client.getSpritesCache());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSIterableNodeHashTable;
|
||||
|
||||
@Mixin(RSEvictingDualNodeHashTable.class)
|
||||
public abstract class RSEvictingDualNodeHashTableMixin implements RSEvictingDualNodeHashTable
|
||||
{
|
||||
@Shadow("client")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
public float threshold;
|
||||
|
||||
@Inject
|
||||
public int tmpCapacity;
|
||||
|
||||
@Inject
|
||||
RSEvictingDualNodeHashTableMixin()
|
||||
{
|
||||
setTmpCapacity(this.getCapacity());
|
||||
}
|
||||
|
||||
@Inject
|
||||
public float getThreshold()
|
||||
{
|
||||
return threshold;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setThreshold(float threshold)
|
||||
{
|
||||
this.threshold = threshold;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public int getTmpCapacity()
|
||||
{
|
||||
return tmpCapacity;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTmpCapacity(int tmpCapacity)
|
||||
{
|
||||
this.tmpCapacity = tmpCapacity;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public boolean isTrashing()
|
||||
{
|
||||
return this.getRemainingCapacity() <= 0 && this.getDualNode().previousDual() == null;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void resize(int newSize)
|
||||
{
|
||||
this.increaseCapacity(newSize);
|
||||
this.tmpCapacity = this.getCapacity();
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void increaseCapacity(int newSize)
|
||||
{
|
||||
if (newSize > this.getCapacity())
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < newSize; i += i)
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
|
||||
this.setCapacity(i);
|
||||
this.reset();
|
||||
|
||||
RSIterableNodeHashTable iterableNodeHashTable = client.createIterableNodeHashTable(i);
|
||||
this.setHashTable(iterableNodeHashTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,8 @@ import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Replace;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSItemComposition;
|
||||
import net.runelite.rs.api.RSModel;
|
||||
|
||||
@Mixin(RSItemComposition.class)
|
||||
public abstract class RSItemCompositionMixin implements RSItemComposition
|
||||
@@ -22,19 +22,12 @@ public abstract class RSItemCompositionMixin implements RSItemComposition
|
||||
@Inject
|
||||
private int shiftClickActionIndex = DEFAULT_CUSTOM_SHIFT_CLICK_INDEX;
|
||||
|
||||
@MethodHook(value = "<clinit>", end = true)
|
||||
@Inject
|
||||
private int modelOverride = -1;
|
||||
|
||||
@Override
|
||||
@Inject
|
||||
public void setModelOverride(int id)
|
||||
{
|
||||
modelOverride = id;
|
||||
}
|
||||
|
||||
@Inject
|
||||
RSItemCompositionMixin()
|
||||
public static void rl$clinit()
|
||||
{
|
||||
RSEvictingDualNodeHashTable cachedModels2 = client.getItemCompositionCache();
|
||||
cachedModels2.resize(1024);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -74,18 +67,6 @@ public abstract class RSItemCompositionMixin implements RSItemComposition
|
||||
client.getCallbacks().post(event);
|
||||
}
|
||||
|
||||
@Copy("getModel")
|
||||
@Replace("getModel")
|
||||
public RSModel copy$getModel(int quantity)
|
||||
{
|
||||
if (modelOverride == -1)
|
||||
{
|
||||
return copy$getModel(quantity);
|
||||
}
|
||||
|
||||
return client.getRSItemDefinition(modelOverride).getModel(quantity);
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public int getHaPrice()
|
||||
|
||||
@@ -2,10 +2,10 @@ package net.runelite.mixins;
|
||||
|
||||
import net.runelite.api.IterableHashTable;
|
||||
import net.runelite.api.Node;
|
||||
import net.runelite.api.NodeCache;
|
||||
import net.runelite.api.mixins.*;
|
||||
import net.runelite.rs.api.RSBuffer;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSObjectComposition;
|
||||
|
||||
@Mixin(RSObjectComposition.class)
|
||||
@@ -17,14 +17,12 @@ public abstract class RSObjectCompositionMixin implements RSObjectComposition
|
||||
@Inject
|
||||
private int accessBitMask = 0;
|
||||
|
||||
@MethodHook(value = "<init>", end = true)
|
||||
@MethodHook(value = "<clinit>", end = true)
|
||||
@Inject
|
||||
public void rl$init()
|
||||
public static void rl$clinit()
|
||||
{
|
||||
NodeCache cachedModels2 = client.getCachedModels2();
|
||||
cachedModels2.setCapacity(256);
|
||||
cachedModels2.setRemainingCapacity(256);
|
||||
cachedModels2.reset();
|
||||
RSEvictingDualNodeHashTable objectDefinitionModelsCache = client.getObjectDefinitionModelsCache();
|
||||
objectDefinitionModelsCache.resize(256);
|
||||
}
|
||||
|
||||
@Inject
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.runelite.mixins;
|
||||
|
||||
import net.runelite.api.mixins.Inject;
|
||||
import net.runelite.api.mixins.MethodHook;
|
||||
import net.runelite.api.mixins.Mixin;
|
||||
import net.runelite.api.mixins.Shadow;
|
||||
import net.runelite.rs.api.RSClient;
|
||||
import net.runelite.rs.api.RSEvictingDualNodeHashTable;
|
||||
import net.runelite.rs.api.RSVarbitComposition;
|
||||
|
||||
@Mixin(RSVarbitComposition.class)
|
||||
public abstract class RSVarbitCompositionMixin implements RSVarbitComposition
|
||||
{
|
||||
@Shadow("client")
|
||||
private static RSClient client;
|
||||
|
||||
@MethodHook(value = "<clinit>", end = true)
|
||||
@Inject
|
||||
public static void rl$clinit()
|
||||
{
|
||||
RSEvictingDualNodeHashTable varbitCache = client.getVarbitCache();
|
||||
varbitCache.resize(256);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user