X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FScheduler.java;h=a46c75c8722b0d3925d1696b2b6f936ce3081706;hb=11fd362678d42aed89e4bc3cd0ce18e399ae48c4;hp=2cb7892ab5242aa7492bebca5cff4d20d2b99666;hpb=f59942ab30a1632789b9d042d233b205245d506b;p=org.ibex.core.git diff --git a/src/org/xwt/Scheduler.java b/src/org/xwt/Scheduler.java index 2cb7892..a46c75c 100644 --- a/src/org/xwt/Scheduler.java +++ b/src/org/xwt/Scheduler.java @@ -8,21 +8,37 @@ import org.xwt.util.*; /** Implements cooperative multitasking */ public class Scheduler { - public static final Scheduler singleton = Platform.getScheduler(); - protected Scheduler() { } + // Public API Exposed to org.xwt ///////////////////////////////////////////////// public static abstract class Task { public abstract void perform(); } + public static void add(Task t) { singleton.runnable.append(t); } + public static void init() { singleton.run(); } + + + // API which must be supported by subclasses ///////////////////////////////////// + + protected Scheduler() { } + + /** + * INVARIANT: all scheduler implementations MUST invoke + * Surface.renderAll() after performing a Task if no tasks remain + * in the queue. A scheduler may choose to invoke + * Surface.renderAll() more often than that if it so chooses. + */ + public void run() { defaultRun(); } + + + // Default Implementation ///////////////////////////////////// protected static Queue runnable = new Queue(50); - public static void add(Task t) { singleton.runnable.append(t); } - public void run() { + private static final Scheduler singleton = Platform.getScheduler(); + public void defaultRun() { while(true) { Task t = (Task)runnable.remove(true); try { t.perform(); // FIXME: be smarter about this - for(int i=0; i