Skip to content

Commit

Permalink
Zing support
Browse files Browse the repository at this point in the history
  • Loading branch information
chriswhocodes committed Aug 2, 2018
1 parent 0787664 commit 81422e4
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 39 deletions.
@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013-2017 Chris Newland. * Copyright (c) 2013-2018 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/ */
Expand All @@ -24,6 +24,7 @@
import org.adoptopenjdk.jitwatch.parser.ILogParseErrorListener; import org.adoptopenjdk.jitwatch.parser.ILogParseErrorListener;
import org.adoptopenjdk.jitwatch.parser.ILogParser; import org.adoptopenjdk.jitwatch.parser.ILogParser;
import org.adoptopenjdk.jitwatch.parser.ParserFactory; import org.adoptopenjdk.jitwatch.parser.ParserFactory;
import org.adoptopenjdk.jitwatch.parser.ParserType;
import org.adoptopenjdk.jitwatch.report.Report; import org.adoptopenjdk.jitwatch.report.Report;
import org.adoptopenjdk.jitwatch.report.comparator.ScoreComparator; import org.adoptopenjdk.jitwatch.report.comparator.ScoreComparator;
import org.adoptopenjdk.jitwatch.report.suggestion.SuggestionWalker; import org.adoptopenjdk.jitwatch.report.suggestion.SuggestionWalker;
Expand Down Expand Up @@ -60,7 +61,12 @@ public LaunchHeadless(String[] args) throws IOException


config = new JITWatchConfig(); config = new JITWatchConfig();


parser = ParserFactory.getParser(this); String parserProperty = System.getProperty("jitwatch.parser", ParserType.HOTSPOT.toString());

ParserType parserType = ParserType.fromString(parserProperty);

parser = ParserFactory.getParser(parserType, this);

parser.setConfig(config); parser.setConfig(config);


parser.processLogFile(new File(logFile), this); parser.processLogFile(new File(logFile), this);
Expand Down
Expand Up @@ -12,30 +12,22 @@


public class ParserFactory public class ParserFactory
{ {
public static final String PARSER_HOTSPOT = "hotspot";

public static final String PARSER_J9 = "j9";

public static final String PARSER_ZING = "zing";

private ParserFactory() private ParserFactory()
{ {
} }


public static ILogParser getParser(IJITListener jitListener) public static ILogParser getParser(ParserType parserType, IJITListener jitListener)
{ {
String parserProperty = System.getProperty("jitwatch.parser", PARSER_HOTSPOT); switch (parserType)

switch (parserProperty)
{ {
case PARSER_HOTSPOT: case HOTSPOT:
return new HotSpotLogParser(jitListener); return new HotSpotLogParser(jitListener);
case PARSER_J9: case J9:
return new J9LogParser(jitListener); return new J9LogParser(jitListener);
case PARSER_ZING: case ZING:
return new ZingLogParser(jitListener); return new ZingLogParser(jitListener);
default: default:
throw new RuntimeException("Unknown parser " + parserProperty); throw new RuntimeException("Unknown parser " + parserType);
} }
} }
} }
@@ -0,0 +1,39 @@
package org.adoptopenjdk.jitwatch.parser;

public enum ParserType
{
HOTSPOT, J9, ZING;

public String getDisplayName()
{
switch (this)
{
case HOTSPOT:
return "HotSpot";
case J9:
return "J9";
case ZING:
return "Zing";
default:
throw new RuntimeException("Unknown parser type");
}
}

public static ParserType fromString(String input)
{
if (input != null)
{
switch (input.toLowerCase())
{
case "hotspot":
return HOTSPOT;
case "j9":
return J9;
case "zing":
return ZING;
}
}

throw new RuntimeException("Unknown parser type: " + input);
}
}
69 changes: 46 additions & 23 deletions ui/src/main/java/org/adoptopenjdk/jitwatch/ui/main/JITWatchUI.java
Expand Up @@ -35,6 +35,7 @@
import org.adoptopenjdk.jitwatch.parser.ILogParseErrorListener; import org.adoptopenjdk.jitwatch.parser.ILogParseErrorListener;
import org.adoptopenjdk.jitwatch.parser.ILogParser; import org.adoptopenjdk.jitwatch.parser.ILogParser;
import org.adoptopenjdk.jitwatch.parser.ParserFactory; import org.adoptopenjdk.jitwatch.parser.ParserFactory;
import org.adoptopenjdk.jitwatch.parser.ParserType;
import org.adoptopenjdk.jitwatch.parser.hotspot.HotSpotLogParser; import org.adoptopenjdk.jitwatch.parser.hotspot.HotSpotLogParser;
import org.adoptopenjdk.jitwatch.parser.j9.J9LogParser; import org.adoptopenjdk.jitwatch.parser.j9.J9LogParser;
import org.adoptopenjdk.jitwatch.parser.zing.ZingLogParser; import org.adoptopenjdk.jitwatch.parser.zing.ZingLogParser;
Expand All @@ -52,6 +53,8 @@
import org.adoptopenjdk.jitwatch.ui.graphing.TimeLineStage; import org.adoptopenjdk.jitwatch.ui.graphing.TimeLineStage;
import org.adoptopenjdk.jitwatch.ui.nmethod.codecache.CodeCacheLayoutStage; import org.adoptopenjdk.jitwatch.ui.nmethod.codecache.CodeCacheLayoutStage;
import org.adoptopenjdk.jitwatch.ui.nmethod.compilerthread.CompilerThreadStage; import org.adoptopenjdk.jitwatch.ui.nmethod.compilerthread.CompilerThreadStage;
import org.adoptopenjdk.jitwatch.ui.parserchooser.IParserSelectedListener;
import org.adoptopenjdk.jitwatch.ui.parserchooser.ParserChooser;
import org.adoptopenjdk.jitwatch.ui.report.ReportStage; import org.adoptopenjdk.jitwatch.ui.report.ReportStage;
import org.adoptopenjdk.jitwatch.ui.report.ReportStageType; import org.adoptopenjdk.jitwatch.ui.report.ReportStageType;
import org.adoptopenjdk.jitwatch.ui.sandbox.SandboxStage; import org.adoptopenjdk.jitwatch.ui.sandbox.SandboxStage;
Expand Down Expand Up @@ -82,6 +85,7 @@
import javafx.geometry.Orientation; import javafx.geometry.Orientation;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.SplitPane; import javafx.scene.control.SplitPane;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
Expand All @@ -97,8 +101,8 @@
import javafx.stage.WindowEvent; import javafx.stage.WindowEvent;
import javafx.util.Duration; import javafx.util.Duration;


public class JITWatchUI extends Application public class JITWatchUI extends Application implements IJITListener, ILogParseErrorListener, IStageClosedListener,
implements IJITListener, ILogParseErrorListener, IStageClosedListener, IStageAccessProxy, IMemberSelectedListener IStageAccessProxy, IMemberSelectedListener, IParserSelectedListener
{ {
private static final Logger logger = LoggerFactory.getLogger(JITWatchUI.class); private static final Logger logger = LoggerFactory.getLogger(JITWatchUI.class);


Expand Down Expand Up @@ -211,10 +215,11 @@ public class JITWatchUI extends Application
private boolean repaintTree = false; private boolean repaintTree = false;
private boolean startDelayedByConfig = false; private boolean startDelayedByConfig = false;


private ParserChooser parserChooser;

// Called by JFX // Called by JFX
public JITWatchUI() public JITWatchUI()
{ {
logParser = ParserFactory.getParser(this);
} }


public JITWatchUI(String[] args) public JITWatchUI(String[] args)
Expand Down Expand Up @@ -443,6 +448,14 @@ public void handle(WindowEvent arg0)


Scene scene = UserInterfaceUtil.getScene(borderPane, WINDOW_WIDTH, WINDOW_HEIGHT); Scene scene = UserInterfaceUtil.getScene(borderPane, WINDOW_WIDTH, WINDOW_HEIGHT);


parserChooser = new ParserChooser(this);

ComboBox<ParserType> comboParser = parserChooser.getCombo();

String parserProperty = System.getProperty("jitwatch.parser", ParserType.HOTSPOT.toString());

comboParser.getSelectionModel().select(ParserType.fromString(parserProperty));

Button btnChooseWatchFile = new Button("Open Log"); Button btnChooseWatchFile = new Button("Open Log");
btnChooseWatchFile.setOnAction(new EventHandler<ActionEvent>() btnChooseWatchFile.setOnAction(new EventHandler<ActionEvent>()
{ {
Expand Down Expand Up @@ -800,18 +813,7 @@ public void changed(ObservableValue<? extends CompilationTableRow> arg0, Compila


if (jitLogFile == null) if (jitLogFile == null)
{ {
if (logParser instanceof HotSpotLogParser) log("Choose a JIT log file or open the Sandbox");
{
log("HotSpot mode. Choose a JIT log file or open the Sandbox");
}
else if (logParser instanceof J9LogParser)
{
log("J9 Mode. Choose a JIT log file (Sandbox only available for HotSpot)");
}
else if (logParser instanceof ZingLogParser)
{
log("Zing Mode. Choose a JIT log file (Sandbox only available for HotSpot)");
}
} }
else else
{ {
Expand All @@ -833,17 +835,25 @@ else if (logParser instanceof ZingLogParser)


lblHeap.setStyle(labelStyle); lblHeap.setStyle(labelStyle);
lblVmVersion.setStyle(labelStyle); lblVmVersion.setStyle(labelStyle);

Label labelParser = new Label("Select Parser");
labelParser.setStyle(labelStyle);


Button buttonSnapShot = UserInterfaceUtil.getSnapshotButton(scene, "JITWatch"); Button buttonSnapShot = UserInterfaceUtil.getSnapshotButton(scene, "JITWatch");


hboxBottom.setPadding(new Insets(4)); hboxBottom.setPadding(new Insets(4));
hboxBottom.setPrefHeight(statusBarHeight); hboxBottom.setPrefHeight(statusBarHeight);
hboxBottom.setSpacing(4); hboxBottom.setSpacing(4);
hboxBottom.getChildren().add(lblHeap);
hboxBottom.getChildren().add(labelParser);
hboxBottom.getChildren().add(comboParser);

hboxBottom.getChildren().add(btnErrorLog); hboxBottom.getChildren().add(btnErrorLog);
hboxBottom.getChildren().add(btnStats); hboxBottom.getChildren().add(btnStats);
hboxBottom.getChildren().add(btnReset); hboxBottom.getChildren().add(btnReset);
hboxBottom.getChildren().add(lblHeap);
hboxBottom.getChildren().add(springLeft); hboxBottom.getChildren().add(springLeft);

hboxBottom.getChildren().add(lblTweakLog); hboxBottom.getChildren().add(lblTweakLog);
hboxBottom.getChildren().add(springRight); hboxBottom.getChildren().add(springRight);
hboxBottom.getChildren().add(lblVmVersion); hboxBottom.getChildren().add(lblVmVersion);
Expand Down Expand Up @@ -902,7 +912,7 @@ public void openTriView(IMetaMember member, int highlightBCI)
openTriView(); openTriView();


triViewStage.setNextHighlightBCI(highlightBCI); triViewStage.setNextHighlightBCI(highlightBCI);

selectMember(member, true, false); selectMember(member, true, false);


if (member != null) if (member != null)
Expand Down Expand Up @@ -1103,8 +1113,7 @@ public void openCompileChain(IMetaMember member)
{ {
if (member != null && member.isCompiled()) if (member != null && member.isCompiled())
{ {
CompileChainStage compileChainStage = new CompileChainStage(this, this, CompileChainStage compileChainStage = new CompileChainStage(this, this, logParser.getModel());
logParser.getModel());


compileChainStage.compilationChanged(member); compileChainStage.compilationChanged(member);


Expand Down Expand Up @@ -1152,8 +1161,9 @@ private void chooseJITLog()
// don't use ExtensionFilter on OSX due to JavaFX2 missing combo bug // don't use ExtensionFilter on OSX due to JavaFX2 missing combo bug
if (osNameProperty != null && !osNameProperty.toLowerCase().contains("mac")) if (osNameProperty != null && !osNameProperty.toLowerCase().contains("mac"))
{ {
fc.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Log Files", "*.log"), fc
new FileChooser.ExtensionFilter("All Files", "*.*")); .getExtensionFilters()
.addAll(new FileChooser.ExtensionFilter("Log Files", "*.log"), new FileChooser.ExtensionFilter("All Files", "*.*"));
} }


String searchDir = getConfig().getLastLogDir(); String searchDir = getConfig().getLastLogDir();
Expand Down Expand Up @@ -1233,7 +1243,7 @@ private void setSelectedMetaMemberFromCompilationTable()
@Override @Override
public synchronized void selectMember(IMetaMember member, boolean updateTree, boolean updateTriView) public synchronized void selectMember(IMetaMember member, boolean updateTree, boolean updateTriView)
{ {
//TimerUtil.timerStart(getClass().getName() + ".selectMember()"); // TimerUtil.timerStart(getClass().getName() + ".selectMember()");


selectedProgrammatically = true; selectedProgrammatically = true;


Expand Down Expand Up @@ -1274,7 +1284,7 @@ public synchronized void selectMember(IMetaMember member, boolean updateTree, bo


selectedProgrammatically = false; selectedProgrammatically = false;


//TimerUtil.timerEnd(getClass().getName() + ".selectMember()"); // TimerUtil.timerEnd(getClass().getName() + ".selectMember()");
} }


@Override @Override
Expand Down Expand Up @@ -1526,4 +1536,17 @@ public Stage getStageForDialog()
{ {
return stage; return stage;
} }

@Override
public void parserSelected(ParserType parserType)
{
log("Selected Parser: " + parserType);

if (logParser != null)
{
logParser.reset();
}

logParser = ParserFactory.getParser(parserType, this);
}
} }
@@ -0,0 +1,8 @@
package org.adoptopenjdk.jitwatch.ui.parserchooser;

import org.adoptopenjdk.jitwatch.parser.ParserType;

public interface IParserSelectedListener
{
void parserSelected(ParserType parserType);
}
@@ -0,0 +1,53 @@
/*
* Copyright (c) 2018 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/

package org.adoptopenjdk.jitwatch.ui.parserchooser;

import org.adoptopenjdk.jitwatch.parser.ParserType;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.ComboBox;

public class ParserChooser
{
private ObservableList<ParserType> parserTypeList = FXCollections.observableArrayList();

private ComboBox<ParserType> comboParser;

public ParserChooser(final IParserSelectedListener selectionListener)
{
comboParser = new ComboBox<>(parserTypeList);

clear();

comboParser.setStyle("-fx-font-size: 10px");

comboParser.valueProperty().addListener(new ChangeListener<ParserType>()
{
@Override
public void changed(ObservableValue<? extends ParserType> ov, ParserType oldVal, ParserType newVal)
{
selectionListener.parserSelected(newVal);
}
});
}

public synchronized void clear()
{
parserTypeList.clear();

parserTypeList.addAll(ParserType.values());

comboParser.getSelectionModel().clearSelection();
}

public ComboBox<ParserType> getCombo()
{
return comboParser;
}
}

0 comments on commit 81422e4

Please sign in to comment.