From b1010d78b357fb5b9f8707d1939051093da57ac9 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 28 Jun 2017 12:45:42 -0400 Subject: [PATCH] runelite-client: add cache for item compositions in grounditems plugin --- .../grounditems/GroundItemsOverlay.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 24d1662020..713e9a3539 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -24,6 +24,9 @@ */ package net.runelite.client.plugins.grounditems; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import java.awt.Color; import java.awt.Dimension; import java.awt.FontMetrics; @@ -34,6 +37,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Arrays; +import java.util.concurrent.TimeUnit; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Item; @@ -43,7 +47,6 @@ import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.api.Region; import net.runelite.api.Tile; -import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.ItemManager; import net.runelite.client.RuneLite; @@ -85,6 +88,17 @@ public class GroundItemsOverlay extends Overlay private final GroundItemsConfig config; private final ItemManager itemManager = RuneLite.getRunelite().getItemManager(); private final StringBuilder itemStringBuilder = new StringBuilder(); + private final LoadingCache itemCache = CacheBuilder.newBuilder() + .maximumSize(1024L) + .expireAfterAccess(1, TimeUnit.MINUTES) + .build(new CacheLoader() + { + @Override + public ItemComposition load(Integer key) throws Exception + { + return client.getItemDefinition(key); + } + }); public GroundItemsOverlay(GroundItems plugin) { @@ -161,8 +175,7 @@ public class GroundItemsOverlay extends Overlay Item item = (Item) current; int itemId = item.getId(); int itemQuantity = item.getQuantity(); - // Item does not support getting the name, so we need to get the ItemComposition instead - ItemComposition itemDefinition = client.getItemDefinition(itemId); + ItemComposition itemDefinition = itemCache.getUnchecked(itemId); Integer currentQuantity = items.get(itemId); if (!hiddenItems.contains(itemDefinition.getName())) @@ -188,7 +201,7 @@ public class GroundItemsOverlay extends Overlay { int itemId = itemIds.get(i); int quantity = items.get(itemId); - ItemComposition item = client.getItemDefinition(itemId); + ItemComposition item = itemCache.getUnchecked(itemId); if (item == null) {