"Profiler is not enabled, no data has been collected.");
return;
}
LinkedList<Node> stack = new LinkedList<Node>();
Node rootNode = new Node(null);
stack.add(rootNode);
JsArray<GwtStatsEvent> gwtStatsEvents = getGwtStatsEvents();
if (gwtStatsEvents.length() == 0) {
getLogger()
.warning(
"No profiling events recorded, this might happen if another __gwtStatsEvent handler is installed.");
return;
}
for (int i = 0; i < gwtStatsEvents.length(); i++) {
GwtStatsEvent gwtStatsEvent = gwtStatsEvents.get(i);
String eventName = gwtStatsEvent.getEventName();
String type = gwtStatsEvent.getType();
boolean isBeginEvent = "begin".equals(type);
Node stackTop = stack.getLast();
boolean inEvent = eventName.equals(stackTop.getName())
&& !isBeginEvent;
if (!inEvent && stack.size() >= 2
&& eventName.equals(stack.get(stack.size() - 2).getName())
&& !isBeginEvent) {
// back out of sub event
stackTop.leave(gwtStatsEvent.getMillis());
stack.removeLast();
stackTop = stack.getLast();
inEvent = true;
}
if (type.equals("end")) {
if (!inEvent) {
getLogger().severe(
"Got end event for " + eventName
+ " but is currently in "
+ stackTop.getName());
return;
}
Node previousStackTop = stack.removeLast();
previousStackTop.leave(gwtStatsEvent.getMillis());
} else {
if (!inEvent) {
stackTop = stackTop.enterChild(eventName,
gwtStatsEvent.getMillis());
stack.add(stackTop);