Fixed concurrency issue with loading queue in main loop.
This commit is contained in:
@@ -86,7 +86,7 @@ public class DeferredAudio extends BaseDeferredResource {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadResource(String resource) throws IOException
|
protected synchronized final void loadResource(String resource) throws IOException
|
||||||
{
|
{
|
||||||
final String ext = FileUtils.getExtension(resource);
|
final String ext = FileUtils.getExtension(resource);
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ public abstract class BaseApp implements AppAccess {
|
|||||||
*/
|
*/
|
||||||
public void start()
|
public void start()
|
||||||
{
|
{
|
||||||
Log.i("Commencing initialization sequence...");
|
|
||||||
|
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
@@ -70,7 +69,7 @@ public abstract class BaseApp implements AppAccess {
|
|||||||
org.newdawn.slick.util.Log.setLogSystem(new SlickLogRedirector(log));
|
org.newdawn.slick.util.Log.setLogSystem(new SlickLogRedirector(log));
|
||||||
|
|
||||||
// only here it makes sense to log.
|
// only here it makes sense to log.
|
||||||
Log.f1("Initializing subsystems...");
|
Log.i("=== Commencing initialization sequence ===");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Event bus
|
* Event bus
|
||||||
@@ -128,7 +127,7 @@ public abstract class BaseApp implements AppAccess {
|
|||||||
initScreens(screenRegistry);
|
initScreens(screenRegistry);
|
||||||
|
|
||||||
postInit();
|
postInit();
|
||||||
Log.i("Initialized sequence completed.");
|
Log.i("=== Initialized sequence completed ===");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,8 +39,28 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.L
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadResource(DeferredResource resource)
|
public void loadResource(final DeferredResource resource)
|
||||||
{
|
{
|
||||||
|
if (resource.isLoaded()) return;
|
||||||
|
if (resource instanceof NullResource) return;
|
||||||
|
|
||||||
|
// textures & fonts needs to be loaded in main thread
|
||||||
|
if (resource.getClass().isAnnotationPresent(MustLoadInMainThread.class)) {
|
||||||
|
|
||||||
|
Log.f3("<LOADER> Delegating to main thread:\n " + Log.str(resource));
|
||||||
|
|
||||||
|
app.getEventBus().send(new MainLoopTaskRequest(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
resource.load();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
toLoad.add(resource);
|
toLoad.add(resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,26 +78,6 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.L
|
|||||||
|
|
||||||
if (!def.isLoaded()) {
|
if (!def.isLoaded()) {
|
||||||
|
|
||||||
// skip nulls
|
|
||||||
if (def instanceof NullResource) continue;
|
|
||||||
|
|
||||||
// textures & fonts needs to be loaded in main thread
|
|
||||||
if (def.getClass().isAnnotationPresent(MustLoadInMainThread.class)) {
|
|
||||||
|
|
||||||
Log.f3("<LOADER> Delegating to main thread:\n " + Log.str(def));
|
|
||||||
|
|
||||||
app.getEventBus().send(new MainLoopTaskRequest(new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
def.load();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Log.f3("<LOADER> Loading async:\n " + Log.str(def));
|
Log.f3("<LOADER> Loading async:\n " + Log.str(def));
|
||||||
|
|
||||||
exs.submit(new Runnable() {
|
exs.submit(new Runnable() {
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ public abstract class BaseDeferredResource implements DeferredResource, Destroya
|
|||||||
{
|
{
|
||||||
if (loadAttempted) {
|
if (loadAttempted) {
|
||||||
Log.w("<RES> Already loaded @ load():\n " + this);
|
Log.w("<RES> Already loaded @ load():\n " + this);
|
||||||
return;
|
(new IllegalStateException()).printStackTrace();
|
||||||
|
//return;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadAttempted = true;
|
loadAttempted = true;
|
||||||
@@ -55,7 +56,7 @@ public abstract class BaseDeferredResource implements DeferredResource, Destroya
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isLoaded()
|
public synchronized final boolean isLoaded()
|
||||||
{
|
{
|
||||||
if (isNull()) return false;
|
if (isNull()) return false;
|
||||||
|
|
||||||
@@ -76,6 +77,7 @@ public abstract class BaseDeferredResource implements DeferredResource, Destroya
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Log.w("<RES> First use, not loaded yet - loading directly\n " + this);
|
Log.w("<RES> First use, not loaded yet - loading directly\n " + this);
|
||||||
|
(new IllegalStateException()).printStackTrace();
|
||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class DeferredFont extends BaseDeferredResource implements GLFont {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected final void loadResource(String path) throws FontFormatException, IOException
|
protected synchronized final void loadResource(String path) throws FontFormatException, IOException
|
||||||
{
|
{
|
||||||
final Font awtFont = getAwtFont(path, (float) size, style.numval);
|
final Font awtFont = getAwtFont(path, (float) size, style.numval);
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class DeferredTexture extends BaseDeferredResource implements FilteredTex
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void loadResource(String path)
|
protected synchronized void loadResource(String path)
|
||||||
{
|
{
|
||||||
backingTexture = Render.loadTexture(path);
|
backingTexture = Render.loadTexture(path);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ public class LogInstance {
|
|||||||
logger.setUseParentHandlers(false);
|
logger.setUseParentHandlers(false);
|
||||||
logger.setLevel(Level.ALL);
|
logger.setLevel(Level.ALL);
|
||||||
final String stamp = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).format(new Date());
|
final String stamp = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).format(new Date());
|
||||||
i("= Logger \"" + name + "\" initialized =\n" + stamp);
|
i("Logger \"" + name + "\" initialized.\n" + stamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user