From cb7c9eee6e6742745b44ab22146c903035ff6c8a Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 29 Jul 2022 12:50:03 +0800 Subject: [PATCH] fix memory tracking computation compute the probable Texture usaga --- forge-gui-mobile/src/forge/FrameRate.java | 5 +- forge-gui-mobile/src/forge/assets/Assets.java | 96 +++++++++++++++---- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/forge-gui-mobile/src/forge/FrameRate.java b/forge-gui-mobile/src/forge/FrameRate.java index 64dc61943b5..0e32ef1193e 100644 --- a/forge-gui-mobile/src/forge/FrameRate.java +++ b/forge-gui-mobile/src/forge/FrameRate.java @@ -41,8 +41,7 @@ public class FrameRate implements Disposable{ } public void update(int loadedCardSize, float toAlloc) { - if (toAlloc > 300f) - allocT = (int) toAlloc; + allocT = (int) toAlloc; cardsLoaded = loadedCardSize; long delta = TimeUtils.timeSinceMillis(lastTimeCounted); lastTimeCounted = TimeUtils.millis(); @@ -55,7 +54,7 @@ public class FrameRate implements Disposable{ public void render() { batch.begin(); - font.draw(batch, (int)frameRate + " FPS | " + cardsLoaded + " cards re/loaded - " + allocT + " vMem", 3, Gdx.graphics.getHeight() - 3); + font.draw(batch, (int)frameRate + " FPS | " + cardsLoaded + " cards re/loaded | " + allocT + " MB", 3, Gdx.graphics.getHeight() - 3); batch.end(); } diff --git a/forge-gui-mobile/src/forge/assets/Assets.java b/forge-gui-mobile/src/forge/assets/Assets.java index b4dd5364dae..6b62a4842a7 100644 --- a/forge-gui-mobile/src/forge/assets/Assets.java +++ b/forge-gui-mobile/src/forge/assets/Assets.java @@ -44,7 +44,8 @@ public class Assets implements Disposable { public Skin skin; public BitmapFont advDefaultFont, advBigFont; private Texture defaultImage, dummy; - private TextureParameter parameter; + private TextureParameter textureParameter; + private int cGen = 0, cGenVal = 0, cFB = 0, cFBVal = 0, cTM, cTMVal = 0; public Assets() { //init titlebg fallback fallback_skins.put(0, new Texture(GuiBase.isAndroid() @@ -165,18 +166,18 @@ public class Assets implements Disposable { return tmxMap; } public TextureParameter getTextureFilter() { - if (parameter == null) - parameter = new TextureParameter(); + if (textureParameter == null) + textureParameter = new TextureParameter(); if (Forge.isTextureFilteringEnabled()) { - parameter.genMipMaps = true; - parameter.minFilter = Texture.TextureFilter.MipMapLinearLinear; - parameter.magFilter = Texture.TextureFilter.Linear; + textureParameter.genMipMaps = true; + textureParameter.minFilter = Texture.TextureFilter.MipMapLinearLinear; + textureParameter.magFilter = Texture.TextureFilter.Linear; } else { - parameter.genMipMaps = false; - parameter.minFilter = Texture.TextureFilter.Nearest; - parameter.magFilter = Texture.TextureFilter.Nearest; + textureParameter.genMipMaps = false; + textureParameter.minFilter = Texture.TextureFilter.Nearest; + textureParameter.magFilter = Texture.TextureFilter.Nearest; } - return parameter; + return textureParameter; } public Texture getDefaultImage() { if (defaultImage == null) { @@ -213,10 +214,8 @@ public class Assets implements Disposable { @SuppressWarnings("unchecked") private int calculateTextureSize(AssetManager assetManager, String fileName, Class type) { - if (memoryPerFile.containsKey(fileName)) { - return memoryPerFile.get(fileName); - } - + if (!Forge.showFPS) + return 0; Texture texture = (Texture) assetManager.get(fileName, type); TextureData textureData = texture.getTextureData(); int textureSize = textureData.getWidth() * textureData.getHeight(); @@ -236,18 +235,73 @@ public class Assets implements Disposable { textureSize *= 4; break; } - memoryPerFile.put(fileName, textureSize); - return textureSize; + int sum = memoryPerFile.values().stream().mapToInt(Integer::intValue).sum() + + calculateObjectMaps(generatedCards()) + calculateObjectMaps(fallback_skins()) + calculateObjectMaps(tmxMap()); + return sum; + } + @SuppressWarnings("unchecked") + private int calculateObjectMaps(ObjectMap objectMap) { + if (!Forge.showFPS) + return 0; + if (objectMap == null || objectMap.isEmpty()) + return 0; + if (objectMap == generatedCards) { + if (cGen == objectMap.size) + return cGenVal; + else + cGen = objectMap.size; + } + if (objectMap == tmxMap) { + if (cTM == objectMap.size) + return cTMVal; + else + cTM = objectMap.size; + } + if (objectMap == fallback_skins) { + if (cFB == objectMap.size) + return cFBVal; + else + cFB = objectMap.size; + } + int sum = 0; + for (Texture texture : objectMap.values()) { + TextureData textureData = texture.getTextureData(); + int textureSize = textureData.getWidth() * textureData.getHeight(); + if (Forge.isTextureFilteringEnabled()) + textureSize = textureSize + (textureSize/3); + switch (textureData.getFormat()) { + case RGB565: + textureSize *= 2; + break; + case RGB888: + textureSize *= 3; + break; + case RGBA4444: + textureSize *= 2; + break; + case RGBA8888: + textureSize *= 4; + break; + } + sum += textureSize; + } + if (objectMap == generatedCards) + cGenVal = sum; + if (objectMap == tmxMap) + cTMVal = sum; + if (objectMap == fallback_skins) + cFBVal = sum; + return sum; } @SuppressWarnings("unchecked") @Override - public synchronized void load(String fileName, Class type) { + public synchronized void load(String fileName, Class type, AssetLoaderParameters parameter) { if (type.equals(Texture.class)) { if (parameter == null) { - parameter = getTextureFilter(); + parameter = (AssetLoaderParameters) getTextureFilter(); } final AssetLoaderParameters.LoadedCallback prevCallback = parameter.loadedCallback; @@ -256,19 +310,19 @@ public class Assets implements Disposable { prevCallback.finishedLoading(assetManager, fileName1, type1); } - currentMemory += calculateTextureSize(assetManager, fileName1, type1); + currentMemory = calculateTextureSize(assetManager, fileName1, type1); }; } - super.load(fileName, type); + super.load(fileName, type, parameter); } @Override public synchronized void unload(String fileName) { super.unload(fileName); if (memoryPerFile.containsKey(fileName)) { - currentMemory -= memoryPerFile.get(fileName); + memoryPerFile.remove(fileName); } }