aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2023-08-09 04:05:31 +0800
committershedaniel <daniel@shedaniel.me>2023-08-09 04:05:31 +0800
commit3dbafdf0250d4837f8028e6c636606d9fcb35836 (patch)
tree693f9699c9e433480d45c90ceab7b42f902f20cb
parent9462ba3450c2f897593c95b07da22ae2f0e19d0b (diff)
parentcacb4b646a0a96869cdb69dd08deb9d9900b35fa (diff)
downloadRoughlyEnoughItems-3dbafdf0250d4837f8028e6c636606d9fcb35836.tar.gz
RoughlyEnoughItems-3dbafdf0250d4837f8028e6c636606d9fcb35836.tar.bz2
RoughlyEnoughItems-3dbafdf0250d4837f8028e6c636606d9fcb35836.zip
Merge remote-tracking branch 'shedaniel/9.x-1.19' into 11.x-1.19.4
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/registry/ParentReloadable.java14
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/common/registry/Reloadable.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java20
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplaysHolderImpl.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java30
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java14
9 files changed, 82 insertions, 26 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/registry/ParentReloadable.java b/api/src/main/java/me/shedaniel/rei/api/common/registry/ParentReloadable.java
index eef0ae964..f128673ef 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/registry/ParentReloadable.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/registry/ParentReloadable.java
@@ -61,6 +61,20 @@ public interface ParentReloadable<P extends REIPlugin<?>> extends Reloadable<P>
}
@Override
+ default void preStage(ReloadStage stage) {
+ for (Reloadable<P> reloadable : getReloadables()) {
+ reloadable.preStage(stage);
+ }
+ }
+
+ @Override
+ default void postStage(ReloadStage stage) {
+ for (Reloadable<P> reloadable : getReloadables()) {
+ reloadable.postStage(stage);
+ }
+ }
+
+ @Override
default void beforeReloadable(ReloadStage stage, Reloadable<P> other) {
for (Reloadable<P> reloadable : getReloadables()) {
reloadable.beforeReloadable(stage, other);
diff --git a/api/src/main/java/me/shedaniel/rei/api/common/registry/Reloadable.java b/api/src/main/java/me/shedaniel/rei/api/common/registry/Reloadable.java
index 100a054d6..62d0df7b7 100644
--- a/api/src/main/java/me/shedaniel/rei/api/common/registry/Reloadable.java
+++ b/api/src/main/java/me/shedaniel/rei/api/common/registry/Reloadable.java
@@ -49,6 +49,12 @@ public interface Reloadable<P extends REIPlugin<?>> {
}
@ApiStatus.Experimental
+ default void preStage(ReloadStage stage) {}
+
+ @ApiStatus.Experimental
+ default void postStage(ReloadStage stage) {}
+
+ @ApiStatus.Experimental
default void beforeReloadable(ReloadStage stage, Reloadable<P> other) {}
@ApiStatus.Experimental
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java
index 3275c9786..93624ae06 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/performance/PerformanceScreen.java
@@ -148,7 +148,7 @@ public class PerformanceScreen extends Screen {
RoughlyEnoughItemsCore.PERFORMANCE_LOGGER.getStages().forEach((stage, inner) -> {
List<PerformanceEntryImpl> entries = new ArrayList<>();
inner.times().forEach((obj, time) -> {
- entries.add(new PerformanceEntryImpl(Component.literal(obj instanceof Pair ? ((Pair<REIPluginProvider<?>, REIPlugin<?>>) obj).getFirst().getPluginProviderName() : Objects.toString(obj)), time));
+ entries.add(new PerformanceEntryImpl(Component.literal(obj instanceof Pair ? getNameOfPlugin(obj) : Objects.toString(obj)), time));
});
Collection<Long> values = inner.times().values();
long separateTime;
@@ -166,6 +166,24 @@ public class PerformanceScreen extends Screen {
addWidget(list);
}
+ private String getNameOfPlugin(Object obj) {
+ Pair<REIPluginProvider<?>, REIPlugin<?>> pair = (Pair<REIPluginProvider<?>, REIPlugin<?>>) obj;
+ REIPluginProvider<?> provider = pair.getFirst();
+ REIPlugin<?> plugin = pair.getSecond();
+
+ String providerName = provider.getPluginProviderName();
+
+ if (provider.provide().size() >= 1) {
+ String pluginName = plugin.getPluginProviderName();
+
+ if (!providerName.equals(pluginName)) {
+ providerName = pluginName + " of " + providerName;
+ }
+ }
+
+ return providerName;
+ }
+
@Override
public void render(PoseStack poses, int mouseX, int mouseY, float delta) {
renderDirtBackground(poses);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java
index 1aff7f720..f8f303408 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java
@@ -39,7 +39,6 @@ import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.impl.common.InternalLogger;
import me.shedaniel.rei.impl.common.registry.RecipeManagerContextImpl;
import net.minecraft.world.item.crafting.Recipe;
-import org.apache.commons.lang3.mutable.MutableLong;
import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -53,7 +52,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi
private final List<DynamicDisplayGenerator<?>> globalDisplayGenerators = new ArrayList<>();
private final List<DisplayVisibilityPredicate> visibilityPredicates = new ArrayList<>();
private final List<DisplayFiller<?>> fillers = new ArrayList<>();
- private final MutableLong lastAddWarning = new MutableLong(-1);
+ private long lastAddWarning = -1;
private DisplaysHolder displaysHolder = new DisplaysHolderImpl(false);
public DisplayRegistryImpl() {
@@ -73,12 +72,11 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi
@Override
public void add(Display display, @Nullable Object origin) {
if (!PluginManager.areAnyReloading()) {
- if (lastAddWarning != null) {
- if (lastAddWarning.getValue() > 0 && System.currentTimeMillis() - lastAddWarning.getValue() > 5000) {
- InternalLogger.getInstance().warn("Detected runtime DisplayRegistry modification, this can be extremely dangerous!");
- }
- lastAddWarning.setValue(System.currentTimeMillis());
+ if (lastAddWarning < 0 || System.currentTimeMillis() - lastAddWarning > 5000) {
+ InternalLogger.getInstance().warn("Detected runtime DisplayRegistry modification, this can be extremely dangerous!");
+ InternalLogger.getInstance().debug("Detected runtime DisplayRegistry modification, this can be extremely dangerous!", new Throwable());
}
+ lastAddWarning = System.currentTimeMillis();
}
this.displaysHolder.add(display, origin);
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplaysHolderImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplaysHolderImpl.java
index b2bdce14d..bf09618c7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplaysHolderImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplaysHolderImpl.java
@@ -64,7 +64,7 @@ public class DisplaysHolderImpl implements DisplaysHolder {
if (list == null) {
return null;
} else {
- return ((DisplaysList) list).unmodifiableList;
+ return ((DisplaysList) list).synchronizedList;
}
}, key -> CategoryRegistry.getInstance().tryGet(key).isPresent());
this.displaysByInput = createSetMultimap();
@@ -183,12 +183,11 @@ public class DisplaysHolderImpl implements DisplaysHolder {
}
private static class DisplaysList extends ArrayList<Display> {
- private final List<Display> unmodifiableList;
private final List<Display> synchronizedList;
public DisplaysList() {
- this.synchronizedList = Collections.synchronizedList(this);
- this.unmodifiableList = Collections.unmodifiableList(synchronizedList);
+ List<Display> unmodifiableList = Collections.unmodifiableList(this);
+ this.synchronizedList = Collections.synchronizedList(unmodifiableList);
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
index 97bb8ef83..ac8454a60 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
@@ -223,6 +223,7 @@ public class ViewsImpl implements Views {
class Wrapped implements DisplaySpec {
private Display display;
private List<ResourceLocation> ids = null;
+ private final int hash = merger.hashOf(display);
public Wrapped(Display display) {
this.display = display;
@@ -238,7 +239,7 @@ public class ViewsImpl implements Views {
@Override
public int hashCode() {
- return merger.hashOf(display);
+ return hash;
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
index bd181824d..d5140f2c8 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java
@@ -231,6 +231,7 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
@Override
public void pre(ReloadStage stage) {
+ this.reloading = stage;
List<PluginWrapper<P>> plugins = new ArrayList<>(getPluginWrapped().toList());
plugins.sort(Comparator.comparingDouble(PluginWrapper<P>::getPriority).reversed());
Collections.reverse(plugins);
@@ -260,8 +261,22 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
}
});
} catch (Throwable throwable) {
+ this.reloading = null;
new RuntimeException("Failed to run pre registration").printStackTrace();
}
+ try (SectionClosable preStageAll = section(stage, "pre-stage/");
+ PerformanceLogger.Plugin perfLogger = RoughlyEnoughItemsCore.PERFORMANCE_LOGGER.stage("Pre Stage " + stage.name())) {
+ for (Reloadable<P> reloadable : reloadables) {
+ Class<?> reloadableClass = reloadable.getClass();
+ try (SectionClosable preStage = section(stage, "pre-stage/" + name(reloadableClass) + "/");
+ PerformanceLogger.Plugin.Inner inner = perfLogger.stage(name(reloadableClass))) {
+ reloadable.preStage(stage);
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ }
+ }
+ this.reloading = null;
this.reloadStopwatch.stop();
InternalLogger.getInstance().debug("========================================");
InternalLogger.getInstance().debug(name(pluginClass) + " finished pre-reload for " + stage + " in " + reloadStopwatch + ".");
@@ -270,6 +285,7 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
@Override
public void post(ReloadStage stage) {
+ this.reloading = stage;
List<PluginWrapper<P>> plugins = new ArrayList<>(getPluginWrapped().toList());
plugins.sort(Comparator.comparingDouble(PluginWrapper<P>::getPriority).reversed());
Collections.reverse(plugins);
@@ -296,8 +312,22 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager<
}
});
} catch (Throwable throwable) {
+ this.reloading = null;
new RuntimeException("Failed to run post registration").printStackTrace();
}
+ try (SectionClosable postStageAll = section(stage, "post-stage/");
+ PerformanceLogger.Plugin perfLogger = RoughlyEnoughItemsCore.PERFORMANCE_LOGGER.stage("Pre Stage " + stage.name())) {
+ for (Reloadable<P> reloadable : reloadables) {
+ Class<?> reloadableClass = reloadable.getClass();
+ try (SectionClosable postStage = section(stage, "post-stage/" + name(reloadableClass) + "/");
+ PerformanceLogger.Plugin.Inner inner = perfLogger.stage(name(reloadableClass))) {
+ reloadable.postStage(stage);
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ }
+ }
+ this.reloading = null;
this.reloadStopwatch.stop();
postStopwatch.stop();
InternalLogger.getInstance().debug("========================================");
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java
index 3d6348539..bb04d5f9e 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java
@@ -57,7 +57,7 @@ public class FilteredStacksVisibilityHandler implements DisplayVisibilityPredica
@Override
public EventResult handleDisplay(DisplayCategory<?> category, Display display) {
if (checkHiddenStacks) {
- return visible.computeBooleanIfAbsent(display, displayPredicate) ? EventResult.pass() : EventResult.interruptFalse();
+ return visible.computeIfAbsent(display, displayPredicate) ? EventResult.pass() : EventResult.interruptFalse();
}
return EventResult.pass();
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
index 539d7ab76..f579ebdad 100644
--- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
+++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/PluginStageExecutionWatcher.java
@@ -69,13 +69,10 @@ public class PluginStageExecutionWatcher implements HintProvider {
@Override
public void startReload() {
- for (ReloadStage stage : ReloadStage.values()) {
- startReload(stage);
- }
}
@Override
- public void startReload(ReloadStage stage) {
+ public void preStage(ReloadStage stage) {
synchronized (allStages) {
if (manager == PluginManager.getInstance() && stage.ordinal() == 0) {
allStages.clear();
@@ -85,14 +82,7 @@ public class PluginStageExecutionWatcher implements HintProvider {
}
@Override
- public void endReload() {
- for (ReloadStage stage : ReloadStage.values()) {
- endReload(stage);
- }
- }
-
- @Override
- public void endReload(ReloadStage stage) {
+ public void postStage(ReloadStage stage) {
synchronized (allStages) {
data().finishedStages.add(stage);
}