
org.gridkit.jvmtool.nps.parser.NpsEventAdapter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sjk-nps Show documentation
Show all versions of sjk-nps Show documentation
VisualVM snapshot support for SJK
The newest version!
package org.gridkit.jvmtool.nps.parser;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.gridkit.jvmtool.codec.stacktrace.ThreadSnapshotEventPojo;
import org.gridkit.jvmtool.event.Event;
import org.gridkit.jvmtool.event.EventMorpher;
import org.gridkit.jvmtool.event.EventReader;
import org.gridkit.jvmtool.event.MorphingEventReader;
import org.gridkit.jvmtool.nps.parser.NpsDumpTree.Node;
import org.gridkit.jvmtool.stacktrace.StackFrameArray;
import org.netbeans.lib.profiler.results.cpu.CPUResultsSnapshot;
public class NpsEventAdapter implements EventReader {
private final CPUResultsSnapshot snapshot;
private final NpsDumpTree tree;
private long begingTime;
private Iterator nextNode;
private Node lastNode = null;
private int multiplier = 0;
private ThreadSnapshotEventPojo nextEvent;
public NpsEventAdapter(CPUResultsSnapshot snapshot) {
this.snapshot = snapshot;
this.tree = new NpsDumpTree(snapshot);
this.begingTime = snapshot.getBeginTime();
this.nextNode = tree.globalList.iterator();
seek();
}
private void seek() {
nextEvent = new ThreadSnapshotEventPojo();
if (!next(nextEvent)) {
nextEvent = null;
}
}
@Override
public Iterator iterator() {
return this;
}
@Override
public boolean hasNext() {
return nextEvent != null;
}
@Override
public Event next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
Event e = nextEvent;
seek();
return e;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public EventReader morph(EventMorpher morpher) {
return new MorphingEventReader(this, morpher);
}
@Override
public Event peekNext() {
if (!hasNext()) {
throw new NoSuchElementException();
}
return nextEvent;
}
@Override
public void dispose() {
// do nothing
}
public boolean next(ThreadSnapshotEventPojo pojo) {
if (multiplier <= 0) {
while (nextNode.hasNext()) {
lastNode = nextNode.next();
multiplier = (int) lastNode.vsampleSelfCount;
if (lastNode.vsampleSelfCount > 0) {
break;
}
}
if (multiplier <= 0) {
return false;
}
}
pojo.stackTrace(new StackFrameArray(lastNode.path));
pojo.threadId(lastNode.threadId);
pojo.threadName(snapshot.getThreadNameForId(lastNode.threadId));
pojo.timestamp(begingTime);
--multiplier;
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy