public static Frame makeFrameTree(AtomicLong frameId, String path, long startMillis, long durationMillis, int depth, int childrenPerFrame, TestFrameCreator creator) {
long childDuration = (durationMillis / childrenPerFrame) - 1;
if (depth > 0 && childDuration > 0L && childrenPerFrame > 0) {
List<Frame> children = new LinkedList<Frame>();
for (int i = 0; i < childrenPerFrame; i++) {
Frame child = makeFrameTree(frameId, path, startMillis + (i * childDuration), childDuration, depth - 1, childrenPerFrame, creator);
children.add(child);
}
return creator.makeFrame(FrameId.valueOf(frameId.incrementAndGet()), path, startMillis, startMillis + durationMillis, children);
} else {
return creator.makeFrame(FrameId.valueOf(frameId.incrementAndGet()), path, startMillis, startMillis + ((durationMillis > 0) ? durationMillis : 1), Collections.<Frame>emptyList());
}
}
}