package net.tuis.ubench; /** * Simple execution model that runs 1 iteration from each task, then repeats, * until all tasks are complete. * * @author rolf * */ class InterleavedExecutionModel implements TaskExecutionModel { @Override public UStats[] executeTasks(String suite, TaskRunner...tasks) { UStats[] results = new UStats[tasks.length]; boolean allcomplete = false; boolean[] complete = new boolean[tasks.length]; while (!allcomplete) { for (int i = 0; i < tasks.length; i++) { if (!complete[i] && tasks[i].invoke()) { complete[i] = true; allcomplete = true; for (int j = 0; allcomplete && j < complete.length; j++) { if (!complete[j]) { allcomplete = false; } } } } } for (int i = 0; i < tasks.length; i++) { results[i] = tasks[i].collect(suite); } return results; } }