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/13 16:57:13 UTC
svn commit: r774430 - in /incubator/kato/trunk/KatoHProfAdapterPOC:
src/org/apache/kato/hprof/java/ testsrc/org/apache/kato/hprof/java/
testsrc/test/apache/kato/hprof/
Author: monteith
Date: Wed May 13 16:57:09 2009
New Revision: 774430
URL: http://svn.apache.org/viewvc?rev=774430&view=rev
Log:
Apply updates - added JavaThread and stacks support. Some incomplete work on testcases too.
Added:
incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java (with props)
incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java (with props)
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java (with props)
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java (with props)
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java (with props)
Modified:
incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java
incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java
incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java
incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaHeapImpl.java Wed May 13 16:57:09 2009
@@ -253,7 +253,8 @@
name ="<invalid primitive class type "+type+">";
}
- clazz = primitiveClasses[type-4] = new JavaPrimitiveClassImpl(name, type);
+ clazz = primitiveClasses[type-4] = new JavaPrimitiveClassImpl(name, type,
+ this.getJavaClassLoaderByID(0)); // The system class loader is 0
}
return clazz;
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaPrimitiveClassImpl.java Wed May 13 16:57:09 2009
@@ -32,21 +32,22 @@
public class JavaPrimitiveClassImpl implements JavaClass {
private String name;
private int id;
-
- public JavaPrimitiveClassImpl(String name, int id) {
+ private JavaClassLoader loader;
+
+ public JavaPrimitiveClassImpl(String name, int id, JavaClassLoader loader) {
this.name = name;
this.id = id;
+ this.loader = loader;
}
@Override
public JavaClassLoader getClassLoader() throws CorruptDataException {
- // TODO This should probably exist.
- return null;
+ return loader;
}
@Override
public JavaClass getComponentType() throws CorruptDataException {
- return null;
+ throw new IllegalArgumentException("Primitive class is not an array. There is no component type");
}
@Override
@@ -86,6 +87,9 @@
return name;
}
+ /**
+ * Primitive type have no superclass - not even java/lang/Object.
+ */
@Override
public JavaObject getObject() throws CorruptDataException {
return null;
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaRuntimeImpl.java Wed May 13 16:57:09 2009
@@ -14,23 +14,16 @@
package org.apache.kato.hprof.java;
import java.io.IOException;
-import java.util.HashMap;
+import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
-import java.util.WeakHashMap;
-import org.apache.kato.common.BasicType;
import org.apache.kato.common.IViewMonitor;
import org.apache.kato.hprof.HProfView;
-import org.apache.kato.hprof.IJavaClass;
-import org.apache.kato.hprof.IJavaClassLoader;
+import org.apache.kato.hprof.IJavaThread;
import org.apache.kato.hprof.datalayer.HProfFile;
-import org.apache.kato.hprof.datalayer.IGCInstanceHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IGCObjectArrayHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IGCPrimitiveArrayHeapDumpRecord;
-import org.apache.kato.hprof.datalayer.IHeapObject;
+import org.apache.kato.hprof.image.CorruptDataImpl;
import org.apache.kato.image.CorruptDataException;
import org.apache.kato.image.DataUnavailable;
import org.apache.kato.image.ImagePointer;
@@ -114,30 +107,68 @@
}
+ /**
+ *
+ * Monitors aren't present in HProf, so return an empty iterator.
+ *
+ * @return empty Iterator
+ */
@Override
- public Iterator getMonitors() {
-
- return null;
+ public Iterator getMonitors() {
+ return (new LinkedList()).iterator();
}
+ /**
+ * Returns an object with a given object ID.
+ * This is not the same as the objects address, which is unknown in HProf.
+ * This method is the mirror of JavaObject.getID().
+ *
+ * @return JavaObject with the given object ID.
+ * @throws IllegalArgumentException If an object with the given ID can't be found.
+ *
+ */
@Override
public JavaObject getObjectAtAddress(ImagePointer address)
throws CorruptDataException, IllegalArgumentException,
MemoryAccessException, DataUnavailable {
- return heap.getObjectByID(address.getAddress());
+ JavaObject obj = heap.getObjectByID(address.getAddress());
+
+ if (obj == null) {
+ throw new IllegalArgumentException("Couldn't retrieve object @"+
+ Long.toHexString(address.getAddress()));
+ }
+
+ return obj;
}
+ private List<JavaThreadImpl> threads = null;
@Override
public Iterator getThreads() {
- // TODO Auto-generated method stub
- return null;
+ if(threads == null) {
+ threads = new LinkedList<JavaThreadImpl>();
+
+ Collection<IJavaThread> ithreads = view.getActiveThreads();
+ Iterator<IJavaThread> iter = ithreads.iterator();
+
+ while (iter.hasNext()) {
+
+ threads.add(new JavaThreadImpl(heap, iter.next()));
+ }
+ }
+
+ return threads.iterator();
}
+ /**
+ * HProf could potentially return trace buffers, through analysing the
+ * stack trace records, etc.
+ * This isn't done now - the emphasis is on the heap, and threads.
+ * This method may even be removed.
+ */
@Override
public Object getTraceBuffer(String bufferName, boolean formatted)
throws CorruptDataException {
- // TODO Auto-generated method stub
- return null;
+ throw new CorruptDataException(new CorruptDataImpl("There are no trace buffers"));
}
@Override
Added: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,213 @@
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.kato.hprof.IJavaStackFrame;
+import org.apache.kato.hprof.image.ImagePointerImpl;
+import org.apache.kato.image.CorruptDataException;
+import org.apache.kato.image.DataUnavailable;
+import org.apache.kato.image.ImagePointer;
+import org.apache.kato.image.KatoException;
+import org.apache.kato.java.JavaClass;
+import org.apache.kato.java.JavaLocation;
+import org.apache.kato.java.JavaMethod;
+import org.apache.kato.java.JavaStackFrame;
+
+/**
+ * A stack frame, wraps a {@link IJavaHeapInternal}.
+ *
+ */
+public class JavaStackFrameImpl implements JavaStackFrame {
+ private IJavaStackFrame frame;
+ private IJavaHeapInternal heap;
+
+ public JavaStackFrameImpl(IJavaHeapInternal heap, IJavaStackFrame frame) {
+ this.frame = frame;
+ this.heap = heap;
+ }
+
+ /**
+ * There is no stored frame bas pointer.
+ * Returns frame ID instead.
+ *
+ * FIXME Would like a DataUnavailable exception here.
+ */
+ @Override
+ public ImagePointer getBasePointer() throws CorruptDataException {
+ return new ImagePointerImpl(frame.getID());
+ }
+
+ @Override
+ public Iterator getHeapRoots() {
+ // TODO Need implementation here.
+ return null;
+ }
+
+ private JavaLocation location = new JavaLocationImpl();
+ @Override
+ public JavaLocation getLocation() throws CorruptDataException {
+ return location;
+ }
+
+ /**
+ * Implements a JavaLocation
+ * There is a 1:1 relationship with JavaStackFrames.
+ *
+ */
+ private class JavaLocationImpl implements JavaLocation {
+
+ /**
+ * For testing equality.
+ *
+ * @return IJavaStackFrame of this location
+ */
+ IJavaStackFrame getFrame() {
+ return frame;
+ }
+
+
+ @Override
+ public ImagePointer getAddress() throws CorruptDataException {
+ return new ImagePointerImpl(frame.getID());
+ }
+
+
+ /**
+ * Returns 1 if the method is compiled, otherwise returns 0
+ */
+ @Override
+ public int getCompilationLevel() throws CorruptDataException {
+ int level = frame.getLineNumber();
+
+ return level == -2 ? 1 : 0;
+ }
+
+ @Override
+ public String getFilename() throws DataUnavailable,
+ CorruptDataException {
+ return frame.getSourceFileName();
+ }
+
+ @Override
+ public int getLineNumber() throws DataUnavailable, CorruptDataException {
+ int level = frame.getLineNumber();
+
+ if (level < 0) {
+ throw new DataUnavailable("No line number information.");
+ }
+ return level;
+ }
+
+ private JavaMethodImpl method = new JavaMethodImpl();
+
+ @Override
+ public JavaMethod getMethod() throws CorruptDataException {
+ return method;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == null) return false;
+
+ if (! (obj instanceof JavaLocationImpl)) {
+ return false;
+ }
+
+ JavaLocationImpl otherLocation = (JavaLocationImpl) obj;
+
+ return otherLocation.getFrame().equals(frame);
+ }
+
+ // TODO
+ public String toString() {
+ return "a string";
+ }
+
+ }
+
+ /**
+ * A dummy method.
+ *
+ */
+ private class JavaMethodImpl implements JavaMethod {
+
+ /**
+ * HProf has no bytecode sections.
+ *
+ * @return empty Iterator
+ */
+ @Override
+ public Iterator getBytecodeSections() {
+ return (new LinkedList()).iterator();
+ }
+
+ /**
+ * HProf has no compiled code sections.
+ * @return empty Iterator
+ */
+ @Override
+ public Iterator getCompiledSections() {
+ return (new LinkedList()).iterator();
+ }
+
+ @Override
+ public JavaClass getDeclaringClass() throws CorruptDataException,
+ DataUnavailable {
+ return heap.getJavaClassByID(frame.getMethodClass().getClassObjectID());
+ }
+
+ /**
+ * HProf doesn't store modifiers.
+ * A method will never be reported as static.
+ *
+ * @return 0
+ */
+ @Override
+ public int getModifiers() throws CorruptDataException {
+ return 0;
+ }
+
+ @Override
+ public String getName() throws CorruptDataException {
+ return frame.getMethodName();
+ }
+
+ @Override
+ public String getSignature() throws CorruptDataException {
+ return frame.getMethodSignature();
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == null) return false;
+
+ if (! (obj instanceof JavaMethodImpl)) {
+ return false;
+ }
+
+ JavaMethodImpl otherMethod = (JavaMethodImpl) obj;
+
+ try {
+ if (otherMethod.getDeclaringClass().equals(getDeclaringClass()) &&
+ otherMethod.getName().equals(getName()) &&
+ otherMethod.getSignature().equals(getSignature())) {
+ return true;
+ }
+ } catch (CorruptDataException e) {
+ } catch (DataUnavailable e) {
+ }
+
+ return false;
+ }
+
+ /**
+ * @return String in format "classname.methodname(signature)";
+ */
+ public String toString() {
+ try {
+ return getDeclaringClass().getName()+"."+getName()+getSignature();
+ } catch (KatoException e) {
+ return "Exception on JavaMethodImpl.toString()+"+ e.getMessage();
+ }
+ }
+ }
+}
Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaStackFrameImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,116 @@
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Vector;
+
+import org.apache.kato.hprof.IJavaStack;
+import org.apache.kato.hprof.IJavaStackFrame;
+import org.apache.kato.hprof.IJavaThread;
+import org.apache.kato.hprof.image.ImagePointerImpl;
+import org.apache.kato.image.CorruptDataException;
+import org.apache.kato.image.DataUnavailable;
+import org.apache.kato.image.ImagePointer;
+import org.apache.kato.image.ImageThread;
+import org.apache.kato.java.JavaObject;
+import org.apache.kato.java.JavaThread;
+
+/**
+ * Implements a JavaThread by wrapping a IJavaThread from HprofView.
+ *
+ */
+public class JavaThreadImpl implements JavaThread {
+ private IJavaHeapInternal heap;
+ private IJavaThread thread;
+
+ public JavaThreadImpl(IJavaHeapInternal heap, IJavaThread thread) {
+ this.heap = heap;
+ this.thread = thread;
+ }
+
+ /**
+ * There are no image threads in hprof files.
+ *
+ * @throws DataUnavailable always - there are no ImageThreads
+ */
+ @Override
+ public ImageThread getImageThread() throws CorruptDataException,
+ DataUnavailable {
+ throw new DataUnavailable("ImageThreads not present in Hprof file.");
+ }
+
+
+ /**
+ * There are no JNIEnvs in Hprof.
+ * There is no DataUnavailable exception, so we wrap up the thread serial# in an
+ * image pointer.
+ *
+ * @return ImagePointer of thread serial number
+ */
+ @Override
+ public ImagePointer getJNIEnv() throws CorruptDataException {
+ return new ImagePointerImpl(thread.getThreadSerialNumber());
+ }
+
+ @Override
+ public String getName() throws CorruptDataException {
+ return thread.getThreadName();
+ }
+
+ @Override
+ public JavaObject getObject() throws CorruptDataException {
+ return heap.getObjectByID(thread.getThreadObjectID());
+ }
+
+ /**
+ * Priority not stored in Hprof.
+ *
+ * @return 0
+ */
+ @Override
+ public int getPriority() throws CorruptDataException {
+ return 0;
+ }
+
+ /**
+ *
+ * @return Iterator over all stack frames
+ */
+ private Vector<JavaStackFrameImpl> frames;
+ @Override
+ public Iterator getStackFrames() {
+ if(frames == null) {
+ IJavaStack stack =thread.getStack();
+ IJavaStackFrame[] stackFrames = stack.getStack();
+ frames = new Vector<JavaStackFrameImpl>(stackFrames.length);
+
+ for (IJavaStackFrame frame : stackFrames) {
+ frames.add(new JavaStackFrameImpl(heap, frame));
+ }
+ }
+
+ return frames.iterator();
+ }
+
+ /**
+ * Stack sections are not recorded in hprof files.
+ *
+ * @return empty iterator.
+ */
+ @Override
+ public Iterator getStackSections() {
+ return new LinkedList().iterator();
+ }
+
+ /**
+ * State isn't recorded in Hprof. Only live threads
+ * are reported, STATE_ALIVE can therefore be stated.
+ *
+ * @return STATE_ALIVE
+ */
+ @Override
+ public int getState() throws CorruptDataException {
+ return STATE_ALIVE;
+ }
+
+}
Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/src/org/apache/kato/hprof/java/JavaThreadImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/GCInstanceHeapDumpRecordTest.java Wed May 13 16:57:09 2009
@@ -15,76 +15,93 @@
import org.apache.kato.hprof.datalayer.IGCInstanceHeapDumpRecord;
+/**
+ * Implements a IGCInstanceHeapDumpRecord, to be wrapped by a JavaObjectInstanceImpl.
+ *
+ * uses setters to set values.
+ *
+ * These have to make sense in context with the classes.
+ *
+ */
public class GCInstanceHeapDumpRecordTest implements IGCInstanceHeapDumpRecord{
+ long[] slots;
+
+ public void setSlots(long[] slots) {
+ this.slots = slots;
+ }
+
+ long id;
+ public void setID(long id) {
+ this.id = id;
+ }
@Override
- public boolean getBooleanField(int offset) {
- // TODO Auto-generated method stub
- return false;
+ public long getID() {
+ return id;
+ }
+ long classObjectID;
+ public void setClassObjectID(long id) {
+ this.classObjectID = id;
}
+ @Override
+ public long getClassObjectID() {
+ return classObjectID;
+ }
+
+ int stackTraceNumber;
+ public void setStackTraceNumber(int num) {
+ this.stackTraceNumber = num;
+ }
@Override
- public byte getByteField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ public int getStackTraceNumber() {
+ return stackTraceNumber;
+ }
+
+ @Override
+ public boolean getBooleanField(int offset) {
+ return !(slots[offset] == 0L);
}
@Override
- public char getCharField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ public byte getByteField(int offset) {
+ return (byte) slots[offset];
}
@Override
- public long getClassObjectID() {
- return 12;
+ public char getCharField(int offset) {
+ return (char) slots[offset];
}
@Override
public double getDoubleField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return Double.longBitsToDouble(slots[offset]);
}
@Override
public float getFloatField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return Float.intBitsToFloat((int) slots[offset]);
}
@Override
public long getIDField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return slots[offset];
}
@Override
public int getIntegerField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return (int) slots[offset];
}
@Override
public long getLongField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return slots[offset];
}
@Override
public short getShortField(int offset) {
- // TODO Auto-generated method stub
- return 0;
+ return (short) slots[offset];
}
- @Override
- public long getID() {
- // TODO Auto-generated method stub
- return 0;
- }
- @Override
- public int getStackTraceNumber() {
- // TODO Auto-generated method stub
- return 0;
- }
}
\ No newline at end of file
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaHeapImplTest.java Wed May 13 16:57:09 2009
@@ -14,16 +14,27 @@
package org.apache.kato.hprof.java;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Iterator;
import org.apache.kato.java.JavaObject;
+/**
+ * A dummy implementation of IJavaHeapInternal.
+ *
+ * @author monteith
+ *
+ */
public class JavaHeapImplTest implements IJavaHeapInternal {
-
+ public HashMap<Long,JavaClassImpl> classImplIDMap = new HashMap<Long,JavaClassImpl>();
+
+ public void putJavaClassByID(JavaClassImpl clazz, long id) {
+ classImplIDMap.put(id, clazz);
+
+ }
@Override
public JavaClassImpl getJavaClassByID(long arrayClassObjectID) {
- // TODO Auto-generated method stub
- return null;
+ return classImplIDMap.get(arrayClassObjectID);
}
@Override
@@ -38,10 +49,13 @@
return null;
}
+ HashMap<Long,JavaObject> objectIDMap = new HashMap<Long,JavaObject>();
+ public void setObjectByID(Long id, JavaObject obj) {
+ objectIDMap.put(id, obj);
+ }
@Override
public JavaObject getObjectByID(Long element) {
- // TODO Auto-generated method stub
- return null;
+ return objectIDMap.get(element);
}
@Override
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaObjectInstanceImplTest.java Wed May 13 16:57:09 2009
@@ -1,6 +1,3 @@
-package org.apache.kato.hprof.java;
-
-
/*******************************************************************************
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,6 +11,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
+package org.apache.kato.hprof.java;
+
+
+
import junit.framework.TestCase;
public class JavaObjectInstanceImplTest extends TestCase {
@@ -24,6 +25,7 @@
public void setUp() {
heap = new JavaHeapImplTest();
gcInstance = new GCInstanceHeapDumpRecordTest();
+ gcInstance.setID(1);
instance = new JavaObjectInstanceImpl(heap, gcInstance);
}
@@ -55,6 +57,11 @@
}
public void testGetArraySize() throws Exception {
- //assert
+ try{
+ int size = instance.getArraySize();
+ fail("instance.getArraySize() didn't throw IllegalArgumentException - returned "+size);
+ } catch(IllegalArgumentException e) {
+ // Normal case.
+ }
}
}
Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java Wed May 13 16:57:09 2009
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.apache.kato.java.JavaClass;
+
+/**
+ * Tests the dummy class for representing dummy types.
+ * There is nothing to this class, except it's name ID and loader.
+ */
+public class JavaPrimitiveClassImplTest extends TestCase {
+ JavaPrimitiveClassImpl instance;
+ static String className = "name";
+ static int id = 10;
+
+ public void setUp() {
+ instance = new JavaPrimitiveClassImpl(className,id , null);
+ }
+
+ public void testName() throws Exception {
+ assertEquals(className, instance.getName());
+ }
+
+ public void testSuperClass() throws Exception {
+ assertNull(instance.getSuperclass());
+ }
+
+ public void testIsArray() throws Exception {
+ assertFalse(instance.isArray());
+ }
+
+ public void testGetObject() throws Exception {
+ assertNull(instance.getObject());
+ }
+
+ public void testGetModifiers() throws Exception {
+ assertEquals(0, instance.getModifiers());
+ }
+
+ public void testGetID() throws Exception {
+ assertEquals(id, instance.getID());
+ }
+
+ public void getComponentType() throws Exception {
+ try{
+ JavaClass clazz = instance.getComponentType();
+
+ fail("Expected IllegalArgumentException from getComponentType(), got " + clazz);
+ }catch(IllegalArgumentException e) {
+ // Expected
+ }
+ }
+
+ public void testGetConstantPoolReferences() throws Exception {
+ Iterator iter = instance.getConstantPoolReferences();
+
+ assertNotNull(iter);
+
+ assertFalse(iter.hasNext());
+ }
+
+ public void testGetDeclaredFields() throws Exception {
+ Iterator iter = instance.getDeclaredFields();
+
+ assertNotNull(iter);
+
+ assertFalse(iter.hasNext());
+ }
+
+ public void testGetDeclaredMethods() throws Exception {
+ Iterator iter = instance.getDeclaredMethods();
+
+ assertNotNull(iter);
+
+ assertFalse(iter.hasNext());
+ }
+
+
+ public void testGetInterfaces() throws Exception {
+ Iterator iter = instance.getInterfaces();
+
+ assertNotNull(iter);
+
+ assertFalse(iter.hasNext());
+ }
+
+ public void testGetReferences() throws Exception {
+ Iterator iter = instance.getReferences();
+
+ assertNotNull(iter);
+
+ assertFalse(iter.hasNext());
+ }
+
+}
Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaPrimitiveClassImplTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java Wed May 13 16:57:09 2009
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import org.apache.kato.hprof.IJavaClass;
+import org.apache.kato.hprof.datalayer.ConstantPoolEntry;
+import org.apache.kato.hprof.datalayer.InstanceFieldEntry;
+import org.apache.kato.hprof.datalayer.StaticFieldEntry;
+
+/**
+ * Implements a IJavaClass for consumption by
+ * JavaClassImpl.
+ *
+ * Uses setters to set all values.
+ */
+public class JavaTestClass implements IJavaClass {
+ long loaderID;
+ public void setClassLoadersObjectID(long id) {
+ this.loaderID = id;
+ }
+ @Override
+ public long getClassLoaderObjectID() {
+ return loaderID;
+ }
+
+ String className;
+ public void setClassName(String className) {
+ this.className = className;
+ }
+ @Override
+ public String getClassName() {
+ return className;
+ }
+
+ long classObjectID;
+ public void setClassObjectID(long id) {
+ this.classObjectID = id;
+ }
+ @Override
+ public long getClassObjectID() {
+ return classObjectID;
+ }
+
+ int serialNo;
+ public void setClassSerialNumber(int serialNo) {
+ this.serialNo = serialNo;
+ }
+ @Override
+ public int getClassSerialNumber() {
+ return serialNo;
+ }
+
+ ConstantPoolEntry[] constantPoolEntries;
+ public void setConstantPoolEntries(ConstantPoolEntry[] entries) {
+ this.constantPoolEntries = entries;
+ }
+
+ @Override
+ public ConstantPoolEntry[] getConstantPoolEntries() {
+ return constantPoolEntries;
+ }
+
+ InstanceFieldEntry[] instanceFieldEntries;
+ public void setInstanceFields(InstanceFieldEntry[] entries) {
+ this.instanceFieldEntries = entries;
+ }
+ @Override
+ public InstanceFieldEntry[] getInstanceFields() {
+ return instanceFieldEntries;
+ }
+
+
+ int instanceSize;
+ public void setInstanceSize(int size) {
+ this.instanceSize = size;
+ }
+ @Override
+ public int getInstanceSize() {
+ return instanceSize;
+ }
+
+ int offsetSize;
+ public void setOffsetSize(int size) {
+ this.offsetSize = size;
+ }
+ @Override
+ public int getOffsetSize() {
+ return offsetSize;
+ }
+
+ long protectionDomainObjectID;
+ public void setProtectionDomainObjectID(long id) {
+ this.protectionDomainObjectID = id;
+ }
+ @Override
+ public long getProtectionDomainObjectID() {
+ return protectionDomainObjectID;
+ }
+
+ long signersObjectID;
+ public void setSignersObjectID(long id) {
+ this.signersObjectID = id;
+ }
+ @Override
+ public long getSignersObjectID() {
+ return signersObjectID;
+ }
+
+ int stackTraceSerialNumber;
+ public void setStackTraceSerialNumber(int num) {
+ this.stackTraceSerialNumber = num;
+ }
+ @Override
+ public int getStackTraceSerialNumber() {
+ return stackTraceSerialNumber;
+ }
+
+ StaticFieldEntry staticFieldEntries[];
+ public void setStaticFields(StaticFieldEntry[] entries) {
+ this.staticFieldEntries = entries;
+ }
+ @Override
+ public StaticFieldEntry[] getStaticFields() {
+ return staticFieldEntries;
+ }
+
+ long superClassObjectID;
+ public void setSuperClassObjectID(long id) {
+ this.superClassObjectID = id;
+ }
+ @Override
+ public long getSuperClassObjectID() {
+ return superClassObjectID;
+ }
+
+}
Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/JavaTestClass.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java?rev=774430&view=auto
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java (added)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java Wed May 13 16:57:09 2009
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+package org.apache.kato.hprof.java;
+
+import org.apache.kato.common.BasicType;
+import org.apache.kato.hprof.datalayer.IGCPrimitiveArrayHeapDumpRecord;
+
+/**
+ *
+ * @author monteith
+ *
+ */
+public class PrimitiveArrayTestImpl implements IGCPrimitiveArrayHeapDumpRecord, BasicType{
+
+ long ID;
+ public void setID(long id) {
+ this.ID = id;
+ }
+ @Override
+ public long getID() {
+ return this.ID;
+ }
+
+ int stackTraceNumber;
+ public void setStackTraceNumber(int num) {
+ this.stackTraceNumber = num;
+ }
+ @Override
+ public int getStackTraceNumber() {
+ return stackTraceNumber;
+ }
+
+ @Override
+ public short getElementType() {
+ return elementType;
+ }
+
+ @Override
+ public int getNumberOfElements() {
+ return numElements;
+ }
+
+
+ boolean[] booleanArray;
+ byte[] byteArray;
+ char[] charArray;
+ short[] shortArray;
+ int[] intArray;
+ long[] longArray;
+ float[] floatArray;
+ double[] doubleArray;
+ short elementType;
+ int numElements;
+
+ public PrimitiveArrayTestImpl(boolean[] array) {
+ this.booleanArray = array;
+ this.numElements = array.length;
+ this.elementType = BOOLEAN;
+ }
+
+ @Override
+ public boolean getBooleanElement(int index) {
+ return booleanArray[index];
+ }
+
+ public PrimitiveArrayTestImpl(byte[] array) {
+ this.byteArray = array;
+ this.numElements = array.length;
+ this.elementType = BYTE;
+ }
+
+ @Override
+ public short getByteElement(int index) {
+ return byteArray[index];
+ }
+
+ public PrimitiveArrayTestImpl(char[] array) {
+ this.charArray = array;
+ this.numElements = array.length;
+ this.elementType = CHAR;
+ }
+
+ @Override
+ public char getCharElement(int index) {
+ return charArray[index];
+ }
+
+ public PrimitiveArrayTestImpl(double[] array) {
+ this.doubleArray = array;
+ this.numElements = array.length;
+ this.elementType = DOUBLE;
+ }
+
+ @Override
+ public double getDoubleElement(int index) {
+ return doubleArray[index];
+ }
+
+
+
+ public PrimitiveArrayTestImpl(float[] array) {
+ this.floatArray = array;
+ this.numElements = array.length;
+ this.elementType = FLOAT;
+ }
+
+ @Override
+ public float getFloatElement(int index) {
+ return floatArray[index];
+ }
+ public PrimitiveArrayTestImpl(int[] array) {
+ this.intArray = array;
+ this.numElements = array.length;
+ this.elementType = INT;
+ }
+ @Override
+ public int getIntElement(int index) {
+ return intArray[index];
+ }
+
+ public PrimitiveArrayTestImpl(long[] array) {
+ this.longArray = array;
+ this.numElements = array.length;
+ this.elementType = LONG;
+ }
+
+ @Override
+ public long getLongElement(int index) {
+ return longArray[index];
+ }
+
+
+
+ public PrimitiveArrayTestImpl(short[] array) {
+ this.shortArray = array;
+ this.numElements = array.length;
+ this.elementType = SHORT;
+ }
+
+ @Override
+ public short getShortElement(int index) {
+ return shortArray[index];
+ }
+
+
+}
Propchange: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/org/apache/kato/hprof/java/PrimitiveArrayTestImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java
URL: http://svn.apache.org/viewvc/incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java?rev=774430&r1=774429&r2=774430&view=diff
==============================================================================
--- incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java (original)
+++ incubator/kato/trunk/KatoHProfAdapterPOC/testsrc/test/apache/kato/hprof/TestJavaHeap.java Wed May 13 16:57:09 2009
@@ -17,8 +17,6 @@
import org.apache.kato.hprof.HProfView;
import org.apache.kato.hprof.java.JavaHeapImpl;
-import org.apache.kato.hprof.java.JavaRuntimeImpl;
-import org.apache.kato.java.JavaRuntime;
import test.apache.kato.hprof.image.AbstractHProfTestCase;
@@ -37,11 +35,10 @@
public void testBadHeapRecordIDConstructor() throws IOException {
- getMinimalImage();
- JavaRuntimeImpl rt= (JavaRuntimeImpl) getJavaRuntime();
+ HProfView view=getMinimalHProfView();
try {
- JavaHeapImpl impl=new JavaHeapImpl(rt,0);
+ JavaHeapImpl impl=new JavaHeapImpl(view,0);
fail("expected illegal argument exception");
}
catch(IllegalArgumentException iae) {