Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 209343 | Differences between
and this patch

Collapse All | Expand All

(-)src-hierarchy/org/eclipse/hyades/loaders/hierarchy/IgnoredXMLFragmentLoader.java (-2 / +28 lines)
Lines 11-16 Link Here
11
 **********************************************************************/
11
 **********************************************************************/
12
package org.eclipse.hyades.loaders.hierarchy;
12
package org.eclipse.hyades.loaders.hierarchy;
13
13
14
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
14
import org.eclipse.hyades.loaders.util.HierarchyContext;
15
import org.eclipse.hyades.loaders.util.HierarchyContext;
15
import org.eclipse.hyades.loaders.util.XMLFragmentLoader;
16
import org.eclipse.hyades.loaders.util.XMLFragmentLoader;
16
17
Lines 18-24 Link Here
18
/**
19
/**
19
 * @author slavescu
20
 * @author slavescu
20
 */
21
 */
21
public class IgnoredXMLFragmentLoader implements XMLFragmentLoader {
22
public class IgnoredXMLFragmentLoader implements XMLFragmentLoader, BinaryFragmentLoader {
22
    //~ Instance fields ----------------------------------------------------------------------------
23
    //~ Instance fields ----------------------------------------------------------------------------
23
24
24
    protected HierarchyContext context;
25
    protected HierarchyContext context;
Lines 29-35 Link Here
29
    	// do nothing
30
    	// do nothing
30
    }
31
    }
31
32
32
    public void addCharacters(char[] data, int offset, int length) {
33
    /**
34
     * Inefficient, pilot version.
35
     * TODO These methods should invoke real setters w/o toString conversion. 
36
     */
37
	public void addAttribute(String name, byte value) {
38
		addAttribute(name, Byte.toString(value));
39
	}
40
41
	public void addAttribute(String name, short value) {
42
		addAttribute(name, Short.toString(value));
43
	}
44
45
	public void addAttribute(String name, int value) {
46
		addAttribute(name, Integer.toString(value));
47
	}
48
49
	public void addAttribute(String name, long value) {
50
		addAttribute(name, Long.toString(value));
51
	}
52
53
	public void addAttribute(String name, double value) {
54
		addAttribute(name, Double.toString(value));
55
	}
56
57
	public void addCharacters(char[] data, int offset, int length) {
33
    	// do nothing
58
    	// do nothing
34
    }
59
    }
35
60
Lines 52-55 Link Here
52
    public void startChild(String name) {
77
    public void startChild(String name) {
53
    	// do nothing
78
    	// do nothing
54
    }
79
    }
80
55
}
81
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFNodeParser.java (+31 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFNodeParser extends BinaryFragmentParser {
10
	
11
	public static final Short ID = new Short((short)1001);
12
13
	public static final String NAME = "node";
14
15
	public BFNodeParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(NODE_ID, reader.readString(data, offset));
24
		loader.addAttribute(HOSTNAME, reader.readString(data, offset));
25
		loader.addAttribute(IPADDRESS, reader.readString(data, offset));
26
		loader.addAttribute(TIMEZONE, reader.readTimestamp(data, offset));
27
		loader.addAttribute(TIMESTAMP, reader.readLong(data, offset));
28
		
29
		return true;
30
	}
31
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFGCFinishParser.java (+35 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFGCFinishParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1027);
12
13
	public static final String NAME = "gcFinish";
14
15
	public BFGCFinishParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(TOTAL_OBJECT_SPACE, reader.readLong(data, offset));
27
		loader.addAttribute(USED_OBJECT_SPACE, reader.readLong(data, offset));
28
		loader.addAttribute(USED_OBJECTS, reader.readLong(data, offset));
29
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
30
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
31
		
32
		return true;
33
	}
34
35
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFThreadStartParser.java (+37 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFThreadStartParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1009);
12
13
	public static final String NAME = "threadStart";
14
15
	public BFThreadStartParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		// transThreadId ignored
24
		loader.addAttribute(TRANS_THREAD_ID, reader.readLong(data, offset));
25
		loader.addAttribute(THREAD_ID, (int)reader.readLong(data, offset));
26
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
27
		loader.addAttribute(GROUP_NAME, reader.readString(data, offset));
28
		loader.addAttribute(PARENT_NAME, reader.readString(data, offset));
29
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
30
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
31
		loader.addAttribute(THREAD_NAME, reader.readString(data, offset));
32
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
33
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
34
			
35
		return true;
36
	}
37
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFGCRootParser.java (+29 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFGCRootParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1039);
12
	
13
	public static final String NAME = "gcRoot"; 
14
15
	public BFGCRootParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(CLASS_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
25
		loader.addAttribute(TYPE, reader.readString(data, offset));
26
		
27
		return true;
28
	}
29
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFInvocationContextParser.java (+35 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFInvocationContextParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1018);
11
12
	public static final String NAME = "invocationContext";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
16
//		// NodeIdRef ignored
17
//		reader.readLong(data, offset);
18
//		// processIdRef ignored
19
//		reader.readLong(data, offset);
20
//		// agentIdRef ignored
21
//		reader.readLong(data, offset);
22
//		// threadIdRef ignored
23
//		reader.readLong(data, offset);
24
//		// ticket ignored
25
//		reader.readInt(data, offset);
26
//		// sequenceNumber ignored
27
//		reader.readLong(data, offset);
28
//		// colValue ignored
29
//		reader.readString(data, offset);
30
//		// traceIdRef ignored
31
//		reader.readString(data, offset);
32
		
33
		return true;
34
	}
35
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFAgentCreateParser.java (+33 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFAgentCreateParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1003);
12
13
	public static final String NAME = "agentCreate";
14
15
	public BFAgentCreateParser() {
16
		super(ID, NAME);
17
	}
18
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
		
23
		loader.addAttribute(AGENT_ID, reader.readString(data, offset));
24
		loader.addAttribute(PROCESS_ID_REF, reader.readString(data, offset));
25
		loader.addAttribute(AGENT_NAME, reader.readString(data, offset));
26
		loader.addAttribute(AGENT_TYPE, reader.readString(data, offset));
27
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
28
		loader.addAttribute(AGENT_PARAMETERS, reader.readString(data, offset));
29
		loader.addAttribute(VERSION, reader.readString(data, offset));
30
		
31
		return true;
32
	}
33
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMonContendedEnterParser.java (+38 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMonContendedEnterParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short) 1034);
12
	
13
	public static final String NAME = "monContendedEnter"; 
14
15
	public BFMonContendedEnterParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
26
		loader.addAttribute(THREAD_OWNER, (int) reader.readLong(data, offset));
27
		
28
		long stackDepth = reader.readUnsignedInt(data, offset);
29
		
30
		String[] stackMethods = reader.readStringArray(data, (int)stackDepth, offset); // Possible truncation
31
		addAnnotation(loader, stackMethods, CALL_STACK_METHODS);
32
33
		Long[] stackLines = reader.readLongArray(data, (int)stackDepth, offset);
34
		addAnnotation(loader, stackLines, CALL_STACK_LINES);
35
		
36
		return true;
37
	}
38
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFObjAllocParser.java (+40 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFObjAllocParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1013);
12
13
	public static final String NAME = "objAlloc";
14
15
	public BFObjAllocParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(IS_ARRAY, reader.readByte(data, offset));
27
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
28
		loader.addAttribute(OBJ_ID, reader.readLong(data, offset));
29
		loader.addAttribute(SIZE, (int) reader.readLong(data, offset));
30
		loader.addAttribute(LINE, (int) reader.readLong(data, offset));
31
		loader.addAttribute(METHOD_ID_REF, (int)reader.readLong(data, offset));
32
		loader.addAttribute(TRANS_CLASS_ID_REF, reader.readLong(data, offset));
33
		loader.addAttribute(CLASS_ID_REF, reader.readLong(data, offset));
34
		loader.addAttribute(CONTEXT_DATA, reader.readString(data, offset));
35
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
36
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
37
		
38
		return true;
39
	}
40
}
(-)src-hierarchy/org/eclipse/hyades/loaders/util/BinaryLoader.java (+69 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.util;
2
3
import java.io.FileInputStream;
4
import java.io.IOException;
5
import java.io.InputStream;
6
7
import org.eclipse.hyades.loaders.internal.binary.BFHeader;
8
import org.eclipse.hyades.loaders.internal.binary.BFParser;
9
import org.eclipse.hyades.loaders.internal.binary.BFParserFactory;
10
import org.eclipse.hyades.loaders.internal.binary.BFReader;
11
import org.eclipse.hyades.loaders.internal.binary.Offset;
12
import org.eclipse.hyades.models.hierarchy.TRCAgent;
13
import org.eclipse.hyades.models.hierarchy.TRCAgentProxy;
14
import org.eclipse.hyades.models.hierarchy.TRCMonitor;
15
import org.eclipse.hyades.models.hierarchy.util.internal.InvalidEventException;
16
17
public class BinaryLoader extends XMLLoader {
18
19
	private final BFParserFactory parserFactory = new BFParserFactory();
20
	
21
	public BinaryLoader(TRCAgent agent) {
22
		super(agent);
23
	}
24
25
	public BinaryLoader(TRCAgentProxy agentProxy) {
26
		super(agentProxy);
27
	}
28
29
	public BinaryLoader(TRCMonitor monitor) {
30
		super(monitor);
31
	}
32
33
	public void loadEvents(InputStream inputStream, long offset, long length) throws InvalidEventException {
34
35
		if (offset > 0) {
36
			try {
37
				inputStream.skip(offset);
38
			} catch (IOException e) {
39
				e.printStackTrace();
40
			}
41
		}
42
		Offset marker = new Offset((int)offset, length);
43
44
		try {
45
			BFHeader formatHeader = new BFHeader(inputStream, marker);
46
			
47
			BFReader reader = new BFReader();
48
			formatHeader.visit(reader);
49
			
50
			BFParser parser = parserFactory.get(formatHeader, context, reader);
51
			
52
			parser.parseEvents(inputStream, marker);
53
		} catch (Exception e) {
54
			e.printStackTrace();
55
			throw new InvalidXMLException(e);
56
		}
57
	}
58
	
59
	/**
60
	 * @param args
61
	 * @throws Exception 
62
	 */
63
	public static void main(String[] args) throws Exception {
64
		FileInputStream inputStream = new FileInputStream(args[0]);
65
		BinaryLoader loader = new BinaryLoader((TRCAgent)null);
66
		loader.loadEvents(inputStream, 0, Integer.MAX_VALUE);
67
	}
68
69
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFObjFreeParser.java (+37 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFObjFreeParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1024);
12
13
	public static final String NAME = "objFree";
14
15
	public BFObjFreeParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
27
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
28
		loader.addAttribute(OBJ_AGE, reader.readLong(data, offset));
29
		loader.addAttribute(SEQUENCE_COUNTER, reader.readLong(data, offset));
30
		loader.addAttribute(STACK_DEPTH, reader.readLong(data, offset));
31
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
32
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
33
		
34
		return true;
35
	}
36
37
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFThrowParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFThrowParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1028);
11
12
	public static final String NAME = "throw";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BFHeader.java (+198 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import java.io.IOException;
4
import java.io.InputStream;
5
import java.util.HashMap;
6
import java.util.Map;
7
8
public class BFHeader {
9
	
10
	public static final int LENGTH = 12;
11
	
12
	private Magic magic;
13
	
14
	private Version version;
15
16
	private Platform platform;
17
	
18
	private Endianness endianness;
19
20
	public BFHeader(InputStream inputStream, Offset offset) throws IOException {
21
		Offset marker = new Offset(0, LENGTH);
22
		byte[] header = new byte[LENGTH];
23
24
		if (inputStream.read(header) < 0) {
25
			throw new IllegalArgumentException("Malformed header");
26
		}
27
		// indent is ignored
28
		marker.increaseOffset(1);
29
		magic = Magic.read(header, marker);
30
		if (magic == null) {
31
			throw new IllegalArgumentException("Format is not supported");
32
		}
33
		version = Version.read(header, marker);
34
		if (version == null) {
35
			throw new IllegalArgumentException("Version is not supported");
36
		}
37
		platform = Platform.read(header, marker);
38
		if (platform == null) {
39
			throw new IllegalArgumentException("Platform is not supported");
40
		}
41
		endianness = Endianness.read(header, marker);
42
		if (endianness == null) {
43
			throw new IllegalArgumentException("Endianness is not supported");
44
		}
45
		// offset to data is ignored at the moment
46
		
47
		offset.increaseOffset(LENGTH);
48
	}
49
50
	public Magic getMagic() {
51
		return magic;
52
	}
53
54
	public Platform getPlatform() {
55
		return platform;
56
	}
57
58
	public Endianness getEndianness() {
59
		return endianness;
60
	}
61
62
	public Version getVersion() {
63
		return version;
64
	}
65
66
	public BFReader visit(BFReader reader) {
67
		if (Platform.IA32.equals(platform) && Endianness.LITTLE_ENDIAN.equals(endianness)) {
68
			reader.setNumberReader(BFReader.LE_64_READER);
69
		} else if (Platform.IA64.equals(platform) && Endianness.LITTLE_ENDIAN.equals(endianness)) {
70
			reader.setNumberReader(BFReader.LE_64_READER);
71
		}
72
		
73
		return reader;
74
	}
75
	
76
	public static class Magic {
77
78
		private static Map entries = new HashMap();
79
		
80
		public static int LENGTH = 3;
81
		
82
		public static final Magic TBF_INDENT = new Magic("TBF");
83
			
84
		private final String magic;
85
		
86
		public Magic(String magic) {
87
			this.magic = magic;
88
			entries.put(magic, this);
89
		}
90
91
		public String getMagic() {
92
			return magic;
93
		}
94
		
95
		public static Magic read(byte[] header, Offset offset) {
96
			String magic = new String(header, offset.increaseOffset(LENGTH), LENGTH);
97
			return (Magic) entries.get(magic);
98
		}
99
	}
100
	
101
	public static class Platform {
102
103
		private static Map entries = new HashMap();
104
		
105
		public static final Platform IA32 = new Platform(0);
106
107
		public static final Platform IA64 = new Platform(1);
108
		
109
110
		private final int code;
111
		
112
		public Platform(int code) {
113
			this.code = code;
114
			entries.put(new Integer(code), this);
115
		}
116
117
		public int getCode() {
118
			return code;
119
		}
120
121
		public static Platform read(byte[] header, Offset offset) {
122
			int code = header[offset.increaseOffset(1)];
123
			return (Platform) entries.get(new Integer(code));
124
		}
125
	}
126
	
127
	public static class Endianness {
128
		private static Map entries = new HashMap();
129
130
		public static final Endianness BIG_ENDIAN = new Endianness(0);
131
		
132
		public static final Endianness LITTLE_ENDIAN = new Endianness(1);
133
134
		private final int code;
135
		
136
		public Endianness(int code) {
137
			this.code = code;
138
			entries.put(new Integer(code), this);
139
		}
140
141
		public int getCode() {
142
			return code;
143
		}
144
		
145
		public static Endianness read(byte[] header, Offset offset) {
146
			int code = header[offset.increaseOffset(1)];
147
			return (Endianness) entries.get(new Integer(code));
148
		}
149
	}
150
	
151
	public static class Version {
152
		private static Map entries = new HashMap();
153
154
		public static final Version VERSION_1_0 = new Version(1.0);
155
		
156
		private final double version;
157
		
158
		public Version(double version) {
159
			this.version = version;
160
			entries.put(new Double(version), this);
161
		}
162
163
		public double getVersion() {
164
			return version;
165
		}
166
167
		public static Version read(byte[] header, Offset offset) {
168
			int major = header[offset.increaseOffset(1)];
169
			int minor = header[offset.increaseOffset(1)];
170
			double ver = major + (minor * 0.1);
171
			return (Version) entries.get(new Double(ver));
172
		}
173
	}
174
	
175
	public static class Encoding {
176
		private static Map entries = new HashMap();
177
178
		public static final Encoding UTF8 = new Encoding(0);
179
		
180
		public static final Encoding ASCII = new Encoding(1);
181
182
		private final int code;
183
		
184
		public Encoding(int code) {
185
			this.code = code;
186
			entries.put(new Integer(code), this);
187
		}
188
189
		public int getCode() {
190
			return code;
191
		}
192
		
193
		public static Encoding read(byte[] header, Offset offset) {
194
			int code = header[offset.increaseOffset(1)];
195
			return (Encoding) entries.get(new Integer(code));
196
		}
197
	}
198
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BFReader.java (+234 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import java.io.UnsupportedEncodingException;
4
5
public class BFReader implements NumberReader, StringReader {
6
7
8
	public static final StringReader ASCII_READER = new StringReader() {
9
			private static final char EOS = '\0';
10
			
11
			private static final String DEFAULT_ENCODING = "UTF-8";
12
13
			private String encoding = DEFAULT_ENCODING;
14
			
15
			public void setEncoding(String encoding) {
16
				this.encoding = encoding;
17
			}
18
19
			public String readString(byte[] b, Offset offset) {
20
				int start = offset.getOffset();
21
				int end = -1;
22
				for(int i = start; i < b.length; ++i) {
23
					char c = (char) b[i];
24
					if (c == EOS) {
25
						end = i;
26
						break;
27
					}
28
				}
29
				
30
				if (end >= 0) {
31
					int stringOffset = (end - start) + 1;
32
					if (offset.increaseOffset(stringOffset) < 0) {
33
						return null;
34
					}
35
					
36
					try {
37
						return new String(b, start, stringOffset - 1, encoding);
38
					} catch (UnsupportedEncodingException e) {
39
						setEncoding(DEFAULT_ENCODING);
40
						return  new String(b, start, stringOffset - 1);
41
					}
42
				}
43
				return null;
44
			}
45
46
			public String[] readStringArray(byte[] b, int length, Offset offset) {
47
				String[] res = new String[length];
48
				for (int i = 0; i < length; ++i) {
49
					res[i] = readString(b, offset);
50
				}
51
				return res;
52
			}
53
54
		};
55
	
56
	public static final NumberReader LE_64_READER = new NumberReader() { // Little-endian, IA64
57
58
			private long cpuFrequency;
59
			
60
			public short readShort(byte[] b, Offset offset) {
61
				int start = offset.getOffset();
62
		        if (offset.increaseOffset(2) < 0) {
63
		        	return 0;
64
		        }
65
		        int ch1 = b[start];
66
		        int ch2 = b[start + 1];
67
		        
68
		        return (short)((ch2 << 8) + (ch1 << 0));			
69
			} 
70
			
71
			public int readUnsignedShort(byte[] b, Offset offset) {
72
				int start = offset.getOffset();
73
		        if (offset.increaseOffset(2) < 0) {
74
		        	return 0;
75
		        }
76
		        int ch1 = b[start] & 0xFF;
77
		        int ch2 = b[start + 1] & 0xFF;
78
		        
79
		        return ((ch2 << 8) + (ch1 << 0));			
80
			}
81
82
			public int readInt(byte[] b, Offset offset) {
83
				int start = offset.getOffset();
84
				if (offset.increaseOffset(4) < 0) {
85
					return 0;
86
				}
87
		        int ch1 = b[start];
88
		        int ch2 = b[start + 1];
89
		        int ch3 = b[start + 2];
90
		        int ch4 = b[start + 3];
91
		        
92
		        return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 << 0));
93
			}
94
		
95
			public long readUnsignedInt(byte[] b, Offset offset) {
96
				int start = offset.getOffset();
97
				if (offset.increaseOffset(4) < 0) {
98
					return 0;
99
				}
100
		        int ch1 = b[start] & 0xFF;
101
		        int ch2 = b[start + 1] & 0xFF;
102
		        int ch3 = b[start + 2] & 0xFF;
103
		        int ch4 = b[start + 3] & 0xFF;
104
		        
105
		        return ((ch4 << 24) + (ch3 << 16) + (ch2 << 8) + (ch1 >> 0));
106
			}
107
108
			public long readLong(byte[] b, Offset offset) {
109
				int start = offset.getOffset();
110
				if (offset.increaseOffset(8) < 0) {
111
					return 0;
112
				}
113
		        int ch1 = b[start];
114
		        int ch2 = b[start + 1];
115
		        int ch3 = b[start + 2];
116
		        int ch4 = b[start + 3];
117
		        int ch5 = b[start + 4];
118
		        int ch6 = b[start + 5];
119
		        int ch7 = b[start + 6];
120
		        int ch8 = b[start + 7];
121
		        
122
		        return (((long)ch8 << 56) + ((long)(ch7 & 255) << 48) + ((long)(ch6 & 255) << 40) + ((long)(ch5 & 255) << 32) +
123
		                ((long)(ch4 & 255) << 24) + ((ch3 & 255) << 16) + ((ch2 & 255) <<  8) + ((ch1 & 255) <<  0));
124
	        }
125
126
			public Long[] readLongArray(byte[] b, int length, Offset offset) {
127
				Long[] res = new Long[length];
128
				for (int i = 0; i < length; ++i) {
129
					res[i] = new Long(readLong(b, offset));
130
				}
131
				return res;
132
			}
133
134
			public void setCpuFrequency(long frequency) {
135
				this.cpuFrequency = frequency;
136
			}
137
138
			public double readTimestamp(byte[] b, Offset offset) {
139
				long value = readLong(b, offset);
140
				
141
				if (cpuFrequency > 0) {
142
					value /= cpuFrequency;
143
				}
144
				
145
		    	double high = (value / 1000000000);
146
		    	double low = (value % 1000000000) * 0.000000001;
147
		    	double result = high + low;
148
149
		    	return result;
150
			}
151
152
		};
153
	
154
	private NumberReader numberReader;
155
	
156
	private StringReader stringReader;
157
158
	public BFReader(NumberReader numberReader, StringReader stringReader) {
159
		this.numberReader = numberReader;
160
		this.stringReader = stringReader;
161
	}
162
	
163
	public BFReader() {
164
		this(LE_64_READER, ASCII_READER);
165
	}
166
167
	public NumberReader getNumberReader() {
168
		return numberReader;
169
	}
170
171
	public void setNumberReader(NumberReader numberReader) {
172
		this.numberReader = numberReader;
173
	}
174
175
	public StringReader getStringReader() {
176
		return stringReader;
177
	}
178
179
	public void setStringReader(StringReader stringReader) {
180
		this.stringReader = stringReader;
181
	}
182
183
	public String readString(byte[] b, Offset offset) {
184
		return stringReader.readString(b, offset);
185
	}
186
	
187
	public String[] readStringArray(byte[] b, int length, Offset offset) {
188
		return stringReader.readStringArray(b, length, offset);
189
	}
190
191
	public byte readByte(byte[] b, Offset offset) {
192
		int start = offset.getOffset();
193
		if (offset.increaseOffset(1) < 0) {
194
			return 0;
195
		}
196
		return b[start];
197
	}
198
199
	public short readShort(byte[] b, Offset offset) {
200
		return numberReader.readShort(b, offset);
201
	}
202
203
	public int readUnsignedShort(byte[] b, Offset offset) {
204
		return numberReader.readUnsignedShort(b, offset);
205
	}
206
207
	public int readInt(byte[] b, Offset offset) {
208
		return numberReader.readInt(b, offset);
209
	}
210
211
	public long readUnsignedInt(byte[] b, Offset offset) {
212
		return numberReader.readUnsignedInt(b, offset);
213
	}
214
215
	public long readLong(byte[] b, Offset offset) {
216
		return numberReader.readLong(b, offset);
217
	}
218
219
	public Long[] readLongArray(byte[] b, int length, Offset offset) {
220
		return numberReader.readLongArray(b, length, offset);
221
	}
222
223
	public double readTimestamp(byte[] b, Offset offset) {
224
		return numberReader.readTimestamp(b, offset);
225
	}
226
227
	public void setCpuFrequency(long frequency) {
228
		numberReader.setCpuFrequency(frequency);
229
	}
230
231
	public void setEncoding(String encoding) {
232
		stringReader.setEncoding(encoding);
233
	}
234
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFThreadEndParser.java (+32 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFThreadEndParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1010);
12
13
	public static final String NAME = "threadEnd";
14
15
	public BFThreadEndParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
27
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
28
		
29
		return true;
30
	}
31
32
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFGCStartParser.java (+32 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFGCStartParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1023);
12
13
	public static final String NAME = "gcStart";
14
15
	public BFGCStartParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
27
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
28
		
29
		return true;
30
	}
31
32
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMethodExitParser.java (+39 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMethodExitParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1015);
12
13
	public static final String NAME = "methodExit";
14
15
	public BFMethodExitParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(TICKET, reader.readLong(data, offset));
27
		loader.addAttribute(THREAD_CPU_TIME, reader.readLong(data, offset));
28
		loader.addAttribute(METHOD_ID_REF, (int) reader.readLong(data, offset));
29
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
30
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
31
		loader.addAttribute(TRANS_CLASS_ID_REF, reader.readLong(data, offset));
32
		loader.addAttribute(CLASS_ID_REF, reader.readLong(data, offset));
33
		loader.addAttribute(SEQUENCE_COUNTER, reader.readLong(data, offset));
34
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
35
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
36
		
37
		return true;
38
	}
39
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFRuntimeInitDoneParser.java (+18 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFRuntimeInitDoneParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1030);
11
12
	public static final String NAME = "runtimeInitDone";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		// ignored!
16
		return true;
17
	}
18
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFClassUnloadParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFClassUnloadParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1025);
11
12
	public static final String NAME = "classUnload";
13
	
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFAGMethodExitParser.java (+28 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFAGMethodExitParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short) 1037);
12
	
13
	public static final String NAME = "agMethodExit"; 
14
15
	public BFAGMethodExitParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
24
		loader.addAttribute(METHOD_ID_REF, (int) reader.readLong(data, offset));
25
		
26
		return true;
27
	}
28
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMethodDefParser.java (+43 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMethodDefParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1012);
12
13
	public static final String NAME = "methodDef";
14
15
	public BFMethodDefParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
24
		loader.addAttribute(NAME_ATTR, reader.readString(data, offset));
25
		loader.addAttribute(SIGNATURE, reader.readString(data, offset));
26
		loader.addAttribute(VISIBILITY, reader.readString(data, offset));
27
		loader.addAttribute(IS_NATIVE, reader.readByte(data, offset));
28
		loader.addAttribute(IS_ABSTRACT, reader.readByte(data, offset));
29
		loader.addAttribute(IS_STATIC, reader.readByte(data, offset));
30
		loader.addAttribute(IS_SYNCHRONIZED, reader.readByte(data, offset));
31
		loader.addAttribute(EXCEPTIONS, reader.readString(data, offset));
32
		loader.addAttribute(START_LINE_NUMBER, (int) reader.readLong(data, offset));
33
		loader.addAttribute(END_LINE_NUMBER, (int) reader.readLong(data, offset));
34
		loader.addAttribute(SIGNATURE_NOTATION, reader.readString(data, offset));
35
		loader.addAttribute(TRANS_CLASS_ID_REF, reader.readLong(data, offset));
36
		loader.addAttribute(CLASS_ID_REF, reader.readLong(data, offset));
37
		loader.addAttribute(METHOD_ID, (int)reader.readLong(data, offset));
38
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
39
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
40
		
41
		return true;
42
	}
43
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/IgnoredBinaryFragmentLoader.java (+23 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import org.eclipse.hyades.loaders.hierarchy.IgnoredXMLFragmentLoader;
4
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
5
6
public class IgnoredBinaryFragmentLoader extends IgnoredXMLFragmentLoader implements BinaryFragmentLoader {
7
8
	public void addAttribute(String name, byte value) {
9
	}
10
11
	public void addAttribute(String name, short value) {
12
	}
13
14
	public void addAttribute(String name, int value) {
15
	}
16
17
	public void addAttribute(String name, long value) {
18
	}
19
20
	public void addAttribute(String name, double value) {
21
	}
22
23
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFObjRefParser.java (+29 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFObjRefParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1040);
12
	
13
	public static final String NAME = "objReference"; 
14
15
	public BFObjRefParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(OWNER_OBJ_ID_REF, (int)reader.readLong(data, offset));
24
		loader.addAttribute(TARGET_OBJ_ID_REF, reader.readLong(data, offset));
25
		loader.addAttribute(HEAP_DUMP_ID_REF, (short) reader.readLong(data, offset));
26
		
27
		return true;
28
	}
29
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFLineParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFLineParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1022);
11
12
	public static final String NAME = "line";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFValueParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFValueParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1020);
11
12
	public static final String NAME = "value";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/Offset.java (+37 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
public class Offset {
4
	private int offset;
5
	
6
	private final long length;
7
	
8
	public Offset(int offset, long length) {
9
		if (offset < 0 || (length > 0 && offset > length)) {
10
			throw new IllegalArgumentException("Offset should be between 0 and " + length);
11
		}
12
		this.offset = offset;
13
		this.length = length;
14
	}
15
	
16
	public Offset(int offset) {
17
		this(offset, 0);
18
	}
19
20
	public int increaseOffset(int delta) {
21
		int oldOffset = offset;
22
		int newOffset = offset + delta;
23
		if (length > 0 && newOffset > length) {
24
			return -1;
25
		}
26
		offset = newOffset;
27
		return oldOffset;
28
	}
29
	
30
	public int getOffset() {
31
		return offset;
32
	}
33
	
34
	public long getLength() {
35
		return length;
36
	}
37
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BinaryFragmentParser.java (+234 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
4
import org.eclipse.hyades.loaders.util.HierarchyContext;
5
import org.eclipse.hyades.loaders.util.LoaderExtensions;
6
7
public abstract class BinaryFragmentParser {
8
9
	public static final String AGENT_ID = "agentId";
10
	
11
	public static final String AGENT_ID_REF = "agentIdRef";
12
13
	public static final String AGENT_NAME = "agentName";
14
	
15
	public static final String AGENT_TYPE = "agentType";
16
	
17
	public static final String PROCESS_ID_REF = "processIdRef";
18
	
19
	public static final String AGENT_PARAMETERS = "agentParameters";
20
	
21
	public static final String VERSION = "version";
22
	
23
	public static final String THREAD_ID = "threadId";
24
25
	public static final String THREAD_ID_REF = "threadIdRef";
26
	
27
	public static final String TRANS_THREAD_ID_REF = "transientThreadIdRef";
28
	
29
	public static final String TRANS_THREAD_ID= "transientThreadId";
30
	
31
	public static final String GROUP_NAME = "groupName";
32
33
	public static final String PARENT_NAME = "parentName";
34
35
	public static final String THREAD_NAME = "threadName";
36
37
	public static final String METHOD_ID = "methodId";
38
39
	public static final String METHOD_ID_REF = "methodIdRef";
40
	
41
	public static final String TIME = "time";
42
	
43
	public static final String BASE_TIME = "baseTime";
44
	
45
	public static final String MIN_TIME = "minTime";
46
	
47
	public static final String MAX_TIME = "maxTime";
48
	
49
	public static final String CPU_TIME = "cpuTime";
50
	
51
	public static final String TIMEOUT = "timeout";
52
53
	public static final String THREAD_CPU_TIME = "threadCpuTime";
54
55
	public static final String COUNT = "count";
56
	
57
	public static final String NUM_INTERFACES = "numInterfaces";
58
	
59
	public static final String INTERFACE_NAMES = "interfaceNames";
60
	
61
	public static final String CLASS_ID = "classId";
62
	
63
	public static final String CLASS_ID_REF = "classIdRef";
64
65
	public static final String TRANS_CLASS_ID = "transientClassId";
66
	
67
	public static final String TRANS_CLASS_ID_REF = "transientClassIdRef";
68
69
	public static final String CLASS_LOADER = "classLoader";
70
	
71
	public static final String SUPER_CLASS = "superClass";
72
	
73
	public static final String SOURCE_NAME = "sourceName";
74
	
75
	public static final String OBJ_ID_REF = "objIdRef";
76
	
77
	public static final String OBJ_ID = "objId";
78
79
	public static final String TRANS_OBJ_ID_REF = "transientObjIdRef";
80
	
81
	public static final String OWNER_OBJ_ID_REF = "ownerObjIdRef";
82
	
83
	public static final String TARGET_OBJ_ID_REF = "targetObjIdRef";
84
85
	public static final String OBJ_AGE = "objAge";
86
87
	public static final String NAME_ATTR = "name";
88
	
89
	public static final String ACCESS = "access";
90
	
91
	public static final String NUM_STATIC_FIELDS= "numStaticFields";
92
	
93
	public static final String NUM_METHODS = "numMethods";
94
	
95
	public static final String NUM_INSTANCE_FIELDS = "numInstanceFields";
96
	
97
	public static final String COLLATION_VALUE = "collationValue";
98
		
99
	public static final String TRACE_ID = "traceId";
100
101
	public static final String TRACE_ID_REF = "traceIdRef";
102
	
103
	public static final String PATTERN = "pattern";
104
	
105
	public static final String GENERIC_PATTERN = "genericPattern";
106
	
107
	public static final String MODE = "mode";
108
	
109
	public static final String METHOD_PATTERN = "methodPattern";
110
	
111
	public static final String METHOD_GENERIC_PATTERN = "methodGenericPattern";
112
	
113
	public static final String METHOD_MODE = "methodMode";
114
	
115
	public static final String TOTAL_OBJECT_SPACE = "totalObjectSpace";
116
117
	public static final String USED_OBJECT_SPACE = "usedObjectSpace";
118
	
119
	public static final String USED_OBJECTS = "usedObjects";
120
121
	public static final String TYPE = "type";
122
123
	public static final String HEAP_DUMP_ID_REF = "heapDumpIdRef";
124
125
	public static final String SIGNATURE = "signature";
126
	
127
	public static final String VISIBILITY = "visibility";
128
129
	public static final String IS_NATIVE = "isNative";
130
131
	public static final String IS_ABSTRACT = "isAbstract";
132
133
	public static final String IS_STATIC = "isStatic";
134
	
135
	public static final String IS_SYNCHRONIZED = "isSynchronized";
136
137
    public static final String IS_ARRAY = "isArray";
138
139
    public static final String EXCEPTIONS = "exceptions";
140
141
	public static final String START_LINE_NUMBER = "startLineNumber";
142
143
	public static final String END_LINE_NUMBER = "endLineNumber";
144
145
	public static final String SIGNATURE_NOTATION = "signatureNotation";
146
	
147
	public static final String TICKET = "ticket";
148
149
	public static final String SEQUENCE_COUNTER = "sequenceCounter";
150
151
	public static final String STACK_DEPTH = "stackDepth";
152
	
153
    public static final String ANNOTATION = "annotation";
154
    
155
    public static final String KEY = "key";
156
157
    public static final String VALUE = "value";
158
    
159
    public static final String CALL_STACK_METHODS = "callStackDumpMethods";
160
    
161
    public static final String CALL_STACK_LINES = "callStackDumpLineNumbers";
162
    
163
    public static final String THREAD_OWNER = "threadOwner";
164
165
    public static final String NODE_ID = "nodeId";
166
167
    public static final String NODE_ID_REF = "nodeIdRef";
168
169
    public static final String HOSTNAME = "hostname";
170
171
    public static final String IPADDRESS = "ipaddress";
172
173
    public static final String TIMEZONE = "timezone";
174
175
    public static final String TIMESTAMP = "timestamp";
176
177
    public static final String SIZE = "size";
178
179
    public static final String LINE = "line";
180
181
    public static final String CONTEXT_DATA = "contextData";
182
    
183
    public static final String PROCESS_ID = "processId";
184
    
185
    public static final String PID = "pid";
186
    
187
    public static final String APPLICATION_EXECUTABLE = "applicationExecutable";
188
189
190
    private BinaryFragmentLoader loader;
191
	
192
	private String name;
193
	
194
	public BinaryFragmentParser() {
195
		loader = new IgnoredBinaryFragmentLoader();
196
	}
197
	
198
	protected BinaryFragmentParser(Short id, String name) {
199
		loader = (BinaryFragmentLoader) LoaderExtensions.getInstance().get(name);
200
		if (loader == null) {
201
			System.err.println("Message " + name + " handler is not found - using default");
202
			loader = new IgnoredBinaryFragmentLoader();
203
		}
204
		this.name = name;
205
	}
206
	
207
	public BinaryFragmentLoader getLoader() {
208
		return loader;
209
	}
210
	
211
	public abstract boolean parse(BinaryFragment fragment, Offset offset, BFReader reader);
212
213
	public void addYourselfInContext() {
214
		loader.addYourselfInContext();
215
	}
216
217
	public void initialize(HierarchyContext context) {
218
		if (name != null) {
219
			loader.initialize(context, name);
220
		}
221
	}
222
223
    protected void addAnnotation(BinaryFragmentLoader loader, Object[] data, String name) {
224
        loader.startChild(ANNOTATION);
225
        loader.addAttribute(NAME_ATTR, name);
226
        for(int i = 0; i < data.length; ++i) {
227
            char[] charData = data[i].toString().toCharArray();
228
            loader.startChild(VALUE);
229
            loader.addCharacters(charData, 0, charData.length);
230
            loader.endChild(VALUE);
231
        }
232
        loader.endChild(ANNOTATION);
233
    }
234
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFFrequencyParser.java (+22 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFFrequencyParser extends BinaryFragmentParser {
9
	public static final Short ID = new Short((short)2);
10
11
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
12
		byte[] data = fragment.getBody();
13
		
14
		long frequency = reader.readLong(data, offset);
15
		reader.setCpuFrequency(frequency);
16
		
17
		return true;
18
	}		
19
	
20
	
21
22
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFAGMethodEntryParser.java (+33 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFAGMethodEntryParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short) 1036);
12
	
13
	public static final String NAME = "agMethodEntry"; 
14
15
	public BFAGMethodEntryParser() {
16
		super(ID, NAME);
17
	}
18
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
24
		loader.addAttribute(METHOD_ID_REF, (int) reader.readLong(data, offset));
25
		loader.addAttribute(BASE_TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(MIN_TIME, reader.readTimestamp(data, offset));
27
		loader.addAttribute(MAX_TIME, reader.readTimestamp(data, offset));
28
		loader.addAttribute(CPU_TIME, reader.readLong(data, offset));
29
		loader.addAttribute(COUNT, (int)reader.readLong(data, offset));
30
		
31
		return true;
32
	}
33
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BinaryFragment.java (+38 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import java.io.IOException;
4
5
public class BinaryFragment {
6
7
	public static final int HEADER_LENGTH = 6;
8
9
	Short id;
10
	
11
	int length;
12
	
13
	byte[] body;
14
	
15
	public BinaryFragment(byte[] header, BFReader reader) throws IOException {
16
		Offset headerMarker = new Offset(0, HEADER_LENGTH);
17
		this.id = new Short((short)reader.readUnsignedShort(header, headerMarker));
18
		this.length = (int)reader.readUnsignedInt(header, headerMarker);
19
	}
20
21
	public Short getId() {
22
		return id;
23
	}
24
25
	public int getLength() {
26
		return length;
27
	}
28
29
	public byte[] getBody() {
30
		return body;
31
	}
32
33
	public void setBody(byte[] body) {
34
		this.body = body;
35
	}
36
	
37
	
38
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFAgentDestroyParser.java (+29 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFAgentDestroyParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1004);
12
13
	public static final String NAME = "agentDestroy";
14
15
	public BFAgentDestroyParser() {
16
		super(ID, NAME);
17
	}
18
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(AGENT_ID_REF, reader.readString(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		
26
		return true;
27
	}
28
29
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFProcessCreateParser.java (+32 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFProcessCreateParser extends BinaryFragmentParser {
10
	public static final Short ID = new Short((short)1002);
11
12
	public static final String NAME = "processCreate";
13
14
	public BFProcessCreateParser() {
15
		super(ID, NAME);
16
	}
17
	
18
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
19
		byte[] data = fragment.getBody();
20
		BinaryFragmentLoader loader = getLoader();
21
22
		loader.addAttribute(PROCESS_ID, reader.readString(data, offset));
23
		loader.addAttribute(NAME_ATTR, reader.readString(data, offset));
24
		loader.addAttribute(PID, reader.readInt(data, offset));
25
		loader.addAttribute(NODE_ID_REF, reader.readString(data, offset));
26
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
27
		loader.addAttribute(APPLICATION_EXECUTABLE, reader.readString(data, offset));
28
		
29
		return true;
30
	}
31
32
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFTraceEndParser.java (+29 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFTraceEndParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1006);
12
13
	public static final String NAME = "traceEnd";
14
15
	public BFTraceEndParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
26
		
27
		return true;
28
	}
29
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFEncodingParser.java (+22 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFEncodingParser extends BinaryFragmentParser {
9
	public static final Short ID = new Short((short)1);
10
11
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
12
		byte[] data = fragment.getBody();
13
		
14
		String encoding = reader.readString(data, offset);
15
		reader.setEncoding(encoding);
16
		
17
		return true;
18
	}		
19
	
20
	
21
22
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFOptionParser.java (+31 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFOptionParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1008);
12
13
	public static final String NAME = "option";
14
15
	public BFOptionParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		// traceIdRef ignored
24
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
25
		loader.addAttribute(KEY, reader.readString(data, offset));
26
		loader.addAttribute(VALUE, reader.readString(data, offset));
27
		
28
		return true;
29
	}
30
31
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/StringReader.java (+9 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
public interface StringReader {
4
	public void setEncoding(String encoding);
5
	
6
	public String readString(byte[] b, Offset offset);
7
8
	public String[] readStringArray(byte[] b, int length, Offset offset);
9
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMonWaitParser.java (+38 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMonWaitParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1032);
12
13
	public static final String NAME = "monWait";
14
15
	public BFMonWaitParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
26
		loader.addAttribute(TIMEOUT, reader.readLong(data, offset));
27
28
		// stackDepth
29
		int stackDepth = reader.readInt(data, offset);
30
		String stackMethods[] = reader.readStringArray(data, stackDepth, offset);
31
		addAnnotation(loader, stackMethods, CALL_STACK_METHODS);
32
33
		Long stackLines[] = reader.readLongArray(data, stackDepth, offset);
34
		addAnnotation(loader, stackLines, CALL_STACK_LINES);
35
		
36
		return true;
37
	}
38
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BFParserFactory.java (+36 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import java.util.HashMap;
4
import java.util.Map;
5
6
import org.eclipse.hyades.loaders.internal.binary.v1.ParserImpl1;
7
import org.eclipse.hyades.loaders.util.HierarchyContext;
8
9
public class BFParserFactory {
10
	private static final Class[] constructorArgs = new Class[] {HierarchyContext.class, BFReader.class};
11
	
12
	private final Map parsers = new HashMap();
13
	
14
	public BFParserFactory() {
15
		ParserImpl1.register(this);
16
	}
17
	
18
	public BFParser get(BFHeader header, HierarchyContext context, BFReader reader) {
19
		Class parserClass = (Class) parsers.get(new Double(header.getVersion().getVersion()));
20
		if (parserClass == null) {
21
			return null;
22
		}
23
			
24
		try {
25
			return (BFParser) parserClass.getConstructor(constructorArgs).newInstance(new Object[] {context, reader});
26
		} catch (Exception ex) {
27
			ex.printStackTrace();
28
		}
29
		
30
		return null;
31
	}
32
33
	public void put(Double version, Class parser) {
34
		parsers.put(version, parser);
35
	}
36
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/NumberReader.java (+19 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
public interface NumberReader {
4
	public short readShort(byte[] b, Offset offset);
5
	
6
	public int readUnsignedShort(byte[] b, Offset offset);
7
8
	public int readInt(byte[] b, Offset offset);
9
	
10
	public long readUnsignedInt(byte[] b, Offset offset);
11
12
	public long readLong(byte[] b, Offset offset);
13
	
14
	public Long[] readLongArray(byte[] b, int length, Offset offset);
15
16
	public void setCpuFrequency(long frequency);
17
	
18
	public double readTimestamp(byte[] b, Offset offset);
19
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFRuntimeShutdownParser.java (+32 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFRuntimeShutdownParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1031);
12
13
	public static final String NAME = "runtimeShutdown";
14
15
	public BFRuntimeShutdownParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
27
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
28
		
29
		return true;
30
	}
31
32
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/ParserImpl1.java (+136 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import java.io.InputStream;
4
import java.util.HashMap;
5
import java.util.Map;
6
7
import org.eclipse.hyades.loaders.internal.binary.BFParser;
8
import org.eclipse.hyades.loaders.internal.binary.BFParserFactory;
9
import org.eclipse.hyades.loaders.internal.binary.BFReader;
10
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
11
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
12
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
13
import org.eclipse.hyades.loaders.internal.binary.Offset;
14
import org.eclipse.hyades.loaders.util.HierarchyContext;
15
16
public class ParserImpl1 implements BFParser {
17
	
18
	public static final Double version = new Double(1.0);
19
	
20
	// ID (Short) -> Class (class)
21
	Map messageHandlers = new HashMap();
22
	
23
	private final HierarchyContext context;
24
	
25
	private final BFReader reader;
26
	
27
	public ParserImpl1(HierarchyContext context, BFReader reader) {
28
		this.context = context;
29
		this.reader = reader;
30
		initialize();
31
	}
32
33
	protected void initialize() {
34
		// System handlers 0-1000
35
		messageHandlers.put(BFEncodingParser.ID, BFEncodingParser.class);
36
		messageHandlers.put(BFFrequencyParser.ID, BFFrequencyParser.class);
37
		
38
		// Data handlers 1000-32767
39
		messageHandlers.put(BFNodeParser.ID, BFNodeParser.class);
40
		messageHandlers.put(BFProcessCreateParser.ID, BFProcessCreateParser.class);
41
		messageHandlers.put(BFAgentCreateParser.ID, BFAgentCreateParser.class);
42
		messageHandlers.put(BFAgentDestroyParser.ID, BFAgentDestroyParser.class);
43
		messageHandlers.put(BFTraceStartParser.ID, BFTraceStartParser.class);
44
		messageHandlers.put(BFTraceEndParser.ID, BFTraceEndParser.class);
45
		messageHandlers.put(BFFilterParser.ID, BFFilterParser.class);
46
		messageHandlers.put(BFOptionParser.ID, BFOptionParser.class);
47
		messageHandlers.put(BFThreadStartParser.ID, BFThreadStartParser.class);
48
		messageHandlers.put(BFThreadEndParser.ID, BFThreadEndParser.class);
49
		messageHandlers.put(BFClassDefParser.ID, BFClassDefParser.class);
50
		messageHandlers.put(BFMethodDefParser.ID, BFMethodDefParser.class);
51
		messageHandlers.put(BFObjAllocParser.ID, BFObjAllocParser.class);
52
		messageHandlers.put(BFMethodEntryParser.ID, BFMethodEntryParser.class);
53
		messageHandlers.put(BFMethodExitParser.ID, BFMethodExitParser.class);
54
		// Method call ignored
55
		// Method exit ignored
56
		messageHandlers.put(BFInvocationContextParser.ID, BFInvocationContextParser.class);
57
		messageHandlers.put(BFObjDefParser.ID, BFObjDefParser.class);
58
		messageHandlers.put(BFValueParser.ID, BFValueParser.class);
59
		messageHandlers.put(BFMethodCountParser.ID, BFMethodCountParser.class);
60
		messageHandlers.put(BFLineParser.ID, BFLineParser.class);
61
		messageHandlers.put(BFGCStartParser.ID, BFGCStartParser.class);
62
		messageHandlers.put(BFObjFreeParser.ID, BFObjFreeParser.class);
63
		messageHandlers.put(BFClassUnloadParser.ID, BFClassUnloadParser.class);
64
		messageHandlers.put(BFObjMoveParser.ID, BFObjMoveParser.class);
65
		messageHandlers.put(BFGCFinishParser.ID, BFGCFinishParser.class);
66
		messageHandlers.put(BFThrowParser.ID, BFThrowParser.class);
67
		messageHandlers.put(BFCatchParser.ID, BFCatchParser.class);
68
		messageHandlers.put(BFRuntimeInitDoneParser.ID, BFRuntimeInitDoneParser.class);
69
		messageHandlers.put(BFRuntimeShutdownParser.ID, BFRuntimeShutdownParser.class);
70
		messageHandlers.put(BFMonWaitParser.ID, BFMonWaitParser.class);
71
		messageHandlers.put(BFMonWaitedParser.ID, BFMonWaitedParser.class);
72
		messageHandlers.put(BFMonContendedEnterParser.ID, BFMonContendedEnterParser.class);
73
		messageHandlers.put(BFMonContendedEnteredParser.ID, BFMonContendedEnteredParser.class);
74
		messageHandlers.put(BFAGMethodEntryParser.ID, BFAGMethodEntryParser.class);
75
		messageHandlers.put(BFAGMethodExitParser.ID, BFAGMethodExitParser.class);
76
		messageHandlers.put(BFHeapDumpDefParser.ID, BFHeapDumpDefParser.class);
77
		messageHandlers.put(BFGCRootParser.ID, BFGCRootParser.class);
78
		messageHandlers.put(BFObjRefParser.ID, BFObjRefParser.class);
79
	}
80
	
81
	public void parseEvents(InputStream inputStream, Offset marker) {
82
		try {
83
			do {
84
				byte[] header = new byte[BinaryFragment.HEADER_LENGTH];
85
				if (inputStream.read(header) < 0) {
86
					break;
87
				}
88
				BinaryFragment binaryFragment = new BinaryFragment(header, reader);
89
				marker.increaseOffset(BinaryFragment.HEADER_LENGTH);
90
91
				byte[] body = new byte[binaryFragment.getLength()];
92
				if(inputStream.read(body) < 0) {
93
					break;
94
				}
95
96
				binaryFragment.setBody(body);
97
				marker.increaseOffset(binaryFragment.getLength());
98
99
				if (binaryFragment.getId() == null) {
100
					System.out.println("Unparseable event " + header);
101
					continue;
102
				}
103
				BinaryFragmentParser fragmentParser = getFragmentParser(binaryFragment.getId());
104
				
105
				if (fragmentParser.getClass().equals(IgnoredBinaryFragmentParser.class)) {
106
					System.out.println("Got unknown message at " + marker.getOffset());
107
				}
108
109
				fragmentParser.initialize(context);
110
				if (fragmentParser.parse(binaryFragment, new Offset(0, binaryFragment.getBody().length), reader)) {
111
					fragmentParser.addYourselfInContext();
112
				}
113
			} while (true);
114
		} catch (Throwable e) {
115
			e.printStackTrace();
116
		}
117
	}
118
119
	protected BinaryFragmentParser getFragmentParser(Short id) throws InstantiationException, IllegalAccessException {
120
		Class clazz = (Class) messageHandlers.get(id);
121
122
		if (clazz == null) {
123
			return new IgnoredBinaryFragmentParser();
124
		}
125
		BinaryFragmentParser fragmentParser = (BinaryFragmentParser) clazz.newInstance();
126
		if (fragmentParser == null) {
127
			return new IgnoredBinaryFragmentParser();
128
		}
129
		
130
		return fragmentParser; 
131
	}
132
133
	public static void register(BFParserFactory parserFactory) {
134
		parserFactory.put(version, ParserImpl1.class);
135
	}
136
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFCatchParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFCatchParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1029);
11
12
	public static final String NAME = "catch";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMonContendedEnteredParser.java (+37 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMonContendedEnteredParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short) 1035);
12
	
13
	public static final String NAME = "monContendedEntered"; 
14
15
	public BFMonContendedEnteredParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
26
27
		long stackDepth = reader.readUnsignedInt(data, offset);
28
29
		String[] stackMethods = reader.readStringArray(data, (int)stackDepth, offset); // Possible truncation
30
		addAnnotation(loader, stackMethods, CALL_STACK_METHODS);
31
32
		Long[] stackLines = reader.readLongArray(data, (int)stackDepth, offset);
33
		addAnnotation(loader, stackLines, CALL_STACK_LINES);
34
			
35
		return true;
36
	}
37
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFClassDefParser.java (+45 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFClassDefParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1011);
12
13
	public static final String NAME = "classDef";
14
15
	public BFClassDefParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(NUM_INTERFACES, reader.readInt(data, offset));
27
		loader.addAttribute(INTERFACE_NAMES, reader.readString(data, offset));
28
		loader.addAttribute(TRANS_CLASS_ID, reader.readLong(data, offset));
29
		loader.addAttribute(CLASS_ID, reader.readLong(data, offset));
30
		loader.addAttribute(SOURCE_NAME, reader.readString(data, offset));
31
		loader.addAttribute(CLASS_LOADER, reader.readString(data, offset));
32
		loader.addAttribute(SUPER_CLASS, reader.readString(data, offset));
33
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
34
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
35
		loader.addAttribute(NAME_ATTR, reader.readString(data, offset));
36
		loader.addAttribute(ACCESS, reader.readString(data, offset));
37
		loader.addAttribute(NUM_STATIC_FIELDS, reader.readInt(data, offset));
38
		loader.addAttribute(NUM_METHODS, reader.readInt(data, offset));
39
		loader.addAttribute(NUM_INSTANCE_FIELDS, reader.readInt(data, offset));
40
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
41
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
42
		
43
		return true;
44
	}
45
}
(-)src-hierarchy/org/eclipse/hyades/loaders/util/BinaryFragmentLoader.java (+13 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.util;
2
3
public interface BinaryFragmentLoader extends XMLFragmentLoader {
4
	public void addAttribute(String name, byte value);
5
6
	public void addAttribute(String name, short value);
7
8
	public void addAttribute(String name, int value);
9
10
	public void addAttribute(String name, long value);
11
12
	public void addAttribute(String name, double value);
13
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFTraceStartParser.java (+31 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFTraceStartParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1005);
12
13
	public static final String NAME = "traceStart";
14
15
	public BFTraceStartParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRACE_ID, reader.readString(data, offset));
24
		loader.addAttribute(AGENT_ID_REF, reader.readString(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
27
		
28
		return true;
29
	}
30
31
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMethodEntryParser.java (+38 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMethodEntryParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1014);
12
13
	public static final String NAME = "methodEntry";
14
15
	public BFMethodEntryParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRANS_THREAD_ID_REF, reader.readLong(data, offset));
24
		loader.addAttribute(THREAD_ID_REF, (int) reader.readLong(data, offset));
25
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
26
		loader.addAttribute(METHOD_ID_REF, (int) reader.readLong(data, offset));
27
		loader.addAttribute(TICKET, reader.readLong(data, offset));
28
		loader.addAttribute(TRANS_OBJ_ID_REF, reader.readLong(data, offset));
29
		loader.addAttribute(CLASS_ID_REF, reader.readLong(data, offset));
30
		loader.addAttribute(THREAD_CPU_TIME, reader.readLong(data, offset));
31
		loader.addAttribute(SEQUENCE_COUNTER, reader.readLong(data, offset));
32
		loader.addAttribute(STACK_DEPTH, (short) reader.readLong(data, offset));
33
		loader.addAttribute(COLLATION_VALUE, reader.readString(data, offset));
34
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
35
		
36
		return true;
37
	}
38
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFHeapDumpDefParser.java (+30 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFHeapDumpDefParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short) 1038);
12
	
13
	public static final String NAME = "heapDumpDef"; 
14
15
	public BFHeapDumpDefParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(HEAP_DUMP_ID_REF, (short) reader.readLong(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(NAME_ATTR, reader.readString(data, offset));
26
		loader.addAttribute(BASE_TIME, reader.readTimestamp(data, offset));
27
		
28
		return true;
29
	}
30
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFObjMoveParser.java (+21 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFObjMoveParser extends BinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1026);
11
12
	public static final String NAME = "objMove";
13
14
	public BFObjMoveParser() {
15
		super(ID, NAME);
16
	}
17
	
18
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
19
		return true;
20
	}
21
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFFilterParser.java (+35 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFFilterParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1007);
12
13
	public static final String NAME = "filter";
14
15
	public BFFilterParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(TRACE_ID_REF, reader.readString(data, offset));
24
		loader.addAttribute(PATTERN, reader.readString(data, offset));
25
		loader.addAttribute(GENERIC_PATTERN, reader.readString(data, offset));
26
		loader.addAttribute(MODE, reader.readString(data, offset));
27
		loader.addAttribute(METHOD_PATTERN, reader.readString(data, offset));
28
		loader.addAttribute(METHOD_GENERIC_PATTERN, reader.readString(data, offset));
29
		loader.addAttribute(METHOD_MODE, reader.readString(data, offset));
30
		
31
		return true;
32
	}
33
34
35
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/IgnoredBinaryFragmentParser.java (+8 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
public class IgnoredBinaryFragmentParser extends BinaryFragmentParser {
4
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
5
		System.out.println("Ignored handler was invoked for id [" + fragment.getId() + "]");
6
		return true;
7
	}
8
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/BFParser.java (+7 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary;
2
3
import java.io.InputStream;
4
5
public interface BFParser {
6
	public void parseEvents(InputStream inputStream, Offset marker);
7
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFObjDefParser.java (+31 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFObjDefParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1019);
11
12
	public static final String NAME = "objDef";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
16
//		// objId ignored
17
//		reader.readLong(data, offset);
18
//		// isArray ignored
19
//		reader.readByte(data, offset);
20
//		// size ignored
21
//		reader.readLong(data, offset);
22
//		// classIdRef ignored
23
//		reader.readLong(data, offset);
24
//		// colValue ignored
25
//		reader.readString(data, offset);
26
//		// traceIdRef ignored
27
//		reader.readString(data, offset);
28
		
29
		return true;
30
	}
31
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMethodCountParser.java (+17 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.IgnoredBinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
8
public class BFMethodCountParser extends IgnoredBinaryFragmentParser {
9
10
	public static final Short ID = new Short((short)1021);
11
12
	public static final String NAME = "methodCount";
13
14
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
15
		return true;
16
	}
17
}
(-)src-hierarchy/org/eclipse/hyades/loaders/internal/binary/v1/BFMonWaitedParser.java (+37 lines)
Added Link Here
1
package org.eclipse.hyades.loaders.internal.binary.v1;
2
3
import org.eclipse.hyades.loaders.internal.binary.BFReader;
4
import org.eclipse.hyades.loaders.internal.binary.BinaryFragment;
5
import org.eclipse.hyades.loaders.internal.binary.BinaryFragmentParser;
6
import org.eclipse.hyades.loaders.internal.binary.Offset;
7
import org.eclipse.hyades.loaders.util.BinaryFragmentLoader;
8
9
public class BFMonWaitedParser extends BinaryFragmentParser {
10
11
	public static final Short ID = new Short((short)1033);
12
13
	public static final String NAME = "monWaited";
14
15
	public BFMonWaitedParser() {
16
		super(ID, NAME);
17
	}
18
	
19
	public boolean parse(BinaryFragment fragment, Offset offset, BFReader reader) {
20
		byte[] data = fragment.getBody();
21
		BinaryFragmentLoader loader = getLoader();
22
23
		loader.addAttribute(THREAD_ID_REF, (int)reader.readLong(data, offset));
24
		loader.addAttribute(TIME, reader.readTimestamp(data, offset));
25
		loader.addAttribute(OBJ_ID_REF, reader.readLong(data, offset));
26
		loader.addAttribute(TIMEOUT, reader.readLong(data, offset));
27
		// stackDepth
28
		int stackDepth = reader.readInt(data, offset);
29
		String stackMethods[] = reader.readStringArray(data, stackDepth, offset);
30
		addAnnotation(loader, stackMethods, CALL_STACK_METHODS);
31
32
		Long stackLines[] = reader.readLongArray(data, stackDepth, offset);
33
		addAnnotation(loader, stackLines, CALL_STACK_LINES);
34
		
35
		return true;
36
	}
37
}

Return to bug 209343