001 /** 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: Nov 28, 2002 005 * Time: 2:37:43 AM 006 */ 007 008 package EVolve.visualization.XYViz.ValRefViz.HotSpotViz; 009 010 import EVolve.util.Painters.StackHotspotPainter; 011 import EVolve.util.ThreadChooser; 012 import EVolve.data.Element; 013 import EVolve.visualization.AutoImage; 014 import EVolve.visualization.ReferenceDimension; 015 016 import javax.swing.*; 017 import java.util.*; 018 import java.awt.event.*; 019 020 public class StackHotspotViz extends HotSpotVisualization{ 021 private ArrayList menuList; 022 private String dataFilterName[]; 023 private JMenuItem itemChangThread; 024 private HashMap methodStacks; 025 private ThreadChooser td; 026 private Stack stack; 027 028 public StackHotspotViz() { 029 super(); 030 dataFilterName = new String[2]; 031 032 dataFilterName[0] = "Bytecode"; 033 dataFilterName[1] = "Method"; 034 035 menuList = new ArrayList(); 036 td = new ThreadChooser(imageMap,false); 037 } 038 039 protected void updateConfiguration() { 040 int subjectIndex = 0; 041 for (int i=0; i<elementDefinition.length; i++) 042 if (elementDefinition[i].getName().equals("Method Invocation")) { 043 subjectDefinition = elementDefinition[i]; 044 subjectIndex = i; 045 } 046 047 dimension[0].setDataFilter(dataFilter[subjectIndex][0][0]); 048 for (int i=1; i<2; i++) { 049 for (int j=0; j<dataFilter[subjectIndex][1].length; j++) { 050 if (dataFilter[subjectIndex][1][j].getName().equals(dataFilterName[i])) { 051 dimension[i].setDataFilter(dataFilter[subjectIndex][1][j]); 052 break; 053 } 054 } 055 } 056 super.updateConfiguration(); 057 } 058 059 protected ArrayList createOptionalMenu() { 060 if (menuList.size() > 0) return null; 061 062 menuList.clear(); 063 itemChangThread = new JMenuItem("Switch thread..."); 064 itemChangThread.setMnemonic(KeyEvent.VK_T); 065 itemChangThread.addActionListener(new ActionListener() { 066 public void actionPerformed(ActionEvent e) { 067 visualize(); 068 } 069 }); 070 071 menuList.add(itemChangThread); 072 return menuList; 073 } 074 075 public void preVisualize() { 076 super.preVisualize(); 077 image = null; 078 methodStacks = new HashMap(); 079 } 080 081 public void receiveElement(Element element) { 082 int threadId = threadFilter.getField(element); 083 084 switchThread(threadId); 085 int x = xAxis.getField(element); 086 int y = yAxis.getField(element); 087 int z = element.getField()[element.getField().length-1]; 088 089 ((StackHotspotPainter)painter).setStack(stack); 090 paint(x,y,z); 091 } 092 093 public void visualize() { 094 String selected = td.showDialog(); 095 096 image = (AutoImage)imageMap.get(new Integer(selected.substring(7,selected.length()))); 097 sort(); 098 } 099 100 protected void installPainter() { 101 painter = new StackHotspotPainter(); 102 } 103 104 protected void createDialog() { 105 super.createDialog(); 106 comboSubject.setEnabled(false); 107 for (int i=0; i<comboDimension.length; i++) { 108 comboDimension[i].setEnabled(false); 109 } 110 } 111 112 protected void switchThread(int threadId) { 113 if (currentThread != threadId) { 114 stack = (Stack)methodStacks.get(new Integer(threadId)); 115 if (stack == null) { 116 stack = new Stack(); 117 methodStacks.put(new Integer(threadId),stack); 118 } 119 super.switchThread(threadId); 120 } 121 } 122 }