Skip to content

Commit ad3e59b

Browse files
authored
Merge pull request #4 from EllanServer/codex/upstream-runtime-comparison
Optimize visual runtime and add upstream A/B validation
2 parents 165edd6 + fbcd0d5 commit ad3e59b

27 files changed

Lines changed: 5206 additions & 136 deletions

.github/workflows/upstream-runtime-comparison.yml

Lines changed: 1657 additions & 0 deletions
Large diffs are not rendered by default.

benchmark-runtime/src/main/java/com/loohp/interactionvisualizer/benchmark/runtime/RuntimeComparisonPlugin.java

Lines changed: 655 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
name: InteractionVisualizerRuntimeCompare
2+
version: '1.0'
3+
main: com.loohp.interactionvisualizer.benchmark.runtime.RuntimeComparisonPlugin
4+
api-version: '26.1'
5+
softdepend: [InteractionVisualizer]
6+
description: Disposable target-independent runtime comparison driver for GitHub Actions
7+
commands:
8+
ivcompare:
9+
description: Controls the disposable InteractionVisualizer runtime comparison
10+
permission: interactionvisualizer.runtimecompare
11+
permissions:
12+
interactionvisualizer.runtimecompare:
13+
default: op

build.gradle.kts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ val benchmarkSourceSet = sourceSets.create("benchmark") {
7979
runtimeClasspath += output + compileClasspath
8080
}
8181

82+
val runtimeComparisonSourceSet = sourceSets.create("runtimeComparison") {
83+
java.setSrcDirs(listOf("benchmark-runtime/src/main/java"))
84+
resources.setSrcDirs(listOf("benchmark-runtime/src/main/resources"))
85+
compileClasspath += configurations.compileClasspath.get()
86+
runtimeClasspath += output + compileClasspath
87+
}
88+
89+
sourceSets.test {
90+
compileClasspath += runtimeComparisonSourceSet.output
91+
runtimeClasspath += runtimeComparisonSourceSet.output
92+
}
93+
8294
val benchmarkJar = tasks.register<Jar>("benchmarkJar") {
8395
description = "Builds the standalone Paper A/B benchmark plugin (never shipped in production)."
8496
group = LifecycleBasePlugin.VERIFICATION_GROUP
@@ -90,6 +102,14 @@ val benchmarkJar = tasks.register<Jar>("benchmarkJar") {
90102
}
91103
}
92104

105+
val runtimeComparisonJar = tasks.register<Jar>("runtimeComparisonJar") {
106+
description = "Builds the target-independent Paper runtime comparison driver."
107+
group = LifecycleBasePlugin.VERIFICATION_GROUP
108+
dependsOn(runtimeComparisonSourceSet.classesTaskName)
109+
archiveClassifier = "runtime-compare"
110+
from(runtimeComparisonSourceSet.output)
111+
}
112+
93113
tasks.withType<JavaCompile>().configureEach {
94114
options.release = 25
95115
options.encoding = "UTF-8"
@@ -237,6 +257,7 @@ tasks.check {
237257
dependsOn(verifyPaperOnlyArchitecture)
238258
dependsOn(verifyCustomContentIsolation)
239259
dependsOn(testLegacyTextComponentCacheDisabled)
260+
dependsOn(runtimeComparisonJar)
240261
}
241262

242263
tasks.named<ShadowJar>("shadowJar") {

common/src/main/java/com/loohp/interactionvisualizer/InteractionVisualizer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.loohp.interactionvisualizer.managers.DisplayManager;
3535
import com.loohp.interactionvisualizer.managers.PreferenceManager;
3636
import com.loohp.interactionvisualizer.managers.PerformanceMetrics;
37+
import com.loohp.interactionvisualizer.managers.PlayerLocationManager;
3738
import com.loohp.interactionvisualizer.managers.TaskManager;
3839
import com.loohp.interactionvisualizer.managers.TileEntityManager;
3940
import com.loohp.interactionvisualizer.metrics.Charts;
@@ -45,6 +46,7 @@
4546
import com.loohp.interactionvisualizer.updater.Updater.UpdaterResponse;
4647
import com.loohp.interactionvisualizer.scheduler.Scheduler;
4748
import com.loohp.interactionvisualizer.config.SparrowConfiguration;
49+
import com.loohp.interactionvisualizer.utils.LegacyTextComponentCache;
4850
import net.kyori.adventure.text.Component;
4951
import net.kyori.adventure.text.format.NamedTextColor;
5052
import org.bukkit.Bukkit;
@@ -255,7 +257,11 @@ public void onDisable() {
255257
if (preferenceManager != null) {
256258
preferenceManager.close();
257259
}
260+
TaskManager.shutdown();
258261
DisplayManager.shutdown();
262+
TileEntityManager.shutdown();
263+
PlayerLocationManager.clearCache();
264+
LegacyTextComponentCache.invalidateAll();
259265
if (asyncExecutorManager != null) {
260266
asyncExecutorManager.close();
261267
}

common/src/main/java/com/loohp/interactionvisualizer/blocks/BeeHiveDisplay.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ public void updateBlock(Block block) {
433433

434434
Map<String, Object> map = beehiveMap.get(block);
435435

436-
org.bukkit.block.Beehive beehiveState = (org.bukkit.block.Beehive) block.getState();
436+
org.bukkit.block.Beehive beehiveState = (org.bukkit.block.Beehive) block.getState(false);
437437
org.bukkit.block.data.type.Beehive beehiveData = (org.bukkit.block.data.type.Beehive) block.getBlockData();
438438

439439
{
@@ -468,7 +468,7 @@ public boolean isActive(Location loc) {
468468

469469
public Map<String, DisplayEntity> spawnDisplayEntitys(Block block) {
470470
Map<String, DisplayEntity> map = new HashMap<>();
471-
BlockData blockData = block.getState().getBlockData();
471+
BlockData blockData = block.getBlockData();
472472
BlockFace facing = ((Directional) blockData).getFacing();
473473

474474
Location loc0 = labelLocation(block.getLocation(), facing, 0.25);

common/src/main/java/com/loohp/interactionvisualizer/blocks/BeeNestDisplay.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ public void updateBlock(Block block) {
433433

434434
Map<String, Object> map = beenestMap.get(block);
435435

436-
org.bukkit.block.Beehive beehiveState = (org.bukkit.block.Beehive) block.getState();
436+
org.bukkit.block.Beehive beehiveState = (org.bukkit.block.Beehive) block.getState(false);
437437
org.bukkit.block.data.type.Beehive beehiveData = (org.bukkit.block.data.type.Beehive) block.getBlockData();
438438

439439
{
@@ -468,7 +468,7 @@ public boolean isActive(Location loc) {
468468

469469
public Map<String, DisplayEntity> spawnDisplayEntitys(Block block) {
470470
Map<String, DisplayEntity> map = new HashMap<>();
471-
BlockData blockData = block.getState().getBlockData();
471+
BlockData blockData = block.getBlockData();
472472
BlockFace facing = ((Directional) blockData).getFacing();
473473

474474
Location loc0 = labelLocation(block.getLocation(), facing, 0.25);

common/src/main/java/com/loohp/interactionvisualizer/blocks/BlastFurnaceDisplay.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ private ScheduledTask legacyRun() {
217217
if (!block.getType().equals(Material.BLAST_FURNACE)) {
218218
return;
219219
}
220-
org.bukkit.block.BlastFurnace blastfurnace = (org.bukkit.block.BlastFurnace) block.getState();
220+
org.bukkit.block.BlastFurnace blastfurnace = (org.bukkit.block.BlastFurnace) block.getState(false);
221221

222222
{
223223
Inventory inv = blastfurnace.getInventory();
@@ -336,7 +336,7 @@ private boolean updateHybridBlock(Block block) {
336336
values.putAll(spawnDisplayEntitys(block));
337337
blastfurnaceMap.put(block, values);
338338
}
339-
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState();
339+
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState(false);
340340
return FurnaceDisplayUpdater.update(furnace, values, KEY, progressBarCharacter, emptyColor,
341341
filledColor, noFuelColor, progressBarLength, amountPending);
342342
}
@@ -628,7 +628,7 @@ public Map<String, DisplayEntity> spawnDisplayEntitys(Block block) {
628628
Map<String, DisplayEntity> map = new HashMap<>();
629629
Location origin = block.getLocation();
630630

631-
BlockData blockData = block.getState().getBlockData();
631+
BlockData blockData = block.getBlockData();
632632
BlockFace facing = ((Directional) blockData).getFacing();
633633
Location target = block.getRelative(facing).getLocation();
634634
Vector direction = target.toVector().subtract(origin.toVector()).multiply(0.7);

common/src/main/java/com/loohp/interactionvisualizer/blocks/FurnaceDisplay.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ private ScheduledTask legacyRun() {
216216
if (!isFurnace(block.getType())) {
217217
return;
218218
}
219-
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState();
219+
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState(false);
220220

221221
{
222222
Inventory inv = furnace.getInventory();
@@ -335,7 +335,7 @@ private boolean updateHybridBlock(Block block) {
335335
values.putAll(spawnDisplayEntitys(block));
336336
furnaceMap.put(block, values);
337337
}
338-
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState();
338+
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState(false);
339339
return FurnaceDisplayUpdater.update(furnace, values, KEY, progressBarCharacter, emptyColor,
340340
filledColor, noFuelColor, progressBarLength, amountPending);
341341
}
@@ -624,7 +624,7 @@ public Map<String, DisplayEntity> spawnDisplayEntitys(Block block) {
624624
Map<String, DisplayEntity> map = new HashMap<>();
625625
Location origin = block.getLocation();
626626

627-
BlockData blockData = block.getState().getBlockData();
627+
BlockData blockData = block.getBlockData();
628628
BlockFace facing = ((Directional) blockData).getFacing();
629629
Location target = block.getRelative(facing).getLocation();
630630
Vector direction = target.toVector().subtract(origin.toVector()).multiply(0.7);

common/src/main/java/com/loohp/interactionvisualizer/blocks/SmokerDisplay.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private ScheduledTask legacyRun() {
218218
if (!block.getType().equals(Material.SMOKER)) {
219219
return;
220220
}
221-
org.bukkit.block.Smoker smoker = (org.bukkit.block.Smoker) block.getState();
221+
org.bukkit.block.Smoker smoker = (org.bukkit.block.Smoker) block.getState(false);
222222

223223
{
224224
Inventory inv = smoker.getInventory();
@@ -337,7 +337,7 @@ private boolean updateHybridBlock(Block block) {
337337
values.putAll(spawnDisplayEntitys(block));
338338
smokerMap.put(block, values);
339339
}
340-
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState();
340+
org.bukkit.block.Furnace furnace = (org.bukkit.block.Furnace) block.getState(false);
341341
return FurnaceDisplayUpdater.update(furnace, values, KEY, progressBarCharacter, emptyColor,
342342
filledColor, noFuelColor, progressBarLength, amountPending);
343343
}
@@ -636,7 +636,7 @@ public Map<String, DisplayEntity> spawnDisplayEntitys(Block block) {
636636
Map<String, DisplayEntity> map = new HashMap<>();
637637
Location origin = block.getLocation();
638638

639-
BlockData blockData = block.getState().getBlockData();
639+
BlockData blockData = block.getBlockData();
640640
BlockFace facing = ((Directional) blockData).getFacing();
641641
Location target = block.getRelative(facing).getLocation();
642642
Vector direction = target.toVector().subtract(origin.toVector()).multiply(0.7);

0 commit comments

Comments
 (0)