From 401f1ebb3e5ef8acc6ade788f3fa59e29214fd52 Mon Sep 17 00:00:00 2001 From: talchas Date: Mon, 9 Dec 2019 22:39:38 -0800 Subject: [PATCH] Avoid quadratic behavior from rebuilding the entire crafting cache for each interface visited. Instead rebuild it at most once per tick, like cpu clusters. This is particularly important when channels are disabled, since in that case even adding a cable visits every grid node. --- .../java/appeng/me/cache/CraftingGridCache.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/appeng/me/cache/CraftingGridCache.java b/src/main/java/appeng/me/cache/CraftingGridCache.java index 7bd105ade..1ec8cbc39 100644 --- a/src/main/java/appeng/me/cache/CraftingGridCache.java +++ b/src/main/java/appeng/me/cache/CraftingGridCache.java @@ -114,6 +114,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper private IStorageGrid storageGrid; private IEnergyGrid energyGrid; private boolean updateList = false; + private boolean updatePatterns = false; public CraftingGridCache( final IGrid grid ) { @@ -138,6 +139,12 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper this.updateCPUClusters(); } + if( this.updatePatterns ) + { + this.updatePatterns = false; + this.updatePatterns(); + } + final Iterator craftingLinkIterator = this.craftingLinks.values().iterator(); while( craftingLinkIterator.hasNext() ) { @@ -185,7 +192,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper if( machine instanceof ICraftingProvider ) { this.craftingProviders.remove( machine ); - this.updatePatterns(); + this.updatePatterns = true; } } @@ -219,7 +226,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper if( machine instanceof ICraftingProvider ) { this.craftingProviders.add( (ICraftingProvider) machine ); - this.updatePatterns(); + this.updatePatterns = true; } } @@ -337,7 +344,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper @MENetworkEventSubscribe public void updateCPUClusters( final MENetworkCraftingPatternChange c ) { - this.updatePatterns(); + this.updatePatterns = true; } @Override