1919import javax .xml .stream .events .StartElement ;
2020import javax .xml .stream .events .XMLEvent ;
2121
22+ import com .tagtraum .perf .gcviewer .model .AbstractGCEvent ;
2223import com .tagtraum .perf .gcviewer .model .AbstractGCEvent .Type ;
2324import com .tagtraum .perf .gcviewer .model .GCEvent ;
2425import com .tagtraum .perf .gcviewer .model .GCModel ;
@@ -34,6 +35,9 @@ public class DataReaderIBM_J9_R28 extends AbstractDataReader {
3435 private static final String VERBOSEGC = "verbosegc" ;
3536 private static final String INITIALIZED = "initialized" ;
3637 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" ;
3741 private static final String GC_START = "gc-start" ;
3842 private static final String GC_END = "gc-end" ;
3943 private static final String EXCLUSIVE_END = "exclusive-end" ;
@@ -54,44 +58,70 @@ public GCModel read() throws IOException {
5458 XMLInputFactory factory = XMLInputFactory .newInstance ();
5559 XMLEventReader eventReader = factory .createXMLEventReader (in );
5660 GCEvent currentGcEvent = null ;
61+ String eventNameStart = null ;
5762 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+ }
86106 }
87- }
88107
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+ }
89116 }
90117 }
91118 catch (XMLStreamException e ) {
92119 if (getLogger ().isLoggable (Level .WARNING )) getLogger ().warning ("line " + in .getLineNumber () + ": " + e .toString ());
93120 if (getLogger ().isLoggable (Level .FINE )) getLogger ().log (Level .FINE , "line " + in .getLineNumber () + ": " + e .getMessage (), e );
94121 }
122+ finally {
123+ if (getLogger ().isLoggable (Level .INFO )) getLogger ().info ("Done reading." );
124+ }
95125
96126 return model ;
97127 }
@@ -132,21 +162,37 @@ private GCEvent handleExclusiveStart(StartElement startElement) {
132162 if (getLogger ().isLoggable (Level .WARNING )) getLogger ().warning ("line " + in .getLineNumber () + ": " + e .toString ());
133163 if (getLogger ().isLoggable (Level .FINE )) getLogger ().log (Level .FINE , "line " + in .getLineNumber () + ": " + e .getMessage (), e );
134164 }
135-
165+
136166 return event ;
137167 }
138168
139169 private void handleExclusiveEnd (StartElement startElement , GCEvent event ) {
140170 event .setPause (NumberParser .parseDouble (getAttributeValue (startElement , "durationms" )) / 1000 );
141171 }
142172
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 ());
148193 }
149-
194+ event .setType (type );
195+
150196 String currentElementName = "" ;
151197 while (eventReader .hasNext () && !currentElementName .equals (GC_START )) {
152198
0 commit comments