/*
* Copyright (c) 2013-2015 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.toplist;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.adoptopenjdk.jitwatch.compilation.AbstractCompilationVisitable;
import org.adoptopenjdk.jitwatch.model.IParseDictionary;
import org.adoptopenjdk.jitwatch.model.IReadOnlyJITDataModel;
import org.adoptopenjdk.jitwatch.model.LogParseException;
import org.adoptopenjdk.jitwatch.model.Tag;
import org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractTopListVisitable extends AbstractCompilationVisitable implements ITopListVisitable
{
protected IReadOnlyJITDataModel model;
protected List<ITopListScore> topList;
protected boolean sortHighToLow;
protected static final Logger logger = LoggerFactory.getLogger(AbstractTopListVisitable.class);
public AbstractTopListVisitable(IReadOnlyJITDataModel model, boolean sortHighToLow)
{
this.model = model;
this.sortHighToLow = sortHighToLow;
}
@Override
public void reset()
{
}
//override if necessary
public void postProcess()
{
}
@Override
public void visitTag(Tag toVisit, IParseDictionary parseDictionary) throws LogParseException
{
}
@Override
public List<ITopListScore> buildTopList()
{
topList = new ArrayList<>();
TreeVisitor.walkTree(model, this);
postProcess();
Collections.sort(topList, new Comparator<ITopListScore>()
{
@Override
public int compare(ITopListScore s1, ITopListScore s2)
{
if (sortHighToLow)
{
return Long.compare(s2.getScore(), s1.getScore());
}
else
{
return Long.compare(s1.getScore(), s2.getScore());
}
}
});
return topList;
}
}