RealtimeClockLogger(RealtimeClockController c) { log = new ArrayList<>(); clock = c; clock.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { log.add(LogEntry.create(clock.getCurrentTime(), clock.getCurrentTime() + clock.getTickLength(), clock.getClockMode(), e.getEventType())); } }, SWITCH_TO_REAL_TIME, SWITCH_TO_SIM_TIME, STARTED, STOPPED); }
RtSolverModel(RealtimeClockController c, PDPRoadModel rm, PDPModel pm, Mode m, int threads, boolean threadGrouping) { clock = c; roadModel = rm; pdpModel = pm; manager = new SimSolversManager(); executor = Optional.absent(); mode = m; threadGroupingEnabled = threadGrouping; threadPoolSize = threads; receivedEvents = Collections.synchronizedList(new ArrayList<Event>()); clock.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event event) { manager.checkExceptions(); shutdown(); } }, ClockEventType.STOPPED); pdpModel.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { manager.checkExceptions(); LOGGER.debug("new parcel -> switch to real time"); clock.switchToRealTime(); } }, PDPModelEventType.NEW_PARCEL); initExecutor(); }
TimeTracker(RealtimeClockController c, boolean debugPrinting) { clock = c; beforeTimeStamps = new ArrayList<>(); afterTimeStamps = new ArrayList<>(); simTimeLapses = new ArrayList<>(); clockModes = new ArrayList<>(); if (debugPrinting) { clock.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { final List<Double> beforeDurations = interArrivalTimes(beforeTimeStamps); final List<Double> afterDurations = interArrivalTimes(afterTimeStamps); for (int i = 0; i < simTimeLapses.size(); i++) { if (i > 0) { System.out.printf("\t %1.3f \t %1.3f\n", beforeDurations.get(i - 1), afterDurations.get(i - 1)); } System.out.println(simTimeLapses.get(i).lowerEndpoint() + "\t\t\t" + clockModes.get(i)); } } }, ClockEventType.STOPPED); } }
/** * Test with two agents using a solver at the same time. */ @Test public void twoSimultaneousComputationsTest() { final RealtimeClockController clock = (RealtimeClockController) sim.getModelProvider() .getModel(TimeModel.class); final List<LogEntry> log = new ArrayList<>(); clock.getEventAPI().addListener(new Listener() { @Override public void handleEvent(Event e) { log.add(logEntry(clock.getCurrentTime(), e.getEventType())); } }, RtClockEventType.values()); sim.start(); assertThat(log.get(0)).isEqualTo(logEntry(0, SWITCH_TO_SIM_TIME)); assertThat(log.get(1)).isEqualTo(logEntry(200, SWITCH_TO_REAL_TIME)); assertThat(log.get(2).eventType()).isEqualTo(SWITCH_TO_SIM_TIME); assertThat(log.get(2).time()).isIn(ImmutableSet.of(500L, 600L)); assertThat(log.get(3)).isEqualTo(logEntry(1000, SWITCH_TO_REAL_TIME)); assertThat(log.get(4).eventType()).isEqualTo(SWITCH_TO_SIM_TIME); assertThat(log.get(4).time()).isIn(ImmutableSet.of(1300L, 1400L)); assertThat(log.get(5)).isEqualTo(logEntry(3000, SWITCH_TO_REAL_TIME)); }