in core/src/main/java/org/adoptopenjdk/jitwatch/histo/InlineSizeHistoVisitable.java [104:186]
private void processParseTag(Tag parseTag, IParseDictionary parseDictionary)
{
String currentMethod = null;
String holder = null;
String attrInlineBytes = null;
for (Tag child : parseTag.getChildren())
{
String tagName = child.getName();
Map<String, String> attrs = child.getAttributes();
switch (tagName)
{
case TAG_METHOD:
{
currentMethod = attrs.get(ATTR_NAME);
holder = attrs.get(ATTR_HOLDER);
attrInlineBytes = attrs.get(ATTR_BYTES);
break;
}
case TAG_INLINE_FAIL:
{
// clear method to prevent incorrect pickup by next inline
// success
currentMethod = null;
holder = null;
attrInlineBytes = null;
break;
}
case TAG_INLINE_SUCCESS:
{
if (holder != null && currentMethod != null && attrInlineBytes != null)
{
Tag klassTag = parseDictionary.getKlass(holder);
if (klassTag != null)
{
String fqName = klassTag.getAttributes().get(ATTR_NAME) + C_SLASH + currentMethod;
if (!inlinedCounted.contains(fqName))
{
long inlinedByteCount = Long.parseLong(attrInlineBytes);
histo.addValue(inlinedByteCount);
inlinedCounted.add(fqName);
}
}
}
break;
}
case TAG_PARSE:
{
processParseTag(child, parseDictionary);
break;
}
case TAG_PHASE:
{
String phaseName = attrs.get(ATTR_NAME);
if (S_PARSE_HIR.equals(phaseName))
{
processParseTag(child, parseDictionary);
}
else
{
logger.warn("Don't know how to handle phase {}", phaseName);
}
break;
}
default:
handleOther(child);
break;
}
}
}