|
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
|