< prev index next >

application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/views/FlameGraphView.java

Print this page

 60 import org.eclipse.swt.custom.SashForm;
 61 import org.eclipse.swt.events.MenuDetectEvent;
 62 import org.eclipse.swt.events.MenuDetectListener;
 63 import org.eclipse.swt.widgets.Composite;
 64 import org.eclipse.ui.IMemento;
 65 import org.eclipse.ui.ISelectionListener;
 66 import org.eclipse.ui.IViewSite;
 67 import org.eclipse.ui.IWorkbenchPart;
 68 import org.eclipse.ui.PartInitException;
 69 import org.eclipse.ui.part.ViewPart;
 70 import org.openjdk.jmc.common.item.IItemCollection;
 71 import org.openjdk.jmc.common.util.StringToolkit;
 72 import org.openjdk.jmc.flightrecorder.flameview.tree.TraceNode;
 73 import org.openjdk.jmc.flightrecorder.flameview.tree.TraceTreeUtils;
 74 import org.openjdk.jmc.flightrecorder.stacktrace.FrameSeparator;
 75 import org.openjdk.jmc.flightrecorder.stacktrace.FrameSeparator.FrameCategorization;
 76 import org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI;
 77 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
 78 import org.openjdk.jmc.ui.CoreImages;
 79 import org.openjdk.jmc.ui.common.util.AdapterUtil;


 80 import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
 81 import org.openjdk.jmc.ui.misc.DisplayToolkit;
 82 
 83 public class FlameGraphView extends ViewPart implements ISelectionListener {
 84 	private static final String UNCLASSIFIABLE_FRAME = getStacktraceMessage(STACKTRACE_UNCLASSIFIABLE_FRAME);
 85 	private static final String UNCLASSIFIABLE_FRAME_DESC = getStacktraceMessage(STACKTRACE_UNCLASSIFIABLE_FRAME_DESC);
 86 	private static final String HTML_PAGE;
 87 	static {
 88 		// from: https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.css
 89 		String cssD3Flamegraph = "jslibs/d3-flamegraph.css";
 90 		// from: https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js
 91 		String jsHtml5shiv = "jslibs/html5shiv.min.js";
 92 		// from: https://oss.maxcdn.com/respond/1.4.2/respond.min.js
 93 		String jsRespond = "jslibs/respond.min.js";
 94 		// from: https://d3js.org/d3.v4.min.js
 95 		String jsD3V4 = "jslibs/d3.v4.min.js";
 96 		// from: https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.min.js
 97 		String jsD3Tip = "jslibs/d3-tip.min.js";
 98 		// from: https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js
 99 		String jsD3FlameGraph = "jslibs/d3-flamegraph.min.js";


100 		// jmc flameview coloring functions
101 		String jsFlameviewColoring = "flameviewColoring.js";
102 




103 		String jsIeLibraries = loadLibraries(jsHtml5shiv, jsRespond);
104 		String jsD3Libraries = loadLibraries(jsD3V4, jsD3Tip, jsD3FlameGraph);
105 
106 		// formatter arguments for the template: %1 - CSSs, %2 - IE9 specific scripts, %3 - 3rd party scripts %4 - 4th Flameview Coloring
107 		HTML_PAGE = String.format(fileContent("page.template"), fileContent(cssD3Flamegraph), jsIeLibraries,
108 				jsD3Libraries, fileContent(jsFlameviewColoring));
109 	}
110 
111 	private static final ExecutorService MODEL_EXECUTOR = Executors.newFixedThreadPool(1);
112 	private FrameSeparator frameSeparator;
113 
114 	private Browser browser;
115 	private SashForm container;
116 	private TraceNode currentRoot;
117 	private CompletableFuture<TraceNode> currentModelCalculator;
118 	private boolean threadRootAtTop = true;
119 	private IItemCollection currentItems;
120 	private GroupByAction[] groupByActions;
121 
122 	private class GroupByAction extends Action {
123 
124 		private final boolean fromThreadRootAction;
125 
126 		GroupByAction(boolean fromRoot) {
127 			super(fromRoot ? Messages.STACKTRACE_VIEW_THREAD_ROOT : Messages.STACKTRACE_VIEW_LAST_FRAME,

 60 import org.eclipse.swt.custom.SashForm;
 61 import org.eclipse.swt.events.MenuDetectEvent;
 62 import org.eclipse.swt.events.MenuDetectListener;
 63 import org.eclipse.swt.widgets.Composite;
 64 import org.eclipse.ui.IMemento;
 65 import org.eclipse.ui.ISelectionListener;
 66 import org.eclipse.ui.IViewSite;
 67 import org.eclipse.ui.IWorkbenchPart;
 68 import org.eclipse.ui.PartInitException;
 69 import org.eclipse.ui.part.ViewPart;
 70 import org.openjdk.jmc.common.item.IItemCollection;
 71 import org.openjdk.jmc.common.util.StringToolkit;
 72 import org.openjdk.jmc.flightrecorder.flameview.tree.TraceNode;
 73 import org.openjdk.jmc.flightrecorder.flameview.tree.TraceTreeUtils;
 74 import org.openjdk.jmc.flightrecorder.stacktrace.FrameSeparator;
 75 import org.openjdk.jmc.flightrecorder.stacktrace.FrameSeparator.FrameCategorization;
 76 import org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI;
 77 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
 78 import org.openjdk.jmc.ui.CoreImages;
 79 import org.openjdk.jmc.ui.common.util.AdapterUtil;
 80 import org.openjdk.jmc.ui.common.util.Environment;
 81 import org.openjdk.jmc.ui.common.util.Environment.OSType;
 82 import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
 83 import org.openjdk.jmc.ui.misc.DisplayToolkit;
 84 
 85 public class FlameGraphView extends ViewPart implements ISelectionListener {
 86 	private static final String UNCLASSIFIABLE_FRAME = getStacktraceMessage(STACKTRACE_UNCLASSIFIABLE_FRAME);
 87 	private static final String UNCLASSIFIABLE_FRAME_DESC = getStacktraceMessage(STACKTRACE_UNCLASSIFIABLE_FRAME_DESC);
 88 	private static final String HTML_PAGE;
 89 	static {
 90 		// from: https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.css
 91 		String cssD3Flamegraph = "jslibs/d3-flamegraph.css";
 92 		// from: https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js
 93 		String jsHtml5shiv = "jslibs/html5shiv.min.js";
 94 		// from: https://oss.maxcdn.com/respond/1.4.2/respond.min.js
 95 		String jsRespond = "jslibs/respond.min.js";
 96 		// from: https://d3js.org/d3.v4.min.js
 97 		String jsD3V4 = "jslibs/d3.v4.min.js";
 98 		// from: https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.min.js
 99 		String jsD3Tip = "jslibs/d3-tip.min.js";
100 		// from: https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js
101 		String jsD3FlameGraph = "jslibs/d3-flamegraph.min.js";
102 		// from: https://cdn.jsdelivr.net/gh/aptmac/d3-flame-graph@internet-explorer-compatibility/dist/d3-flamegraph-ie.min.js
103 		String jsD3FlameGraphIE = "jslibs/d3-flamegraph-ie.min.js";
104 		// jmc flameview coloring functions
105 		String jsFlameviewColoring = "flameviewColoring.js";
106 
107 		if (Environment.getOSType().equals(OSType.WINDOWS)) {
108 			jsD3FlameGraph = jsD3FlameGraphIE;
109 		}
110 
111 		String jsIeLibraries = loadLibraries(jsHtml5shiv, jsRespond);
112 		String jsD3Libraries = loadLibraries(jsD3V4, jsD3Tip, jsD3FlameGraph);
113 
114 		// formatter arguments for the template: %1 - CSSs, %2 - IE9 specific scripts, %3 - 3rd party scripts %4 - 4th Flameview Coloring
115 		HTML_PAGE = String.format(fileContent("template.html"), fileContent(cssD3Flamegraph), jsIeLibraries,
116 				jsD3Libraries, fileContent(jsFlameviewColoring));
117 	}
118 
119 	private static final ExecutorService MODEL_EXECUTOR = Executors.newFixedThreadPool(1);
120 	private FrameSeparator frameSeparator;
121 
122 	private Browser browser;
123 	private SashForm container;
124 	private TraceNode currentRoot;
125 	private CompletableFuture<TraceNode> currentModelCalculator;
126 	private boolean threadRootAtTop = true;
127 	private IItemCollection currentItems;
128 	private GroupByAction[] groupByActions;
129 
130 	private class GroupByAction extends Action {
131 
132 		private final boolean fromThreadRootAction;
133 
134 		GroupByAction(boolean fromRoot) {
135 			super(fromRoot ? Messages.STACKTRACE_VIEW_THREAD_ROOT : Messages.STACKTRACE_VIEW_LAST_FRAME,
< prev index next >