Merge pull request #800 from Abextm/allocation-opimization

Allocation optimization
This commit is contained in:
Adam
2018-03-04 10:52:24 -05:00
committed by GitHub
5 changed files with 33 additions and 19 deletions

View File

@@ -39,6 +39,8 @@ import net.runelite.client.ui.overlay.components.PanelComponent;
class BlastFurnaceCofferOverlay extends Overlay class BlastFurnaceCofferOverlay extends Overlay
{ {
private static final NumberFormat NUMBER_FORMATTER = NumberFormat.getInstance();
private final Client client; private final Client client;
private final BlastFurnacePlugin plugin; private final BlastFurnacePlugin plugin;
private final PanelComponent panelComponent = new PanelComponent(); private final PanelComponent panelComponent = new PanelComponent();
@@ -69,7 +71,7 @@ class BlastFurnaceCofferOverlay extends Overlay
panelComponent.getLines().add(new PanelComponent.Line( panelComponent.getLines().add(new PanelComponent.Line(
"Coffer:", "Coffer:",
NumberFormat.getInstance().format(client.getSetting(BLAST_FURNACE_COFFER)) + " gp" NUMBER_FORMATTER.format(client.getSetting(BLAST_FURNACE_COFFER)) + " gp"
)); ));
} }
return panelComponent.render(graphics, parent); return panelComponent.render(graphics, parent);

View File

@@ -68,6 +68,8 @@ public class HiscorePanel extends PluginPanel
private static final String SKILL_NAME = "SKILL_NAME"; private static final String SKILL_NAME = "SKILL_NAME";
private static final String SKILL = "SKILL"; private static final String SKILL = "SKILL";
private static final NumberFormat NUMBER_FORMATTER = NumberFormat.getInstance();
private static final HiscoreSkill[] SKILL_PANEL_ORDER = new HiscoreSkill[] private static final HiscoreSkill[] SKILL_PANEL_ORDER = new HiscoreSkill[]
{ {
ATTACK, HITPOINTS, MINING, ATTACK, HITPOINTS, MINING,
@@ -255,8 +257,6 @@ public class HiscorePanel extends PluginPanel
return; return;
} }
NumberFormat formatter = NumberFormat.getInstance();
String text; String text;
switch (skillName) switch (skillName)
{ {
@@ -272,8 +272,8 @@ public class HiscorePanel extends PluginPanel
result.getPrayer().getLevel() result.getPrayer().getLevel()
); );
text = "Skill: Combat" + System.lineSeparator() text = "Skill: Combat" + System.lineSeparator()
+ "Exact Combat Level: " + formatter.format(combatLevel) + System.lineSeparator() + "Exact Combat Level: " + NUMBER_FORMATTER.format(combatLevel) + System.lineSeparator()
+ "Experience: " + formatter.format(result.getAttack().getExperience() + "Experience: " + NUMBER_FORMATTER.format(result.getAttack().getExperience()
+ result.getStrength().getExperience() + result.getDefence().getExperience() + result.getStrength().getExperience() + result.getDefence().getExperience()
+ result.getHitpoints().getExperience() + result.getMagic().getExperience() + result.getHitpoints().getExperience() + result.getMagic().getExperience()
+ result.getRanged().getExperience() + result.getPrayer().getExperience()); + result.getRanged().getExperience() + result.getPrayer().getExperience());
@@ -281,28 +281,28 @@ public class HiscorePanel extends PluginPanel
} }
case "Clue Scrolls (all)": case "Clue Scrolls (all)":
{ {
String rank = (result.getClueScrollAll().getRank() == -1) ? "Unranked" : formatter.format(result.getClueScrollAll().getRank()); String rank = (result.getClueScrollAll().getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(result.getClueScrollAll().getRank());
text = "Total Clue Scrolls Completed" + System.lineSeparator() text = "Total Clue Scrolls Completed" + System.lineSeparator()
+ "Rank: " + rank; + "Rank: " + rank;
break; break;
} }
case "Bounty Hunter - Rogue": case "Bounty Hunter - Rogue":
{ {
String rank = (result.getBountyHunterRogue().getRank() == -1) ? "Unranked" : formatter.format(result.getBountyHunterRogue().getRank()); String rank = (result.getBountyHunterRogue().getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(result.getBountyHunterRogue().getRank());
text = "Bounty Hunter - Rogue Kills" + System.lineSeparator() text = "Bounty Hunter - Rogue Kills" + System.lineSeparator()
+ "Rank: " + rank; + "Rank: " + rank;
break; break;
} }
case "Bounty Hunter - Hunter": case "Bounty Hunter - Hunter":
{ {
String rank = (result.getBountyHunterHunter().getRank() == -1) ? "Unranked" : formatter.format(result.getBountyHunterHunter().getRank()); String rank = (result.getBountyHunterHunter().getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(result.getBountyHunterHunter().getRank());
text = "Bounty Hunter - Hunter Kills" + System.lineSeparator() text = "Bounty Hunter - Hunter Kills" + System.lineSeparator()
+ "Rank: " + rank; + "Rank: " + rank;
break; break;
} }
case "Last Man Standing": case "Last Man Standing":
{ {
String rank = (result.getLastManStanding().getRank() == -1) ? "Unranked" : formatter.format(result.getLastManStanding().getRank()); String rank = (result.getLastManStanding().getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(result.getLastManStanding().getRank());
text = "Last Man Standing" + System.lineSeparator() text = "Last Man Standing" + System.lineSeparator()
+ "Rank: " + rank; + "Rank: " + rank;
break; break;
@@ -310,8 +310,8 @@ public class HiscorePanel extends PluginPanel
default: default:
{ {
Skill requestedSkill = result.getSkill(skill); Skill requestedSkill = result.getSkill(skill);
String rank = (requestedSkill.getRank() == -1) ? "Unranked" : formatter.format(requestedSkill.getRank()); String rank = (requestedSkill.getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(requestedSkill.getRank());
String exp = (requestedSkill.getRank() == -1) ? "Unranked" : formatter.format(requestedSkill.getExperience()); String exp = (requestedSkill.getRank() == -1) ? "Unranked" : NUMBER_FORMATTER.format(requestedSkill.getExperience());
text = "Skill: " + skillName + System.lineSeparator() text = "Skill: " + skillName + System.lineSeparator()
+ "Rank: " + rank + System.lineSeparator() + "Rank: " + rank + System.lineSeparator()
+ "Experience: " + exp; + "Experience: " + exp;

View File

@@ -45,6 +45,8 @@ import net.runelite.client.ui.PluginPanel;
@Slf4j @Slf4j
class XpPanel extends PluginPanel class XpPanel extends PluginPanel
{ {
private static final NumberFormat NUMBER_FORMATTER = NumberFormat.getInstance();
private final Map<Skill, XpInfoBox> infoBoxes = new HashMap<>(); private final Map<Skill, XpInfoBox> infoBoxes = new HashMap<>();
private final JLabel totalXpGained = new JLabel(); private final JLabel totalXpGained = new JLabel();
private final JLabel totalXpHr = new JLabel(); private final JLabel totalXpHr = new JLabel();
@@ -139,7 +141,6 @@ class XpPanel extends PluginPanel
static String formatLine(double number, String description) static String formatLine(double number, String description)
{ {
return NUMBER_FORMATTER.format(number) + " " + description;
return NumberFormat.getInstance().format(number) + " " + description;
} }
} }

View File

@@ -40,6 +40,7 @@ public abstract class RSHashTableMixin implements RSHashTable
@Override @Override
public Collection<Node> getNodes() public Collection<Node> getNodes()
{ {
// Copied in RSWidgetMixin.getParentId to reduce allocations
List<Node> nodes = new ArrayList<Node>(); List<Node> nodes = new ArrayList<Node>();
RSNode[] buckets = getBuckets(); RSNode[] buckets = getBuckets();

View File

@@ -43,6 +43,7 @@ import net.runelite.api.widgets.WidgetItem;
import static net.runelite.client.callback.Hooks.eventBus; import static net.runelite.client.callback.Hooks.eventBus;
import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSClient;
import net.runelite.rs.api.RSHashTable; import net.runelite.rs.api.RSHashTable;
import net.runelite.rs.api.RSNode;
import net.runelite.rs.api.RSWidget; import net.runelite.rs.api.RSWidget;
@Mixin(RSWidget.class) @Mixin(RSWidget.class)
@@ -76,18 +77,27 @@ public abstract class RSWidgetMixin implements RSWidget
return parentId; return parentId;
} }
int i = TO_GROUP(getId()); int groupId = TO_GROUP(getId());
RSHashTable componentTable = client.getComponentTable(); RSHashTable componentTable = client.getComponentTable();
for (Node node : componentTable.getNodes()) RSNode[] buckets = componentTable.getBuckets();
for (int i = 0; i < buckets.length; ++i)
{ {
WidgetNode wn = (WidgetNode) node; Node node = buckets[i];
if (i == wn.getId()) // It looks like the first node in the bucket is always
// a sentinel
Node cur = node.getNext();
while (cur != node)
{ {
return (int) wn.getHash(); WidgetNode wn = (WidgetNode) cur;
if (groupId == wn.getId())
{
return (int) wn.getHash();
}
cur = cur.getNext();
} }
} }
return -1; return -1;
} }