/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.backend.java; import java.io.File; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import abs.backend.java.lib.runtime.ABSException; import abs.backend.java.lib.runtime.ABSRuntime; import abs.backend.java.lib.types.ABSValue; import abs.backend.java.observing.COGView; import abs.backend.java.observing.FutView; import abs.backend.java.observing.GuardView; import abs.backend.java.observing.ObjectCreationObserver; import abs.backend.java.observing.ObjectView; import abs.backend.java.observing.SystemObserver; import abs.backend.java.observing.TaskObserver; import abs.backend.java.observing.TaskSchedulerObserver; import abs.backend.java.observing.TaskStackFrameView; import abs.backend.java.observing.TaskView; import abs.backend.java.scheduling.ScheduleAction; import abs.backend.java.scheduling.ScheduleOptions; import abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo; import abs.backend.java.scheduling.TaskScheduler; import abs.backend.java.scheduling.TotalSchedulingStrategy; public class RuntimeUsageTest implements SystemObserver, ObjectCreationObserver, TaskSchedulerObserver, TaskObserver { String name; RuntimeUsageTest(String n) { name = n; } class TestScheduler implements TotalSchedulingStrategy { private ABSRuntime runtime; private final AtomicInteger counter = new AtomicInteger(); public TestScheduler(ABSRuntime r) { this.runtime = r; } @Override public ScheduleAction choose(ScheduleOptions options) { int i = counter.incrementAndGet(); if (i == 5) { System.out.println("Terminating system "+name); runtime.shutdown(); } return options.allOptions().get(0); } @Override public TaskInfo schedule(TaskScheduler scheduler, List<TaskInfo> scheduableTasks) { return scheduableTasks.get(0); } } /** * @param args */ public static void main(String[] args) { try { for (int i = 0; i < 2; i++) { RuntimeUsageTest t = new RuntimeUsageTest("System "+i); ABSRuntime r = new ABSRuntime(); r.addSystemObserver(t); r.setTotalSchedulingStrategy(t.getScheduler(r)); r.enableDebugging(true); r.start(new File("javatest"), "LeaderElection.Main"); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } private TotalSchedulingStrategy getScheduler(ABSRuntime r) { return new TestScheduler(r); } @Override public void systemStarted() { System.out.println(name+" started"); } @Override public void newCOGCreated(COGView cog, ObjectView initialObject) { System.out.println(name+": created cog "+cog.getID()); objectCreated(initialObject); cog.registerObjectCreationListener(this); cog.getScheduler().registerTaskSchedulerObserver(this); } @Override public void objectCreated(ObjectView o) { System.out.println(name+": created object "+o.getID()); } @Override public void objectInitialized(ObjectView o) { // TODO Auto-generated method stub } @Override public void taskCreated(TaskView task) { System.out.println(name+": created task "+task.getID()); task.registerTaskListener(this); } @Override public void taskReady(TaskView view) { // TODO Auto-generated method stub } @Override public void taskResumed(TaskView runningTask, GuardView view) { // TODO Auto-generated method stub } @Override public void taskSuspended(TaskView task, GuardView guard) { // TODO Auto-generated method stub } @Override public void taskStarted(TaskView task) { // TODO Auto-generated method stub } @Override public void taskFinished(TaskView task) { // TODO Auto-generated method stub } @Override public void taskBlockedOnFuture(TaskView task, FutView fut) { // TODO Auto-generated method stub } @Override public void taskRunningAfterWaiting(TaskView view, FutView fut) { // TODO Auto-generated method stub } @Override public void taskStep(TaskView task, String fileName, int line) { // TODO Auto-generated method stub } @Override public void taskDeadlocked(TaskView task) { // TODO Auto-generated method stub } @Override public void stackFrameCreated(TaskView task, TaskStackFrameView stackFrame) { System.out.println(name+": new stack frame created"); } @Override public void localVariableChanged(TaskStackFrameView stackFrame, String n, ABSValue v) { System.out.println(name+":task "+stackFrame.getStack().getTask().getID()+": local variable "+n+" = "+v); } @Override public void systemFinished() { System.out.println(name+" system finished"); } @Override public void systemError(ABSException e) { // TODO Auto-generated method stub } @Override public void stackFrameRemoved(TaskView task, TaskStackFrameView oldFrame) { // TODO Auto-generated method stub } }