package org.andengine.entity.util;
import org.andengine.BuildConfig;
import org.andengine.engine.handler.IUpdateHandler;
import org.andengine.opengl.texture.TextureManager;
import org.andengine.util.debug.Debug;
import org.andengine.util.debug.Debug.DebugLevel;
/**
* (c) 2013 Nicolas Gramlich
*
* @author Arturo GutiƩrrez
* @author Nicolas Gramlich
* @since 22:07:46 - 03.03.2013
*/
public class TextureMemoryLogger implements IUpdateHandler {
// ===========================================================
// Constants
// ===========================================================
private static final float AVERAGE_DURATION_DEFAULT = 5;
// ===========================================================
// Fields
// ===========================================================
private final TextureManager mTextureManager;
private final float mAverageDuration;
private float mSecondsElapsed;
private int mTextureMemoryUsedMax;
private int mTexturesLoadedCountMax;
private final DebugLevel mDebugLevel;
// ===========================================================
// Constructors
// ===========================================================
public TextureMemoryLogger(final TextureManager pTextureManager) {
this(pTextureManager, DebugLevel.DEBUG);
}
public TextureMemoryLogger(final TextureManager pTextureManager, final DebugLevel pDebugLevel) {
this(pTextureManager, TextureMemoryLogger.AVERAGE_DURATION_DEFAULT);
}
public TextureMemoryLogger(final TextureManager pTextureManager, final float pAverageDuration) {
this(pTextureManager, pAverageDuration, DebugLevel.DEBUG);
}
public TextureMemoryLogger(final TextureManager pTextureManager, final float pAverageDuration, final DebugLevel pDebugLevel) {
this.mTextureManager = pTextureManager;
this.mAverageDuration = pAverageDuration;
this.mDebugLevel = pDebugLevel;
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onUpdate(final float pSecondsElapsed) {
this.mSecondsElapsed += pSecondsElapsed;
if (this.mSecondsElapsed > this.mAverageDuration) {
this.onHandleAverageDurationElapsed();
this.mSecondsElapsed -= this.mAverageDuration;
}
}
@Override
public void reset() {
this.mSecondsElapsed = 0;
}
// ===========================================================
// Methods
// ===========================================================
private void onHandleAverageDurationElapsed() {
if (BuildConfig.DEBUG) {
final int texturesLoadedCount = this.mTextureManager.getTexturesLoadedCount();
final int textureMemoryUsed = this.mTextureManager.getTextureMemoryUsed();
this.mTexturesLoadedCountMax = Math.max(texturesLoadedCount, this.mTexturesLoadedCountMax);
this.mTextureMemoryUsedMax = Math.max(textureMemoryUsed, this.mTextureMemoryUsedMax);
Debug.log(this.mDebugLevel, String.format("MEM: %d kB in %d textures (MAX: %d kB in %d textures)", textureMemoryUsed, texturesLoadedCount, this.mTextureMemoryUsedMax, this.mTexturesLoadedCountMax));
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}