From: Lukas P. <pe...@us...> - 2002-08-31 08:41:24
|
Update of /cvsroot/javaprofiler/module/net/sourceforge/javaprofiler/module/nodes In directory usw-pr-cvs1:/tmp/cvs-serv2797 Modified Files: BacktraceChildren.java CallTreeChildren.java Log Message: shows percentage Index: BacktraceChildren.java =================================================================== RCS file: /cvsroot/javaprofiler/module/net/sourceforge/javaprofiler/module/nodes/BacktraceChildren.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** BacktraceChildren.java 28 Aug 2002 18:00:05 -0000 1.2 --- BacktraceChildren.java 31 Aug 2002 08:41:21 -0000 1.3 *************** *** 42,54 **** import net.sourceforge.javaprofiler.module.nodes.CallTreeNode; import net.sourceforge.javaprofiler.module.data.BacktraceSupport; import net.sourceforge.javaprofiler.module.sheets.*; /** This children object is constructed from a list of <code>CPUTrace</code> ! * objects. Each child represents one FrameRef at a given level. * @author Lukas Petru */ ! public class BacktraceChildren extends Children.Array { private List traces; private int level; /** Constructs children. --- 42,58 ---- import net.sourceforge.javaprofiler.module.nodes.CallTreeNode; import net.sourceforge.javaprofiler.module.data.BacktraceSupport; + import net.sourceforge.javaprofiler.module.data.MergeFrameData; import net.sourceforge.javaprofiler.module.sheets.*; /** This children object is constructed from a list of <code>CPUTrace</code> ! * objects. These objects correspond to some <code>MergeFrameRef</code> object * of some level. The traces will be split by frame one level higher in the ! * stack, and children will represent the MergeFrameRef objects that will ! * result. * @author Lukas Petru */ ! public class BacktraceChildren extends Children.SortedArray { private List traces; private int level; + private long aggregate; /** Constructs children. *************** *** 58,63 **** --- 62,79 ---- */ public BacktraceChildren(List list, int frameLevel) { + this(list, frameLevel, 0); + } + + /** Constructs children. + * @param list List of <code>CPUTrace</code>. + * @param frameLevel Level of frame for which to create nodes. Level 1 is + * the last called method in a trace. + * @param aggregateTime Time that represents 100% in ratios. + */ + public BacktraceChildren(List list, int frameLevel, long aggregateTime) { traces=list; level=frameLevel; + aggregate=aggregateTime; + setComparator(new PDataComparator(PDataComparator.CPU)); } *************** *** 65,76 **** if (traces.size()==0) return Collections.EMPTY_LIST; ! java.util.Map map=BacktraceSupport.split(traces, level); traces=null; List nodeList=new ArrayList(); ! Iterator it=map.entrySet().iterator(); int i=1; while (it.hasNext()) { ! java.util.Map.Entry entry=(java.util.Map.Entry) it.next(); ! Node node=createBTNode(entry.getKey(), entry.getValue()); node.setName(String.valueOf(i++)); nodeList.add(node); --- 81,95 ---- if (traces.size()==0) return Collections.EMPTY_LIST; ! if (aggregate==0) ! setAggregate(); ! ! List list=BacktraceSupport.split(traces, level); traces=null; List nodeList=new ArrayList(); ! Iterator it=list.iterator(); int i=1; while (it.hasNext()) { ! MergeFrameData entry=(MergeFrameData) it.next(); ! Node node=createBTNode(entry.getFrame(), entry.getTraces()); node.setName(String.valueOf(i++)); nodeList.add(node); *************** *** 79,85 **** } ! private Node createBTNode(Object key, Object value) { ! FrameRef oo=(FrameRef) key; ! List bucket=(List) value; Children ch; if (bucket.size()==1 && ((TraceRef) bucket.get(0)).getFrames().size()<= --- 98,102 ---- } ! private Node createBTNode(FrameRef oo, List bucket) { Children ch; if (bucket.size()==1 && ((TraceRef) bucket.get(0)).getFrames().size()<= *************** *** 87,103 **** ch=Children.LEAF; else ! ch=new BacktraceChildren(bucket, level+1); ! AbstractNode node=new CallTreeNode(ch, new BacktraceItemSheet(oo, ! bucket)); ! node.setDisplayName(oo.getMethod().toString() + oo.getMethod() ! .getSignature()); node.setIconBase( "/net/sourceforge/javaprofiler/module/resources/BacktraceItemIcon"); return node; } } /* * $Log$ * Revision 1.2 2002/08/28 18:00:05 petrul * property sheets moved to sheets package --- 104,140 ---- ch=Children.LEAF; else ! ch=new BacktraceChildren(bucket, level+1, aggregate); ! CPUStat stat=BacktraceSupport.getSumOfCPUStat(bucket); ! AbstractNode node=new PDataNode(ch, new BacktraceItemSheet(oo, ! bucket), stat); ! ! String percentage=String.valueOf(getPercentage(stat))+"%"; ! node.setDisplayName(percentage+", "+oo.getMethod().toString()+ ! oo.getMethod().getSignature()); node.setIconBase( "/net/sourceforge/javaprofiler/module/resources/BacktraceItemIcon"); return node; } + + private void setAggregate() { + CPUStat stat=BacktraceSupport.getSumOfCPUStat(traces); + if (stat.getCPUPureTime() != 0) + aggregate=stat.getCPUPureTime(); + else + aggregate=stat.getCPUHitsCount(); + } + + private int getPercentage(CPUStat ref) { + if (ref.getCPUPureTime() != 0) + return (int) (ref.getCPUPureTime()*100/aggregate); + return (int) (ref.getCPUHitsCount()*100/aggregate); + } } /* * $Log$ + * Revision 1.3 2002/08/31 08:41:21 petrul + * shows percentage + * * Revision 1.2 2002/08/28 18:00:05 petrul * property sheets moved to sheets package Index: CallTreeChildren.java =================================================================== RCS file: /cvsroot/javaprofiler/module/net/sourceforge/javaprofiler/module/nodes/CallTreeChildren.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** CallTreeChildren.java 28 Aug 2002 18:00:05 -0000 1.2 --- CallTreeChildren.java 31 Aug 2002 08:41:21 -0000 1.3 *************** *** 42,46 **** import net.sourceforge.javaprofiler.module.sheets.*; ! /** This class converts a list of JPI objects into <code>Node</code> objects. * Properly handled classes include <code>ThreadGroupRef</code>, * <code>ThreadRef</code>, <code>CallTreeRef</code>. The list is passed in a --- 42,48 ---- import net.sourceforge.javaprofiler.module.sheets.*; ! /** This class creates children for CallTree root selector and all other ! * children down the hierarchy. It converts a list of JPI objects into ! * <code>Node</code> objects. * Properly handled classes include <code>ThreadGroupRef</code>, * <code>ThreadRef</code>, <code>CallTreeRef</code>. The list is passed in a *************** *** 50,53 **** --- 52,56 ---- public class CallTreeChildren extends Children.Array { private List data; + private long aggregate; public CallTreeChildren(List list) { *************** *** 55,58 **** --- 58,66 ---- } + public CallTreeChildren(List list, long aggregateTime) { + data=list; + aggregate=aggregateTime; + } + public CallTreeChildren(Object o) { data=new ArrayList(1); *************** *** 63,66 **** --- 71,76 ---- if (data.size()==0) return Collections.EMPTY_LIST; + if (data.get(0) instanceof CallTreeRef) + return getCallTreeList(); List nodeList=new ArrayList(); Iterator it=data.iterator(); *************** *** 72,79 **** --- 82,121 ---- nodeList.add(node); } + // release resources + data=null; + return nodeList; } + /** Special function for CallTree, because we want to sort the Nodes. */ + private List getCallTreeList() { + List sorted=new ArrayList(data); + Collections.sort(sorted, new Comparator() { + public int compare(Object o1, Object o2) { + long d=getValue((CallTreeRef) o1)-getValue((CallTreeRef) o2); + if (d!=0) + return (-d>0) ? 1 : -1; + else + return 0; + } + }); + List nodeList=new ArrayList(); + Iterator it=sorted.iterator(); + int i=1; + while (it.hasNext()) { + Object o=it.next(); + Node node=createCTNode(o); + node.setName(String.valueOf(i++)); + nodeList.add(node); + } + // release resources + data=null; + + return nodeList; + } + private Node createCTItemNode(CallTreeRef oo) { + if (aggregate==0) + setAggregate(oo); List list=oo.getChildren(); AbstractNode node; *************** *** 81,92 **** node=new CallTreeNode(Children.LEAF, new CallTreeItemSheet(oo)); else ! node=new CallTreeNode(new CallTreeChildren(list), new CallTreeItemSheet(oo)); ! String time; ! if (oo.getCPUCumulativeTime() != 0) ! time=oo.getCPUCumulativeTime() + " ms"; ! else ! time=String.valueOf(oo.getCPUHitsCount()); ! node.setDisplayName(time+", "+oo.getFrame().getMethod().getName()+ ":"+oo.getFrame().getLineNo()); node.setShortDescription(oo.getFrame().getMethod().toString()); --- 123,131 ---- node=new CallTreeNode(Children.LEAF, new CallTreeItemSheet(oo)); else ! node=new CallTreeNode(new CallTreeChildren(list, aggregate), new CallTreeItemSheet(oo)); ! ! String percentage=String.valueOf(getPercentage(oo))+"%"; ! node.setDisplayName(percentage+", "+oo.getFrame().getMethod().getName()+ ":"+oo.getFrame().getLineNo()); node.setShortDescription(oo.getFrame().getMethod().toString()); *************** *** 102,106 **** CallTreeChildren(oo.getThreads())); node.setDisplayName("Group " + oo.getName()); ! node.setIconBase("/org/openide/resources/beans"); return node; } else if (o instanceof ThreadRef) { --- 141,145 ---- CallTreeChildren(oo.getThreads())); node.setDisplayName("Group " + oo.getName()); ! node.setIconBase("/org/netbeans/core/resources/arrowbottom"); return node; } else if (o instanceof ThreadRef) { *************** *** 113,117 **** node=new CallTreeNode(Children.LEAF); node.setDisplayName(oo.getName()); ! node.setIconBase("/org/openide/resources/beans"); return node; } else if (o instanceof CallTreeRef) { --- 152,156 ---- node=new CallTreeNode(Children.LEAF); node.setDisplayName(oo.getName()); ! node.setIconBase("/org/netbeans/core/resources/arrowbottom"); return node; } else if (o instanceof CallTreeRef) { *************** *** 125,127 **** } } ! } \ No newline at end of file --- 164,190 ---- } } ! ! private void setAggregate(CallTreeRef ref) { ! if (ref.getCPUCumulativeTime() != 0) ! aggregate=ref.getCPUCumulativeTime(); ! else ! aggregate=ref.getCPUHitsCount(); ! } ! ! private int getPercentage(CallTreeRef ref) { ! return (int) (getValue(ref)*100/aggregate); ! } ! ! private static long getValue(CallTreeRef ref) { ! if (ref.getCPUCumulativeTime() != 0) ! return ref.getCPUCumulativeTime(); ! return ref.getCPUHitsCount(); ! } ! } ! ! /* ! * $Log$ ! * Revision 1.3 2002/08/31 08:41:21 petrul ! * shows percentage ! * ! */ \ No newline at end of file |