diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 9500cc66..11158fb2 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1958,6 +1958,7 @@ LOD emitter service LOD component that destroys far-away physics visually LOD far away models support Profiler work +Thread manager dispatching futures service diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index ba313820..4e60455c 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -119,6 +119,10 @@ public class Main { //init global variables Globals.initGlobals(); + // + //init profiler + Globals.profiler.start(); + //init scripting engine if(EngineState.EngineFlags.RUN_SCRIPTS){ Globals.engineState.threadManager.start(new LoadingThread(LoadingThreadType.SCRIPT_ENGINE)); diff --git a/src/main/java/electrosphere/engine/profiler/Profiler.java b/src/main/java/electrosphere/engine/profiler/Profiler.java index 1d36e4e2..b5ecf48e 100644 --- a/src/main/java/electrosphere/engine/profiler/Profiler.java +++ b/src/main/java/electrosphere/engine/profiler/Profiler.java @@ -29,11 +29,6 @@ public class Profiler { * Creates the profiler */ public Profiler(){ - try(MemoryStack stack = MemoryStack.stackPush()){ - PointerBuffer allocBuffer = stack.mallocPointer(1); - Remotery.rmt_CreateGlobalInstance(allocBuffer); - pointer = allocBuffer.get(); - } } /** @@ -91,6 +86,11 @@ public class Profiler { */ public void start(){ Profiler.PROFILE = true; + try(MemoryStack stack = MemoryStack.stackPush()){ + PointerBuffer allocBuffer = stack.mallocPointer(1); + Remotery.rmt_CreateGlobalInstance(allocBuffer); + pointer = allocBuffer.get(); + } } /** diff --git a/src/main/java/electrosphere/engine/threads/ThreadCounts.java b/src/main/java/electrosphere/engine/threads/ThreadCounts.java index 98f2b0dd..10142218 100644 --- a/src/main/java/electrosphere/engine/threads/ThreadCounts.java +++ b/src/main/java/electrosphere/engine/threads/ThreadCounts.java @@ -45,4 +45,9 @@ public class ThreadCounts { */ public static final int SERVER_TERRAIN_GENERATION_THREADS = 2; + /** + * Default thread count for the thread manager + */ + public static final int DEFAULT_SERVICE_THREADS = 1; + } diff --git a/src/main/java/electrosphere/engine/threads/ThreadManager.java b/src/main/java/electrosphere/engine/threads/ThreadManager.java index d70ae3de..8514cc9a 100644 --- a/src/main/java/electrosphere/engine/threads/ThreadManager.java +++ b/src/main/java/electrosphere/engine/threads/ThreadManager.java @@ -3,8 +3,10 @@ package electrosphere.engine.threads; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @@ -47,6 +49,11 @@ public class ThreadManager { */ private static List executors = new LinkedList(); + /** + * The default executor service + */ + private ExecutorService defaultService; + /** * Initializes the thread manager @@ -56,6 +63,7 @@ public class ThreadManager { activeThreads = new LinkedList(); loadingThreads = new LinkedList(); shouldKeepRunning = true; + this.defaultService = this.requestFixedThreadPool(ThreadCounts.DEFAULT_SERVICE_THREADS); } /** @@ -267,4 +275,25 @@ public class ThreadManager { return rVal; } + /** + * Dispatches a runnable to the default thread service + * @param runnable The runnable + */ + public void dispatch(Runnable runnable){ + threadLock.lock(); + this.defaultService.submit(runnable); + threadLock.unlock(); + } + + /** + * Dispatches a runnable to the default thread service + * @param runnable The runnable + */ + public Future dispatch(Callable runnable){ + threadLock.lock(); + Future rVal = this.defaultService.submit(runnable); + threadLock.unlock(); + return rVal; + } + }