public static SampleNode createSampleNode(final StackTraceElement... stackTrace) { SampleNode result = new SampleNode(1, null); SampleNode prevResult = result; for (int i = stackTrace.length - 1; i >= 0; i--) { StackTraceElement elem = stackTrace[i]; if (prevResult.subNodes == null) { prevResult.subNodes = new MethodMap<>(); } SampleNode node = new SampleNode(1, null); prevResult.subNodes.put(Methods.getMethod(elem), node); prevResult = node; } return result; }
public static SampleNode clone(final SampleNode node) { if (node.subNodes == null) { return new SampleNode(node.sampleCount, null); } final TMap<Method, SampleNode> newSubNodes = new MethodMap<>(node.subNodes.size()); node.subNodes.forEachEntry((final Method a, final SampleNode b) -> { newSubNodes.put(a, SampleNode.clone(b)); return true; }); return new SampleNode(node.sampleCount, newSubNodes); }
SampleNode(final StackTraceElement[] stackTrace, final int from) { sampleCount = 1; if (from >= 0) { subNodes = new MethodMap<>(); subNodes.put(Methods.getMethod(stackTrace[from]), new SampleNode(stackTrace, from - 1)); } }
public static void addToSampleNode(final SampleNode node, final StackTraceElement... stackTrace) { SampleNode prevResult = node; prevResult.sampleCount++; for (int i = stackTrace.length - 1; i >= 0; i--) { StackTraceElement elem = stackTrace[i]; final Method method = Methods.getMethod(elem); SampleNode nNode; if (prevResult.subNodes == null) { prevResult.subNodes = new MethodMap<>(); nNode = new SampleNode(1, null); prevResult.subNodes.put(method, nNode); } else { nNode = prevResult.subNodes.get(method); if (nNode != null) { nNode.sampleCount++; } else { nNode = new SampleNode(1, null); prevResult.subNodes.put(method, nNode); } } prevResult = nNode; } }
throw new IllegalStateException("child sample counts must be <= parent sample count, detail: " + this); } else { return new SampleNode(newCount, sns);
public static SampleNode convert(final Iterator<StackSampleElement> samples) { TIntObjectMap<SampleNode> index = new TIntObjectHashMap<>(); while (samples.hasNext()) { StackSampleElement asmp = samples.next(); SampleNode sn = new SampleNode(asmp.getCount(), new THashMap<Method, SampleNode>(4)); SampleNode parent = index.get(asmp.getParentId()); if (parent != null) { Method m = asmp.getMethod(); final Map<Method, SampleNode> subNodes = parent.getSubNodes(); if (subNodes == null) { throw new IllegalStateException("Bug, state " + index + "; at node " + asmp); } subNodes.put(m, sn); } index.put(asmp.getId(), sn); } return index.get(0); }
void addSample(final StackTraceElement[] stackTrace, final int from) { sampleCount++; if (from >= 0) { Method method = Methods.getMethod(stackTrace[from]); SampleNode subNode = null; if (subNodes == null) { subNodes = new MethodMap(); } else { subNode = subNodes.get(method); } if (subNode == null) { subNodes.put(method, new SampleNode(stackTrace, from - 1)); } else { subNode.addSample(stackTrace, from - 1); } } }
private static Pair<Method, SampleNode> parse(final JsonParser jsonP) throws IOException { consume(jsonP, JsonToken.FIELD_NAME); String name = jsonP.getCurrentName(); consume(jsonP, JsonToken.VALUE_NUMBER_INT); int sc = jsonP.getIntValue(); JsonToken nextToken = jsonP.nextToken(); if (nextToken == JsonToken.END_OBJECT) { return Pair.of(Methods.from(name), new SampleNode(sc, null)); } else if (nextToken == JsonToken.FIELD_NAME) { consume(jsonP, JsonToken.START_ARRAY); TMap<Method, SampleNode> nodes = new MethodMap<>(); while (jsonP.nextToken() != JsonToken.END_ARRAY) { Pair<Method, SampleNode> parse = parse(jsonP); nodes.put(parse.getKey(), parse.getValue()); } consume(jsonP, JsonToken.END_OBJECT); return Pair.of(Methods.from(name), new SampleNode(sc, nodes)); } else { throw new IllegalArgumentException("Expected field name or end Object, not: " + nextToken); } }
for (int j = 0; j < nrArrayItems; j++) { asmp = reader.read(asmp, decoder); SampleNode sn = new SampleNode(asmp.getCount(), new MethodMap<SampleNode>()); SampleNode parent = index.get(asmp.getParentId()); if (parent != null) {
public static SampleNode fromProtoToSampleNode(final ProtoSampleNodes.SampleNodeOrBuilder node) { TMap<Method, SampleNode> subNodes = null; List<ProtoSampleNodes.SamplePair> sns = node.getSubNodesList(); if (sns != null) { subNodes = new THashMap<>(); for (ProtoSampleNodes.SamplePair pair : sns) { final ProtoSampleNodes.Method method = pair.getMethod(); subNodes.put(new Method(method.getDeclaringClass(), method.getMethodName()), fromProtoToSampleNode(pair.getNode())); } } return new SampleNode(node.getCount(), subNodes); }
st1[2] = new StackTraceElement("C1", "m3", "C1.java", 12); SampleNode node1 = SampleNode.createSampleNode(st1); SampleNode node2 = new SampleNode(st1, st1.length - 1); LOG.debug("Node 1", node1); LOG.debug("Node 2", node2);
return new SampleNode(newSampleCount, newSubNodes);