From c7f8f4249ecbc32d5c2e4abd93601e3b69b23b59 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