From c06c76d296cf99e17ddfb37559166ff102e0ad0a Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 27 Oct 2025 21:01:10 -0400 Subject: [PATCH] Moved more packing logic to asset thread to prevent ANRs --- core/assets/maps/hidden-serpulo/0.msav | Bin 22812 -> 65392 bytes core/src/mindustry/core/UI.java | 3 +- .../src/mindustry/maps/SectorSubmissions.java | 2 +- core/src/mindustry/mod/Mods.java | 347 +++++++++--------- 4 files changed, 186 insertions(+), 166 deletions(-) diff --git a/core/assets/maps/hidden-serpulo/0.msav b/core/assets/maps/hidden-serpulo/0.msav index 6dec7ac8008075c74f213e53894b1d86ffa356d3..4437244046ee0a4ea2ffc3519cd258ff923c37b9 100644 GIT binary patch literal 65392 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 literal 22812 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 diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 124e9ce07d..58f4dfa5ab 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -25,6 +25,7 @@ import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; +import mindustry.mod.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; import mindustry.ui.fragments.*; @@ -147,7 +148,7 @@ public class UI implements ApplicationListener, Loadable{ @Override public Seq getDependencies(){ - return Seq.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", Font.class), new AssetDescriptor<>("default", Font.class)); + return Seq.with(new AssetDescriptor<>(Control.class), new AssetDescriptor<>("outline", Font.class), new AssetDescriptor<>("default", Font.class), new AssetDescriptor<>(Mods.class)); } @Override diff --git a/core/src/mindustry/maps/SectorSubmissions.java b/core/src/mindustry/maps/SectorSubmissions.java index 9a62e0e287..67db33f168 100644 --- a/core/src/mindustry/maps/SectorSubmissions.java +++ b/core/src/mindustry/maps/SectorSubmissions.java @@ -59,7 +59,7 @@ public class SectorSubmissions{ registerSerpuloSector(133, "wpx", "https://discord.com/channels/391020510269669376/1379926871227240770/1417920499761156126"); registerSerpuloSector(185, "quad", "https://discord.com/channels/391020510269669376/1379926892181983283/1419231958336016458"); registerSerpuloSector(254, "wpx", "https://discord.com/channels/391020510269669376/1379928045577703424/1420456601667502193"); - registerSerpuloSector(0, "Jamespire", "https://discord.com/channels/391020510269669376/1379926780860698784/1418590967384117311"); + registerSerpuloSector(0, "iqtik123", "https://discord.com/channels/391020510269669376/1379926780860698784/1431356682834940115"); registerSerpuloSector(103, "enwyz", "https://discord.com/channels/391020510269669376/1379926839559979030/1429203869514207255"); registerSerpuloSector(30, "cyan", "https://discord.com/channels/391020510269669376/1379926800854945823/1423932799647481910"); diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index f356f882fd..aef65e50ec 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -40,10 +40,6 @@ public class Mods implements Loadable{ private ObjectMap> bundles = new ObjectMap<>(); private ObjectSet specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override", ".git"); - private int totalSprites; - private ObjectFloatMap textureResize = new ObjectFloatMap<>(); - private MultiPacker packer; - /** Ordered mods cache. Set to null to invalidate. */ private @Nullable Seq lastOrderedMods = new Seq<>(); @@ -144,10 +140,13 @@ public class Mods implements Loadable{ @Override public void loadAsync(){ if(!mods.contains(LoadedMod::enabled)) return; - Time.mark(); + + long startTime = Time.millis(); //TODO this should estimate sprite sizes per page - packer = new MultiPacker(); + MultiPacker packer = new MultiPacker(); + var textureResize = new ObjectFloatMap(); + int[] totalSprites = {0}; //all packing tasks to await var tasks = new Seq>(); @@ -155,11 +154,11 @@ public class Mods implements Loadable{ Seq sprites = mod.root.child("sprites").findAll(f -> f.extension().equals("png")); Seq overrides = mod.root.child("sprites-override").findAll(f -> f.extension().equals("png")); - packSprites(sprites, mod, true, tasks); - packSprites(overrides, mod, false, tasks); + packSprites(packer, sprites, mod, true, tasks, textureResize); + packSprites(packer, overrides, mod, false, tasks, textureResize); Log.debug("Packed @ images for mod '@'.", sprites.size + overrides.size, mod.meta.name); - totalSprites += sprites.size + overrides.size; + totalSprites[0] += sprites.size + overrides.size; }); for(var result : tasks){ @@ -179,7 +178,167 @@ public class Mods implements Loadable{ } } - Log.debug("Time to pack textures: @", Time.elapsed()); + Log.debug("Total sprites: @", totalSprites[0]); + + TextureFilter filter = Core.settings.getBool("linear", true) ? TextureFilter.linear : TextureFilter.nearest; + Texture[] whiteToDispose = {null}; + + class RegionEntry{ + String name; + PixmapRegion region; + int[] splits, pads; + + RegionEntry(String name, PixmapRegion region, int[] splits, int[] pads){ + this.name = name; + this.region = region; + this.splits = splits; + this.pads = pads; + } + } + + Seq[] entries = new Seq[PageType.all.length]; + for(int i = 0; i < PageType.all.length; i++){ + entries[i] = new Seq<>(); + } + + ObjectMap pageTypes = ObjectMap.of( + Core.atlas.find("white").texture, PageType.main, + Core.atlas.find("stone1").texture, PageType.environment, + Core.atlas.find("whiteui").texture, PageType.ui, + Core.atlas.find("rubble-1-0").texture, PageType.rubble + ); + + for(AtlasRegion region : Core.atlas.getRegions()){ + PageType type = pageTypes.get(region.texture, PageType.main); + + if(!packer.has(type, region.name)){ + entries[type.ordinal()].add(new RegionEntry(region.name, Core.atlas.getPixmap(region), region.splits, region.pads)); + } + } + + //sort each page type by size first, for optimal packing + for(int i = 0; i < PageType.all.length; i++){ + var rects = entries[i]; + var type = PageType.all[i]; + //TODO is this in reverse order? + rects.sort(Structs.comparingInt(o -> -Math.max(o.region.width, o.region.height))); + + for(var entry : rects){ + packer.add(type, entry.name, entry.region, entry.splits, entry.pads); + } + } + + waitForMain(() -> { + Core.atlas.dispose(); + + //dead shadow-atlas for getting regions, but not pixmaps + var shadow = Core.atlas; + //dummy texture atlas that returns the 'shadow' regions; used for mod loading + Core.atlas = new TextureAtlas(){ + boolean foundWhite; + AtlasRegion whiteRegion; + + { + //needed for the correct operation of the found() method in the TextureRegion + error = shadow.find("error"); + } + + @Override + public AtlasRegion white(){ + if(Core.app.isOnMainThread() && !foundWhite){ + Pixmap pixmap = Pixmaps.blankPixmap(); + Texture tex = new Texture(pixmap); + whiteToDispose[0] = tex; + return whiteRegion = new AtlasRegion(tex, 0, 0, 1, 1); + } + return super.white(); + } + + @Override + public AtlasRegion find(String name){ + var base = packer.get(name); + + if(base != null){ + var reg = new AtlasRegion(shadow.find(name).texture, base.x, base.y, base.width, base.height); + reg.name = name; + reg.pixmapRegion = base; + return reg; + } + + return shadow.find(name); + } + + @Override + public boolean isFound(TextureRegion region){ + return region != shadow.find("error"); + } + + @Override + public TextureRegion find(String name, TextureRegion def){ + return !has(name) ? def : find(name); + } + + @Override + public boolean has(String s){ + return shadow.has(s) || packer.get(s) != null; + } + + //return the *actual* pixmap regions, not the disposed ones. + @Override + public PixmapRegion getPixmap(AtlasRegion region){ + PixmapRegion out = packer.get(region.name); + //this should not happen in normal situations + if(out == null) return packer.get("error"); + return out; + } + }; + }); + + //generate new icons + for(Seq arr : content.getContentMap()){ + arr.each(c -> { + if(c instanceof UnlockableContent u && c.minfo.mod != null){ + u.load(); + u.loadIcon(); + if(u.generateIcons && !c.minfo.mod.meta.pregenerated){ + u.createIcons(packer); + } + } + }); + } + + waitForMain(() -> { + if(whiteToDispose[0] != null){ + whiteToDispose[0].dispose(); + } + + //replace old atlas data + Core.atlas = packer.flush(filter, new TextureAtlas(){ + + @Override + public PixmapRegion getPixmap(AtlasRegion region){ + var other = super.getPixmap(region); + if(other.pixmap.isDisposed()){ + throw new RuntimeException("Calling getPixmap outside of createIcons is not supported!"); + } + + return other; + } + }); + + textureResize.each(e -> Core.atlas.find(e.key).scale = e.value); + + Core.atlas.setErrorRegion("error"); + Log.debug("Total pages: @", Core.atlas.getTextures().size); + + packer.printStats(); + + Events.fire(new AtlasPackEvent()); + + packer.dispose(); + + Log.debug("Total time to pack and generate sprites: @ms", Time.timeSinceMillis(startTime)); + }); } private void loadIcons(){ @@ -200,7 +359,7 @@ public class Mods implements Loadable{ } } - private void packSprites(Seq sprites, LoadedMod mod, boolean prefix, Seq> tasks){ + private void packSprites(MultiPacker packer, Seq sprites, LoadedMod mod, boolean prefix, Seq> tasks, ObjectFloatMap textureResize){ boolean bleed = Core.settings.getBool("linear", true) && !mod.meta.pregenerated; float textureScale = mod.meta.texturescale; @@ -242,162 +401,22 @@ public class Mods implements Loadable{ } } + void waitForMain(Runnable run){ + CountDownLatch latch = new CountDownLatch(1); + Core.app.post(() -> { + run.run(); + latch.countDown(); + }); + try{ + latch.await(); + }catch(InterruptedException e){ + throw new RuntimeException(e); + } + } + @Override public void loadSync(){ loadIcons(); - - if(packer == null) return; - Time.mark(); - - //get textures packed - if(totalSprites > 0){ - - class RegionEntry{ - String name; - PixmapRegion region; - int[] splits, pads; - - RegionEntry(String name, PixmapRegion region, int[] splits, int[] pads){ - this.name = name; - this.region = region; - this.splits = splits; - this.pads = pads; - } - } - - Seq[] entries = new Seq[PageType.all.length]; - for(int i = 0; i < PageType.all.length; i++){ - entries[i] = new Seq<>(); - } - - ObjectMap pageTypes = ObjectMap.of( - Core.atlas.find("white").texture, PageType.main, - Core.atlas.find("stone1").texture, PageType.environment, - Core.atlas.find("whiteui").texture, PageType.ui, - Core.atlas.find("rubble-1-0").texture, PageType.rubble - ); - - for(AtlasRegion region : Core.atlas.getRegions()){ - PageType type = pageTypes.get(region.texture, PageType.main); - - if(!packer.has(type, region.name)){ - entries[type.ordinal()].add(new RegionEntry(region.name, Core.atlas.getPixmap(region), region.splits, region.pads)); - } - } - - //sort each page type by size first, for optimal packing - for(int i = 0; i < PageType.all.length; i++){ - var rects = entries[i]; - var type = PageType.all[i]; - //TODO is this in reverse order? - rects.sort(Structs.comparingInt(o -> -Math.max(o.region.width, o.region.height))); - - for(var entry : rects){ - packer.add(type, entry.name, entry.region, entry.splits, entry.pads); - } - } - - Core.atlas.dispose(); - - //dead shadow-atlas for getting regions, but not pixmaps - var shadow = Core.atlas; - //dummy texture atlas that returns the 'shadow' regions; used for mod loading - Core.atlas = new TextureAtlas(){ - { - //needed for the correct operation of the found() method in the TextureRegion - error = shadow.find("error"); - } - - @Override - public AtlasRegion find(String name){ - var base = packer.get(name); - - if(base != null){ - var reg = new AtlasRegion(shadow.find(name).texture, base.x, base.y, base.width, base.height); - reg.name = name; - reg.pixmapRegion = base; - return reg; - } - - return shadow.find(name); - } - - @Override - public boolean isFound(TextureRegion region){ - return region != shadow.find("error"); - } - - @Override - public TextureRegion find(String name, TextureRegion def){ - return !has(name) ? def : find(name); - } - - @Override - public boolean has(String s){ - return shadow.has(s) || packer.get(s) != null; - } - - //return the *actual* pixmap regions, not the disposed ones. - @Override - public PixmapRegion getPixmap(AtlasRegion region){ - PixmapRegion out = packer.get(region.name); - //this should not happen in normal situations - if(out == null) return packer.get("error"); - return out; - } - }; - - TextureFilter filter = Core.settings.getBool("linear", true) ? TextureFilter.linear : TextureFilter.nearest; - - Time.mark(); - //generate new icons - for(Seq arr : content.getContentMap()){ - arr.each(c -> { - //TODO this can be done in parallel - if(c instanceof UnlockableContent u && c.minfo.mod != null){ - u.load(); - u.loadIcon(); - if(u.generateIcons && !c.minfo.mod.meta.pregenerated){ - u.createIcons(packer); - } - } - }); - } - Log.debug("Time to generate icons: @", Time.elapsed()); - - //replace old atlas data - Core.atlas = packer.flush(filter, new TextureAtlas(){ - PixmapRegion fake = new PixmapRegion(new Pixmap(1, 1)); - boolean didWarn = false; - - @Override - public PixmapRegion getPixmap(AtlasRegion region){ - var other = super.getPixmap(region); - if(other.pixmap.isDisposed()){ - if(!didWarn){ - Log.err(new RuntimeException("Calling getPixmap outside of createIcons is not supported! This will be a crash in the future.")); - didWarn = true; - } - return fake; - } - - return other; - } - }); - - textureResize.each(e -> Core.atlas.find(e.key).scale = e.value); - - Core.atlas.setErrorRegion("error"); - Log.debug("Total pages: @", Core.atlas.getTextures().size); - - packer.printStats(); - - Events.fire(new AtlasPackEvent()); - } - - packer.dispose(); - packer = null; - Log.debug("Total time to generate & flush textures synchronously: @", Time.elapsed()); } private PageType getPage(Fi file){