19
19
import javax .xml .stream .events .StartElement ;
20
20
import javax .xml .stream .events .XMLEvent ;
21
21
22
+ import com .tagtraum .perf .gcviewer .model .AbstractGCEvent ;
22
23
import com .tagtraum .perf .gcviewer .model .AbstractGCEvent .Type ;
23
24
import com .tagtraum .perf .gcviewer .model .GCEvent ;
24
25
import com .tagtraum .perf .gcviewer .model .GCModel ;
@@ -34,6 +35,9 @@ public class DataReaderIBM_J9_R28 extends AbstractDataReader {
34
35
private static final String VERBOSEGC = "verbosegc" ;
35
36
private static final String INITIALIZED = "initialized" ;
36
37
private static final String EXCLUSIVE_START = "exclusive-start" ;
38
+ private static final String SYS_START = "sys-start" ;
39
+ private static final String AF_START = "af-start" ;
40
+ private static final String CONCURRENT_COLLECTION_START = "concurrent-collection-start" ;
37
41
private static final String GC_START = "gc-start" ;
38
42
private static final String GC_END = "gc-end" ;
39
43
private static final String EXCLUSIVE_END = "exclusive-end" ;
@@ -54,44 +58,70 @@ public GCModel read() throws IOException {
54
58
XMLInputFactory factory = XMLInputFactory .newInstance ();
55
59
XMLEventReader eventReader = factory .createXMLEventReader (in );
56
60
GCEvent currentGcEvent = null ;
61
+ String eventNameStart = null ;
57
62
while (eventReader .hasNext ()) {
58
- XMLEvent event = eventReader .nextEvent ();
59
- if (event .isStartElement ()) {
60
- StartElement startElement = event .asStartElement ();
61
- switch (startElement .getName ().getLocalPart ()) {
62
- case VERBOSEGC :
63
- handleVerboseGC (startElement );
64
- break ;
65
- case INITIALIZED :
66
- handleInitialized (eventReader );
67
- break ;
68
- case EXCLUSIVE_START :
69
- currentGcEvent = handleExclusiveStart (startElement );
70
- break ;
71
- case GC_START :
72
- handleGcStart (eventReader , startElement , currentGcEvent );
73
- break ;
74
- case GC_END :
75
- handleGcEnd (eventReader , currentGcEvent );
76
- break ;
77
- case EXCLUSIVE_END :
78
- handleExclusiveEnd (startElement , currentGcEvent );
79
- if (currentGcEvent .getExtendedType () == null ) {
80
- if (getLogger ().isLoggable (Level .FINE )) getLogger ().fine ("event at " + in .getLineNumber () + " doesn't contain any information, the parser can handle" );
81
- } else {
82
- model .add (currentGcEvent );
83
- }
84
- currentGcEvent = null ;
85
- break ;
63
+ try {
64
+ XMLEvent event = eventReader .nextEvent ();
65
+ if (event .isStartElement ()) {
66
+ StartElement startElement = event .asStartElement ();
67
+ switch (startElement .getName ().getLocalPart ()) {
68
+ case VERBOSEGC :
69
+ handleVerboseGC (startElement );
70
+ break ;
71
+ case INITIALIZED :
72
+ handleInitialized (eventReader );
73
+ break ;
74
+ case EXCLUSIVE_START :
75
+ currentGcEvent = handleExclusiveStart (startElement );
76
+ break ;
77
+ case SYS_START :
78
+ assert eventNameStart == null : "eventNameStart was expected to be null, but was " + eventNameStart ;
79
+ eventNameStart = handleSysStart (eventReader , startElement );
80
+ break ;
81
+ case AF_START :
82
+ assert eventNameStart == null : "eventNameStart was expected to be null, but was " + eventNameStart ;
83
+ eventNameStart = handleAfStart (eventReader , startElement );
84
+ break ;
85
+ case GC_START :
86
+ handleGcStart (eventReader , startElement , currentGcEvent , eventNameStart );
87
+ break ;
88
+ case GC_END :
89
+ if (currentGcEvent .getTypeAsString () != null ) {
90
+ handleGcEnd (eventReader , currentGcEvent );
91
+ }
92
+ break ;
93
+ case EXCLUSIVE_END :
94
+ handleExclusiveEnd (startElement , currentGcEvent );
95
+ if (currentGcEvent .getExtendedType () == null ) {
96
+ if (getLogger ().isLoggable (Level .FINE ))
97
+ getLogger ().fine ("event at " + in .getLineNumber () + " doesn't contain any information, the parser can handle" );
98
+ }
99
+ else {
100
+ model .add (currentGcEvent );
101
+ }
102
+ currentGcEvent = null ;
103
+ eventNameStart = null ;
104
+ break ;
105
+ }
86
106
}
87
- }
88
107
108
+ }
109
+ catch (Exception e ) {
110
+ if (e instanceof XMLStreamException ) {
111
+ throw e ;
112
+ }
113
+ if (getLogger ().isLoggable (Level .WARNING )) getLogger ().warning ("line " + in .getLineNumber () + ": " + e .toString ());
114
+ if (getLogger ().isLoggable (Level .FINE )) getLogger ().log (Level .FINE , "line " + in .getLineNumber () + ": " + e .getMessage (), e );
115
+ }
89
116
}
90
117
}
91
118
catch (XMLStreamException e ) {
92
119
if (getLogger ().isLoggable (Level .WARNING )) getLogger ().warning ("line " + in .getLineNumber () + ": " + e .toString ());
93
120
if (getLogger ().isLoggable (Level .FINE )) getLogger ().log (Level .FINE , "line " + in .getLineNumber () + ": " + e .getMessage (), e );
94
121
}
122
+ finally {
123
+ if (getLogger ().isLoggable (Level .INFO )) getLogger ().info ("Done reading." );
124
+ }
95
125
96
126
return model ;
97
127
}
@@ -132,21 +162,37 @@ private GCEvent handleExclusiveStart(StartElement startElement) {
132
162
if (getLogger ().isLoggable (Level .WARNING )) getLogger ().warning ("line " + in .getLineNumber () + ": " + e .toString ());
133
163
if (getLogger ().isLoggable (Level .FINE )) getLogger ().log (Level .FINE , "line " + in .getLineNumber () + ": " + e .getMessage (), e );
134
164
}
135
-
165
+
136
166
return event ;
137
167
}
138
168
139
169
private void handleExclusiveEnd (StartElement startElement , GCEvent event ) {
140
170
event .setPause (NumberParser .parseDouble (getAttributeValue (startElement , "durationms" )) / 1000 );
141
171
}
142
172
143
- private void handleGcStart (XMLEventReader eventReader , StartElement startElement , GCEvent event ) throws XMLStreamException {
144
- event .setType (Type .lookup (getAttributeValue (startElement , "type" )));
145
- if (event .getExtendedType () == null ) {
146
- getLogger ().warning ("could not determine type of event " + startElement .toString ());
147
- return ;
173
+ private String handleSysStart (XMLEventReader eventReader , StartElement startElement ) throws XMLStreamException {
174
+ String reason = getAttributeValue (startElement , "reason" );
175
+ return "sys " + (reason != null ? reason + " " : "" );
176
+ }
177
+
178
+ private String handleAfStart (XMLEventReader eventReader , StartElement startElement ) throws XMLStreamException {
179
+ return "af " ;
180
+ }
181
+
182
+ private void handleConcurrentCollectionStart (XMLEventReader eventReader , StartElement startElement ) {
183
+ }
184
+
185
+ private void handleGcStart (XMLEventReader eventReader , StartElement startElement , GCEvent event , String eventNameStart ) throws
186
+ XMLStreamException ,
187
+ UnknownGcTypeException {
188
+
189
+ String typeName = eventNameStart + getAttributeValue (startElement , "type" );
190
+ AbstractGCEvent .Type type = Type .lookup (typeName );
191
+ if (type == null ) {
192
+ throw new UnknownGcTypeException (typeName , startElement .toString ());
148
193
}
149
-
194
+ event .setType (type );
195
+
150
196
String currentElementName = "" ;
151
197
while (eventReader .hasNext () && !currentElementName .equals (GC_START )) {
152
198
0 commit comments