You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kato-commits@incubator.apache.org by mo...@apache.org on 2009/05/14 09:11:18 UTC
svn commit: r774694 -
/incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java
Author: monteith
Date: Thu May 14 09:11:18 2009
New Revision: 774694
URL: http://svn.apache.org/viewvc?rev=774694&view=rev
Log:
Fixes for unit testcases to pass. Moved opening of HProf file and view to appropriate places.
Modified:
incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java
Modified: incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java?rev=774694&r1=774693&r2=774694&view=diff
==============================================================================
--- incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java (original)
+++ incubator/kato/trunk/HprofBinaryReaderPOC/src/org/apache/kato/hprof/HProfView.java Thu May 14 09:11:18 2009
@@ -64,104 +64,101 @@
// Thread ID Maps
private HashMap<Integer,IJavaThread> activeThreadsBySerial = new HashMap<Integer, IJavaThread>();
-
+
+ /**
+ * Takes an open file.
+ *
+ * @param file
+ */
public HProfView(HProfFile file) {
this.file = file;
}
public void open(IViewMonitor monitor) {
- try {
- file.open();
-
- int r = 0;
- LinkedList<IJavaClass> loadedClassesRecordNO = new LinkedList<IJavaClass>();
- LinkedList<IJavaThread> threadRecordNO = new LinkedList<IJavaThread>();
- LinkedList<Integer> javastacks = new LinkedList<Integer>();
- recordSummary=new ClassSummary();
-
- int heapRecordNo=0;
- while (true) {
- IHProfRecord record = file.getRecord(r);
- if (record == null)
- break;
-
- String tagName=HProfRecordFormatter.getTagName(record);
- recordSummary.record(record);
- if (record instanceof IUTF8HProfRecord) {
- IUTF8HProfRecord utf8 = (IUTF8HProfRecord) record;
- Long id = utf8.getNameID();
- utf8s.put(id, r);
-
- } else if (record instanceof ILoadClassHProfRecord) {
- JavaClass c=new JavaClass(r);
- loadedClassesBySerial.put(c.getClassSerialNumber(),c);
- } else if (record instanceof IUnloadClassHProfRecord) {
- // Remove a loaded class if it is subsequently unloaded.
- loadedClassesBySerial.remove(((IUnloadClassHProfRecord)record).getClassSerialNumber());
- } else if (record instanceof IThreadActiveHProfRecord) {
- ActiveJavaThread ajt = new ActiveJavaThread(r);
-
- threadRecordNO.add( ajt );
-
- // add by serial number
- activeThreadsBySerial.put(ajt.getThreadSerialNumber(), ajt);
- } else if (record instanceof IThreadEndingHProfRecord) {
- InactiveJavaThread ijt = new InactiveJavaThread(r);
-
- threadRecordNO.add(ijt);
- // remove thread by serial number.
- //SRDM activeThreadsBySerial.remove(ijt.getThreadSerialNumber());
- } else if (record instanceof IJavaStackTraceHProfRecord) {
- // Stack traces should be attached to threads
- // keep the most recent. Attach to thread so that when thread removed,
- // stacktrace is removed too.
- IJavaStackTraceHProfRecord stackTrace = (IJavaStackTraceHProfRecord) record;
- int sn = stackTrace.getSerialNumber();
-
- stackTraces.put(sn, r);
- javastacks.add(r);
-
- // Attach this stack trace to its thread if the thread
- // exists and this trace is newer.
- int threadSerial = stackTrace.getThreadSerialNumber();
- IJavaThread ajt = activeThreadsBySerial.get(threadSerial);
-
- if(ajt != null) {
- ((ActiveJavaThread)ajt).setStackTrace(stackTrace);
- }
-
- } else if (record instanceof IJavaStackFrameHProfRecord) {
- IJavaStackFrameHProfRecord frame = (IJavaStackFrameHProfRecord) record;
- long id = frame.getStackFrameID();
- stackTraceFrames.put(id, r);
+ int r = 0;
+ LinkedList<IJavaClass> loadedClassesRecordNO = new LinkedList<IJavaClass>();
+ LinkedList<IJavaThread> threadRecordNO = new LinkedList<IJavaThread>();
+ LinkedList<Integer> javastacks = new LinkedList<Integer>();
+ recordSummary=new ClassSummary();
+
+ int heapRecordNo=0;
+ while (true) {
+ IHProfRecord record = file.getRecord(r);
+ if (record == null)
+ break;
+
+ String tagName=HProfRecordFormatter.getTagName(record);
+ recordSummary.record(record);
+ if (record instanceof IUTF8HProfRecord) {
+ IUTF8HProfRecord utf8 = (IUTF8HProfRecord) record;
+ Long id = utf8.getNameID();
+ utf8s.put(id, r);
+
+ } else if (record instanceof ILoadClassHProfRecord) {
+ JavaClass c=new JavaClass(r);
+ loadedClassesBySerial.put(c.getClassSerialNumber(),c);
+ } else if (record instanceof IUnloadClassHProfRecord) {
+ // Remove a loaded class if it is subsequently unloaded.
+ loadedClassesBySerial.remove(((IUnloadClassHProfRecord)record).getClassSerialNumber());
+ } else if (record instanceof IThreadActiveHProfRecord) {
+ ActiveJavaThread ajt = new ActiveJavaThread(r);
+
+ threadRecordNO.add( ajt );
+
+ // add by serial number
+ activeThreadsBySerial.put(ajt.getThreadSerialNumber(), ajt);
+ } else if (record instanceof IThreadEndingHProfRecord) {
+ InactiveJavaThread ijt = new InactiveJavaThread(r);
+
+ threadRecordNO.add(ijt);
+ // remove thread by serial number.
+ //SRDM activeThreadsBySerial.remove(ijt.getThreadSerialNumber());
+ } else if (record instanceof IJavaStackTraceHProfRecord) {
+ // Stack traces should be attached to threads
+ // keep the most recent. Attach to thread so that when thread removed,
+ // stacktrace is removed too.
+ IJavaStackTraceHProfRecord stackTrace = (IJavaStackTraceHProfRecord) record;
+ int sn = stackTrace.getSerialNumber();
+
+ stackTraces.put(sn, r);
+ javastacks.add(r);
+
+ // Attach this stack trace to its thread if the thread
+ // exists and this trace is newer.
+ int threadSerial = stackTrace.getThreadSerialNumber();
+ IJavaThread ajt = activeThreadsBySerial.get(threadSerial);
+ if(ajt != null) {
+ ((ActiveJavaThread)ajt).setStackTrace(stackTrace);
}
- else if(record instanceof IHeapDumpHProfRecord) {
- heapRecord=(IHeapDumpHProfRecord) record;
- heapRecordNo=r;
- idToLocationMap = new IDToLocationHashMapper();
- summariseHeap(heapRecord);
- }
- r++;
- }
-
- heapRecordLocation=file.getRecordLocation(heapRecordNo);
-
- utf8ids = utf8s.keySet().toArray(new Long[0]);
- loadedClassRecordNumbers = loadedClassesRecordNO
- .toArray(new IJavaClass[0]);
+ } else if (record instanceof IJavaStackFrameHProfRecord) {
+ IJavaStackFrameHProfRecord frame = (IJavaStackFrameHProfRecord) record;
+ long id = frame.getStackFrameID();
+ stackTraceFrames.put(id, r);
- threads = threadRecordNO.toArray(new IJavaThread[0]);
- stackTraceRecords=javastacks.toArray(new Integer[0]);
-
- correlateClasses();
-
- } catch (IOException e) {
+ }
+ else if(record instanceof IHeapDumpHProfRecord) {
+ heapRecord=(IHeapDumpHProfRecord) record;
+ heapRecordNo=r;
- monitor.error(e);
+ idToLocationMap = new IDToLocationHashMapper();
+ summariseHeap(heapRecord);
+ }
+ r++;
}
+
+ heapRecordLocation=file.getRecordLocation(heapRecordNo);
+
+ utf8ids = utf8s.keySet().toArray(new Long[0]);
+ loadedClassRecordNumbers = loadedClassesRecordNO
+ .toArray(new IJavaClass[0]);
+
+ threads = threadRecordNO.toArray(new IJavaThread[0]);
+ stackTraceRecords=javastacks.toArray(new Integer[0]);
+
+ correlateClasses();
}
private IJavaClass[] primitiveArrayClasses = new IJavaClass[8];