i = model.getGCEvents();
+ while (i.hasNext()) {
+ GCEvent event = i.next();
+ // Since this data writer is only concerned with one line per gc entry, don't write two like the others.
+
+ // If the true timestamp is present, output the unix timestamp
+ if (model.hasDateStamp()) {
+ out.print(event.getDatestamp().getTime());
+ } else if (model.hasCorrectTimestamp()) {
+ // we have the timestamps therefore we can correct it with the pause time
+ out.print((event.getTimestamp() - event.getPause()));
+ } else {
+ out.print(event.getTimestamp());
+ }
+ out.print(',');
+ out.print(event.getPreUsed()); // pre
+ out.print(',');
+ out.print(event.getTotal());
+ out.print(',');
+ out.print(event.getPause());
+ out.print(',');
+ out.println(event.getExtendedType());
+ }
+ out.flush();
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/DataWriterFactory.java b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/DataWriterFactory.java
index 6939fe3f..0410ae8a 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/DataWriterFactory.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/DataWriterFactory.java
@@ -1,60 +1,60 @@
-package com.tagtraum.perf.gcviewer.exp.impl;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Map;
-
-import com.tagtraum.perf.gcviewer.exp.DataWriter;
-import com.tagtraum.perf.gcviewer.exp.DataWriterType;
-import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
-
-/**
- * Factory for all available {@link DataWriter} implementations.
- *
- * Date: Feb 1, 2002
- *
Time: 10:34:39 AM
- * @author Hendrik Schreiber
- */
-public class DataWriterFactory {
-
- /**
- * Standard factory method to retrieve one of the DataWriter
implementations.
- * If a DataWriter implementation needs additional configuration, use the other method.
- *
- * @param file file, where to write output to
- * @param type type of DataWriter
- * @return instance of DataWriter according to type
parameter
- * @throws IOException unknown DataWriter or problem creating file
- * @see DataWriterFactory#getDataWriter(File, DataWriterType, Map)
- */
- public static DataWriter getDataWriter(File file, DataWriterType type) throws IOException {
- return getDataWriter(file, type, null);
- }
-
- /**
- * Factory method to retrieve one of the DataWriter
implementations including
- * the option to add a map of configuration objects. The map will be passed to the DataWriter,
- * which can use its contents.
- *
- * @param file file, where to write output to
- * @param type type of DataWriter
- * @param configuration Map containing additional configuration objects that will be passed
- * to the DataWriter. All DataWriters supporting this parameter, need to document, what
- * they expect here.
- * @return instance of DataWriter accorting to type
parameter
- * @throws IOException unknown DataWriter or problem creating file
- */
- public static DataWriter getDataWriter(File file, DataWriterType type, Map configuration) throws IOException {
- FileOutputStream outputStream = new FileOutputStream(file);
- switch (type) {
- case PLAIN : return new PlainDataWriter(outputStream);
- case CSV : return new CSVDataWriter(outputStream);
- case CSV_TS : return new CSVTSDataWriter(outputStream);
- case SIMPLE : return new SimpleGcWriter(outputStream);
- case SUMMARY : return new SummaryDataWriter(outputStream, configuration);
- default : throw new IOException(LocalisationHelper.getString("datawriterfactory_instantiation_failed") + " " + file);
- }
- }
-
-}
+package com.tagtraum.perf.gcviewer.exp.impl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Map;
+
+import com.tagtraum.perf.gcviewer.exp.DataWriter;
+import com.tagtraum.perf.gcviewer.exp.DataWriterType;
+import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
+
+/**
+ * Factory for all available {@link DataWriter} implementations.
+ *
+ * Date: Feb 1, 2002
+ *
Time: 10:34:39 AM
+ * @author Hendrik Schreiber
+ */
+public class DataWriterFactory {
+
+ /**
+ * Standard factory method to retrieve one of the DataWriter
implementations.
+ * If a DataWriter implementation needs additional configuration, use the other method.
+ *
+ * @param file file, where to write output to
+ * @param type type of DataWriter
+ * @return instance of DataWriter according to type
parameter
+ * @throws IOException unknown DataWriter or problem creating file
+ * @see DataWriterFactory#getDataWriter(File, DataWriterType, Map)
+ */
+ public static DataWriter getDataWriter(File file, DataWriterType type) throws IOException {
+ return getDataWriter(file, type, null);
+ }
+
+ /**
+ * Factory method to retrieve one of the DataWriter
implementations including
+ * the option to add a map of configuration objects. The map will be passed to the DataWriter,
+ * which can use its contents.
+ *
+ * @param file file, where to write output to
+ * @param type type of DataWriter
+ * @param configuration Map containing additional configuration objects that will be passed
+ * to the DataWriter. All DataWriters supporting this parameter, need to document, what
+ * they expect here.
+ * @return instance of DataWriter accorting to type
parameter
+ * @throws IOException unknown DataWriter or problem creating file
+ */
+ public static DataWriter getDataWriter(File file, DataWriterType type, Map configuration) throws IOException {
+ FileOutputStream outputStream = new FileOutputStream(file);
+ switch (type) {
+ case PLAIN : return new PlainDataWriter(outputStream);
+ case CSV : return new CSVDataWriter(outputStream);
+ case CSV_TS : return new CSVTSDataWriter(outputStream);
+ case SIMPLE : return new SimpleGcWriter(outputStream);
+ case SUMMARY : return new SummaryDataWriter(outputStream, configuration);
+ default : throw new IOException(LocalisationHelper.getString("datawriterfactory_instantiation_failed") + " " + file);
+ }
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/PlainDataWriter.java b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/PlainDataWriter.java
index afd9ee3e..81fbb126 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/PlainDataWriter.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/PlainDataWriter.java
@@ -1,37 +1,37 @@
-package com.tagtraum.perf.gcviewer.exp.impl;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.exp.AbstractDataWriter;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Writes the model using the toString()-methode of {@link GCEvent}.
- *
- * Date: Feb 1, 2002
- * Time: 9:58:11 AM
- * @author Hendrik Schreiber
- */
-public class PlainDataWriter extends AbstractDataWriter {
-
- public PlainDataWriter(OutputStream out) {
- super(out);
- }
-
- /**
- * Writes the model and flushes the internal PrintWriter.
- */
- public void write(GCModel model) throws IOException {
- Iterator> i = model.getEvents();
- while (i.hasNext()) {
- out.println(i.next().toString());
- }
-
- out.flush();
- }
-
-}
+package com.tagtraum.perf.gcviewer.exp.impl;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.exp.AbstractDataWriter;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Writes the model using the toString()-methode of {@link GCEvent}.
+ *
+ * Date: Feb 1, 2002
+ * Time: 9:58:11 AM
+ * @author Hendrik Schreiber
+ */
+public class PlainDataWriter extends AbstractDataWriter {
+
+ public PlainDataWriter(OutputStream out) {
+ super(out);
+ }
+
+ /**
+ * Writes the model and flushes the internal PrintWriter.
+ */
+ public void write(GCModel model) throws IOException {
+ Iterator> i = model.getEvents();
+ while (i.hasNext()) {
+ out.println(i.next().toString());
+ }
+
+ out.flush();
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/SimpleGcWriter.java b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/SimpleGcWriter.java
index 6dd15f0a..294c5723 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/SimpleGcWriter.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/exp/impl/SimpleGcWriter.java
@@ -1,118 +1,118 @@
-package com.tagtraum.perf.gcviewer.exp.impl;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-import java.util.Locale;
-
-import com.tagtraum.perf.gcviewer.exp.AbstractDataWriter;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Generation;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Exports stop-the-world events in the "simple gc log" format (compatible to GCHisto).
- * This writer writes every event on its own line with the following format
- * GC_TYPE START_SEC DURATION_SEC
- *
- * @see http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2012-November/001428.html
- * @see GCHisto
- * @see GCHisto documentation
- *
- * @author Joerg Wuethrich
- * created on: 08.12.2012
- */
-public class SimpleGcWriter extends AbstractDataWriter {
-
- public SimpleGcWriter(OutputStream outputStream) {
- super(outputStream);
- }
-
- /**
- * @see com.tagtraum.perf.gcviewer.exp.AbstractDataWriter#write(com.tagtraum.perf.gcviewer.model.GCModel)
- */
- @Override
- public void write(GCModel model) throws IOException {
- Iterator> i = model.getEvents();
- final Locale NO_LOCALE = null;
- while (i.hasNext()) {
- AbstractGCEvent> abstractEvent = i.next();
- if (abstractEvent.isStopTheWorld()) {
- out.printf(NO_LOCALE,
- "%s %f %f%n",
- getSimpleType(abstractEvent),
- abstractEvent.getTimestamp(),
- abstractEvent.getPause());
- }
- }
-
- out.flush();
- }
-
- /**
- * Simple GC Logs GC_TYPE must not contain spaces. This method makes sure they don't.
- *
- * @param typeName name of the gc event type
- * @return name without spaces
- */
- private String getSimpleType(AbstractGCEvent> event) {
- String simpleType;
-
- if (isYoungOnly(event)) {
- simpleType = "YoungGC";
- }
- else if (event.isInitialMark()) {
- simpleType = "InitialMarkGC";
- }
- else if (event.isRemark()) {
- simpleType = "RemarkGC";
- }
- else if (event.isFull()) {
- simpleType = "FullGC";
- }
- else {
- simpleType = stripBlanks(event.getTypeAsString());
- }
-
- return simpleType;
- }
-
- /**
- * Does the event consist of young generation events only (main and detail events).
- *
- * @param event event to be analysed.
- * @return true
if the event is only in the young generation, false
otherwise
- */
- private boolean isYoungOnly(AbstractGCEvent> event) {
- boolean isYoungOnly = false;
- if (!event.hasDetails() && event.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
- isYoungOnly = true;
- }
- else if (event.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
- isYoungOnly = true;
- @SuppressWarnings("unchecked")
- Iterator> iterator = (Iterator>) event.details();
- while (iterator.hasNext()) {
- AbstractGCEvent> currentEvent = iterator.next();
- if (!currentEvent.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
- isYoungOnly = false;
- break;
- }
- }
- }
-
- return isYoungOnly;
- }
-
- private String stripBlanks(String eventTypeName) {
- StringBuilder sb = new StringBuilder(eventTypeName);
- for (int i = sb.length()-1; i >= 0; --i) {
- if (sb.charAt(i) == ' ') {
- sb.deleteCharAt(i);
- }
- }
-
- return sb.toString();
- }
-
-}
+package com.tagtraum.perf.gcviewer.exp.impl;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.Locale;
+
+import com.tagtraum.perf.gcviewer.exp.AbstractDataWriter;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Generation;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Exports stop-the-world events in the "simple gc log" format (compatible to GCHisto).
+ * This writer writes every event on its own line with the following format
+ * GC_TYPE START_SEC DURATION_SEC
+ *
+ * @see http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2012-November/001428.html
+ * @see GCHisto
+ * @see GCHisto documentation
+ *
+ * @author Joerg Wuethrich
+ * created on: 08.12.2012
+ */
+public class SimpleGcWriter extends AbstractDataWriter {
+
+ public SimpleGcWriter(OutputStream outputStream) {
+ super(outputStream);
+ }
+
+ /**
+ * @see com.tagtraum.perf.gcviewer.exp.AbstractDataWriter#write(com.tagtraum.perf.gcviewer.model.GCModel)
+ */
+ @Override
+ public void write(GCModel model) throws IOException {
+ Iterator> i = model.getEvents();
+ final Locale NO_LOCALE = null;
+ while (i.hasNext()) {
+ AbstractGCEvent> abstractEvent = i.next();
+ if (abstractEvent.isStopTheWorld()) {
+ out.printf(NO_LOCALE,
+ "%s %f %f%n",
+ getSimpleType(abstractEvent),
+ abstractEvent.getTimestamp(),
+ abstractEvent.getPause());
+ }
+ }
+
+ out.flush();
+ }
+
+ /**
+ * Simple GC Logs GC_TYPE must not contain spaces. This method makes sure they don't.
+ *
+ * @param typeName name of the gc event type
+ * @return name without spaces
+ */
+ private String getSimpleType(AbstractGCEvent> event) {
+ String simpleType;
+
+ if (isYoungOnly(event)) {
+ simpleType = "YoungGC";
+ }
+ else if (event.isInitialMark()) {
+ simpleType = "InitialMarkGC";
+ }
+ else if (event.isRemark()) {
+ simpleType = "RemarkGC";
+ }
+ else if (event.isFull()) {
+ simpleType = "FullGC";
+ }
+ else {
+ simpleType = stripBlanks(event.getTypeAsString());
+ }
+
+ return simpleType;
+ }
+
+ /**
+ * Does the event consist of young generation events only (main and detail events).
+ *
+ * @param event event to be analysed.
+ * @return true
if the event is only in the young generation, false
otherwise
+ */
+ private boolean isYoungOnly(AbstractGCEvent> event) {
+ boolean isYoungOnly = false;
+ if (!event.hasDetails() && event.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
+ isYoungOnly = true;
+ }
+ else if (event.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
+ isYoungOnly = true;
+ @SuppressWarnings("unchecked")
+ Iterator> iterator = (Iterator>) event.details();
+ while (iterator.hasNext()) {
+ AbstractGCEvent> currentEvent = iterator.next();
+ if (!currentEvent.getExtendedType().getGeneration().equals(Generation.YOUNG)) {
+ isYoungOnly = false;
+ break;
+ }
+ }
+ }
+
+ return isYoungOnly;
+ }
+
+ private String stripBlanks(String eventTypeName) {
+ StringBuilder sb = new StringBuilder(eventTypeName);
+ for (int i = sb.length()-1; i >= 0; --i) {
+ if (sb.charAt(i) == ' ') {
+ sb.deleteCharAt(i);
+ }
+ }
+
+ return sb.toString();
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReader.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReader.java
index 8ea64a70..51bcaa95 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReader.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReader.java
@@ -1,15 +1,15 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.io.IOException;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:01:01 PM
- * @author Hendrik Schreiber
- */
-public interface DataReader {
- public GCModel read() throws IOException;
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.io.IOException;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:01:01 PM
+ * @author Hendrik Schreiber
+ */
+public interface DataReader {
+ public GCModel read() throws IOException;
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderException.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderException.java
index 71ab0349..b7718b24 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderException.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderException.java
@@ -1,28 +1,28 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-/**
- * Specific exception type to indicate that something went wrong while trying to read data
- * from a gc log file / url.
- *
- * @author Joerg Wuethrich
- * created on: 24.11.2012
- */
-public class DataReaderException extends Exception {
-
- public DataReaderException() {
- super();
- }
-
- public DataReaderException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public DataReaderException(String message) {
- super(message);
- }
-
- public DataReaderException(Throwable cause) {
- super(cause);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+/**
+ * Specific exception type to indicate that something went wrong while trying to read data
+ * from a gc log file / url.
+ *
+ * @author Joerg Wuethrich
+ * created on: 24.11.2012
+ */
+public class DataReaderException extends Exception {
+
+ public DataReaderException() {
+ super();
+ }
+
+ public DataReaderException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public DataReaderException(String message) {
+ super(message);
+ }
+
+ public DataReaderException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFacade.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFacade.java
index db74b30f..f86de7fa 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFacade.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFacade.java
@@ -1,155 +1,155 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.awt.BorderLayout;
-import java.awt.Component;
-import java.awt.Dimension;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.text.MessageFormat;
-import java.util.logging.Logger;
-
-import javax.swing.BorderFactory;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.SwingUtilities;
-
-import com.tagtraum.perf.gcviewer.log.TextAreaLogHandler;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-import com.tagtraum.perf.gcviewer.util.BuildInfoReader;
-import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
-import com.tagtraum.perf.gcviewer.util.HttpUrlConnectionHelper;
-
-/**
- * DataReaderFacade is a helper class providing a simple interface to read a gc log file
- * including standard error handling.
- *
- * @author Joerg Wuethrich
- * created on: 24.11.2012
- */
-public class DataReaderFacade {
-
- private static final Logger PARSER_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer");
- private static final Logger LOGGER = Logger.getLogger(DataReaderFacade.class.getName());
-
- /**
- * Loads a model from a given pathToData
logging all exceptions that occur.
- *
- * @param fileOrUrl path to a file or URL
- * @param showErrorDialog true
if a window with an error description should be shown
- * if one occurred
- * @param parent parent for the error dialog
- * @return instance of GCModel containing all information that was parsed
- * @throws DataReaderException if any exception occurred, it is logged and added as the cause
- * to this exception
- * @see {@link #loadModel(URL, boolean, Component)}
- */
- public GCModel loadModel(String fileOrUrl, boolean showErrorDialog, Component parent) throws DataReaderException {
- if (fileOrUrl == null) {
- throw new NullPointerException("fileOrUrl must never be null");
- }
-
- try {
- URL url = null;
- if (fileOrUrl.startsWith("http")) {
- url = new URL(fileOrUrl);
- }
- else {
- url = new File(fileOrUrl).toURI().toURL();
- }
-
- return loadModel(url, showErrorDialog, parent);
- }
- catch (MalformedURLException e) {
- throw new DataReaderException("could not load from '" + fileOrUrl + "'", e);
- }
- }
-
- /**
- * Loads a model from a given url
logging all exceptions that occur.
- *
- * @param url where to look for the data to be interpreted
- * @param showErrorDialog true
if a window with an error description should be shown
- * if one occurred
- * @param parent parent for the error dialog
- * @return instance of GCModel containing all information that was parsed
- * @throws DataReaderException if any exception occurred, it is logged and added as the cause
- * to this exception
- */
- public GCModel loadModel(URL url, boolean showErrorDialog, Component parent) throws DataReaderException {
- // set up special handler
- TextAreaLogHandler textAreaLogHandler = new TextAreaLogHandler();
- PARSER_LOGGER.addHandler(textAreaLogHandler);
- DataReaderException dataReaderException = new DataReaderException();
- GCModel model = null;
- try {
- LOGGER.info("GCViewer version " + BuildInfoReader.getVersion() + " (" + BuildInfoReader.getBuildDate() + ")");
- model = readModel(url);
- model.setURL(url);
- }
- catch (RuntimeException | IOException e) {
- LOGGER.severe(LocalisationHelper.getString("fileopen_dialog_read_file_failed")
- + "\n" + e.toString() + " " + e.getLocalizedMessage());
- dataReaderException.initCause(e);
- }
- finally {
- // remove special handler after we are done with reading.
- PARSER_LOGGER.removeHandler(textAreaLogHandler);
- }
-
- if (textAreaLogHandler.hasErrors() && showErrorDialog) {
- showErrorDialog(url, textAreaLogHandler, parent);
- }
-
- if (dataReaderException.getCause() != null) {
- throw dataReaderException;
- }
-
- return model;
- }
-
- /**
- * Open and parse data designated by url
.
- * @param url where to find data to be parsed
- * @return GCModel
- * @throws IOException problem reading the data
- */
- private GCModel readModel(URL url) throws IOException {
- DataReaderFactory factory = new DataReaderFactory();
- final URLConnection conn = url.openConnection();
- final InputStream in = conn instanceof HttpURLConnection
- ? HttpUrlConnectionHelper.openInputStream((HttpURLConnection)conn, HttpUrlConnectionHelper.GZIP)
- : conn.getInputStream();
- final DataReader reader = factory.getDataReader(in);
- final GCModel model = reader.read();
- return model;
- }
-
- /**
- * Show error dialog containing all information related to the error.
- * @param url url where data should have been read from
- * @param textAreaLogHandler handler where all logging information was gathered
- * @param parent parent component for the dialog
- */
- private void showErrorDialog(final URL url, TextAreaLogHandler textAreaLogHandler, final Component parent) {
- final JPanel panel = new JPanel(new BorderLayout());
- final JLabel messageLabel = new JLabel(new MessageFormat(LocalisationHelper.getString("datareader_parseerror_dialog_message")).format(new Object[]{textAreaLogHandler.getErrorCount(), url}));
- messageLabel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
- panel.add(messageLabel, BorderLayout.NORTH);
- final JScrollPane textAreaScrollPane = new JScrollPane(textAreaLogHandler.getTextArea());
- textAreaScrollPane.setPreferredSize(new Dimension(700, 500));
- panel.add(textAreaScrollPane, BorderLayout.CENTER);
- SwingUtilities.invokeLater(new Runnable(){
- public void run() {
- JOptionPane.showMessageDialog(parent, panel, new MessageFormat(LocalisationHelper.getString("datareader_parseerror_dialog_title")).format(new Object[]{url}), JOptionPane.ERROR_MESSAGE);
- }
- });
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.text.MessageFormat;
+import java.util.logging.Logger;
+
+import javax.swing.BorderFactory;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+
+import com.tagtraum.perf.gcviewer.log.TextAreaLogHandler;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+import com.tagtraum.perf.gcviewer.util.BuildInfoReader;
+import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
+import com.tagtraum.perf.gcviewer.util.HttpUrlConnectionHelper;
+
+/**
+ * DataReaderFacade is a helper class providing a simple interface to read a gc log file
+ * including standard error handling.
+ *
+ * @author Joerg Wuethrich
+ * created on: 24.11.2012
+ */
+public class DataReaderFacade {
+
+ private static final Logger PARSER_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer");
+ private static final Logger LOGGER = Logger.getLogger(DataReaderFacade.class.getName());
+
+ /**
+ * Loads a model from a given pathToData
logging all exceptions that occur.
+ *
+ * @param fileOrUrl path to a file or URL
+ * @param showErrorDialog true
if a window with an error description should be shown
+ * if one occurred
+ * @param parent parent for the error dialog
+ * @return instance of GCModel containing all information that was parsed
+ * @throws DataReaderException if any exception occurred, it is logged and added as the cause
+ * to this exception
+ * @see {@link #loadModel(URL, boolean, Component)}
+ */
+ public GCModel loadModel(String fileOrUrl, boolean showErrorDialog, Component parent) throws DataReaderException {
+ if (fileOrUrl == null) {
+ throw new NullPointerException("fileOrUrl must never be null");
+ }
+
+ try {
+ URL url = null;
+ if (fileOrUrl.startsWith("http")) {
+ url = new URL(fileOrUrl);
+ }
+ else {
+ url = new File(fileOrUrl).toURI().toURL();
+ }
+
+ return loadModel(url, showErrorDialog, parent);
+ }
+ catch (MalformedURLException e) {
+ throw new DataReaderException("could not load from '" + fileOrUrl + "'", e);
+ }
+ }
+
+ /**
+ * Loads a model from a given url
logging all exceptions that occur.
+ *
+ * @param url where to look for the data to be interpreted
+ * @param showErrorDialog true
if a window with an error description should be shown
+ * if one occurred
+ * @param parent parent for the error dialog
+ * @return instance of GCModel containing all information that was parsed
+ * @throws DataReaderException if any exception occurred, it is logged and added as the cause
+ * to this exception
+ */
+ public GCModel loadModel(URL url, boolean showErrorDialog, Component parent) throws DataReaderException {
+ // set up special handler
+ TextAreaLogHandler textAreaLogHandler = new TextAreaLogHandler();
+ PARSER_LOGGER.addHandler(textAreaLogHandler);
+ DataReaderException dataReaderException = new DataReaderException();
+ GCModel model = null;
+ try {
+ LOGGER.info("GCViewer version " + BuildInfoReader.getVersion() + " (" + BuildInfoReader.getBuildDate() + ")");
+ model = readModel(url);
+ model.setURL(url);
+ }
+ catch (RuntimeException | IOException e) {
+ LOGGER.severe(LocalisationHelper.getString("fileopen_dialog_read_file_failed")
+ + "\n" + e.toString() + " " + e.getLocalizedMessage());
+ dataReaderException.initCause(e);
+ }
+ finally {
+ // remove special handler after we are done with reading.
+ PARSER_LOGGER.removeHandler(textAreaLogHandler);
+ }
+
+ if (textAreaLogHandler.hasErrors() && showErrorDialog) {
+ showErrorDialog(url, textAreaLogHandler, parent);
+ }
+
+ if (dataReaderException.getCause() != null) {
+ throw dataReaderException;
+ }
+
+ return model;
+ }
+
+ /**
+ * Open and parse data designated by url
.
+ * @param url where to find data to be parsed
+ * @return GCModel
+ * @throws IOException problem reading the data
+ */
+ private GCModel readModel(URL url) throws IOException {
+ DataReaderFactory factory = new DataReaderFactory();
+ final URLConnection conn = url.openConnection();
+ final InputStream in = conn instanceof HttpURLConnection
+ ? HttpUrlConnectionHelper.openInputStream((HttpURLConnection)conn, HttpUrlConnectionHelper.GZIP)
+ : conn.getInputStream();
+ final DataReader reader = factory.getDataReader(in);
+ final GCModel model = reader.read();
+ return model;
+ }
+
+ /**
+ * Show error dialog containing all information related to the error.
+ * @param url url where data should have been read from
+ * @param textAreaLogHandler handler where all logging information was gathered
+ * @param parent parent component for the dialog
+ */
+ private void showErrorDialog(final URL url, TextAreaLogHandler textAreaLogHandler, final Component parent) {
+ final JPanel panel = new JPanel(new BorderLayout());
+ final JLabel messageLabel = new JLabel(new MessageFormat(LocalisationHelper.getString("datareader_parseerror_dialog_message")).format(new Object[]{textAreaLogHandler.getErrorCount(), url}));
+ messageLabel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0));
+ panel.add(messageLabel, BorderLayout.NORTH);
+ final JScrollPane textAreaScrollPane = new JScrollPane(textAreaLogHandler.getTextArea());
+ textAreaScrollPane.setPreferredSize(new Dimension(700, 500));
+ panel.add(textAreaScrollPane, BorderLayout.CENTER);
+ SwingUtilities.invokeLater(new Runnable(){
+ public void run() {
+ JOptionPane.showMessageDialog(parent, panel, new MessageFormat(LocalisationHelper.getString("datareader_parseerror_dialog_title")).format(new Object[]{url}), JOptionPane.ERROR_MESSAGE);
+ }
+ });
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFactory.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFactory.java
index 6d1e8bb6..3517e095 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFactory.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFactory.java
@@ -1,198 +1,198 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.io.BufferedInputStream;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.StringTokenizer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.zip.GZIPInputStream;
-
-import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 6:47:45 PM
- * @author Hendrik Schreiber
- */
-public class DataReaderFactory {
-
- private static Logger LOG = Logger.getLogger(DataReaderFactory.class.getName());
- private static final int ONE_KB = 1024;
- private static final int FOUR_KB = ONE_KB * 4;
- private static final int MAX_ATTEMPT_COUNT = 100;
-
- /**
- * Returns the {@link DataReader} determined by content analysis. If no datareader can
- * be determined, an Exception is thrown.
- *
- * @param inStream input stream to be read
- * @return DataReader appropriate datareader if it could be determined
- * @throws IOException if no appropriate datareader could be determined
- */
- public DataReader getDataReader(final InputStream inStream) throws IOException {
- InputStream in = new BufferedInputStream(inStream, FOUR_KB);
- // isGZipped relies on streams to support "mark" -> BufferdInputStream does
- if (isGZipped(in)) {
- LOG.info("GZip stream detected");
- in = new BufferedInputStream(new GZIPInputStream(in, FOUR_KB), FOUR_KB);
- }
-
- DataReader dataReader = null;
- long nextPos = 0;
- String chunkOfLastLine = null;
- int attemptCount = 0;
- String s = "";
- while (attemptCount < MAX_ATTEMPT_COUNT) {
- in.mark(FOUR_KB + (int) nextPos);
- if (nextPos > 0) {
- long skipped = in.skip(nextPos);
- if (skipped != nextPos) {
- break;
- }
- }
- byte[] buf = new byte[ONE_KB * 3];
- int length = in.read(buf);
- in.reset();
-
- if (length <= 0) {
- break;
- }
- nextPos += length;
-
- s = new String(buf, 0, length, "ASCII");
- if (chunkOfLastLine != null && chunkOfLastLine.length() > 0) {
- s = chunkOfLastLine + s;
- }
- dataReader = getDataReaderBySample(s, in);
- if (dataReader != null) {
- break;
- }
-
- int index = s.lastIndexOf('\n');
- if (index >= 0) {
- chunkOfLastLine = s.substring(index + 1, s.length());
- } else {
- chunkOfLastLine = "";
- }
- attemptCount++;
- }
-
- if (dataReader == null) {
- if (LOG.isLoggable(Level.SEVERE)) LOG.severe(LocalisationHelper.getString("datareaderfactory_instantiation_failed")
- + "\ncontent:"
- + "\n" + s);
- throw new IOException(LocalisationHelper.getString("datareaderfactory_instantiation_failed"));
- }
- return dataReader;
- }
-
- private DataReader getDataReaderBySample(String s, InputStream in) throws IOException {
- // if there is a [memory ] somewhere in the first chunk of the logs, it is JRockit
- if (s.indexOf("[memory ]") != -1) {
- int startOfRealLog = s.lastIndexOf("<");
- // skip ahead of -: KB->KB (KB
- String realLog;
- if (startOfRealLog >= 0){
- realLog = s.substring(startOfRealLog);
- // skip all start report info to real log to determine JRockit version
- } else {
- realLog = s;
- }
- if (realLog.indexOf("->") == -1) {
- return null; // No GC logs of format 1641728K->148365K (3145728K) yet, read next chunk
- }
- // JRockit 1.5 and 1.6 logs look like: [memory ][Tue Nov 13 08:39:01 2012][01684] [OC#1]
- if ((realLog.indexOf("[YC#") != -1) ||(realLog.indexOf("[OC#") != -1)) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.6");
- return new DataReaderJRockit1_6_0(in);
- } else if ((realLog.indexOf("\n[memory") == -1) && (realLog.indexOf("[INFO ][memory") == -1)) {
- // Only JRockit 1.4 can have GC logs with verbose timestamp precedig "[memory ]"
- //[Wed Nov 16 15:19:38 2005][29147][memory ] 30.485-30.596: GC 23386K->8321K (32768K), 29.223 ms
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.4.2");
- return new DataReaderJRockit1_4_2(in);
- } else {
- // may include some non-verbose JRockit 1.4 logs but should parse correctly as 1.5
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.5");
- return new DataReaderJRockit1_5_0(in);
- }
- } else if (s.indexOf("since last AF or CON>") != -1) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: IBM 1.4.2");
- return new DataReaderIBM1_4_2(in);
- } else if (s.indexOf("GC cycle started") != -1) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: IBM 1.3.1");
- return new DataReaderIBM1_3_1(in);
- } else if (s.indexOf(" 0 || s.indexOf("G1Ergonomics") > 0) {
- // G1 logger usually starts with ": [GC pause (young)...]"
- // but can start with : [G1Ergonomics (Heap Sizing) expand the heap...
- // with certain logging flaggs.
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.6.x G1 collector");
- return new DataReaderSun1_6_0G1(in, GcLogType.SUN1_6G1);
- } else if (s.indexOf("[Times:") > 0) {
- // all 1.6 lines end with a block like this "[Times: user=1.13 sys=0.08, real=0.95 secs]"
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.6.x");
- return new DataReaderSun1_6_0(in, GcLogType.SUN1_6);
- } else if (s.indexOf("CMS-initial-mark") != -1 || s.indexOf("PSYoungGen") != -1) {
- // format is 1.5, but datareader for 1_6_0 can handle it
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.5.x");
- return new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- } else if (s.indexOf(": [") != -1) {
- // format is 1.4, but datareader for 1_6_0 can handle it
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.4.x");
- return new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- } else if (s.indexOf("[GC") != -1 || s.indexOf("[Full GC") != -1 || s.indexOf("[Inc GC")!=-1) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.3.1");
- return new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
- } else if (s.indexOf("') != -1 && new StringTokenizer(s.substring(0, s.indexOf('>')+1), " ").countTokens() == 20) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: HP-UX 1.2/1.3/1.4.0");
- return new DataReaderHPUX1_2(in);
- } else if (s.indexOf("') != -1 && new StringTokenizer(s.substring(0, s.indexOf('>')+1), " ").countTokens() == 22) {
- if (LOG.isLoggable(Level.INFO)) LOG.info("File format: HP-UX 1.4.1/1.4.2");
- return new DataReaderHPUX1_4_1(in);
- } else if (s.indexOf("true if the first two bytes are equal to the GZIP_MAGIC number
- * @throws IOException
- */
- private boolean isGZipped(final InputStream in) throws IOException {
- int firstBytes = 0;
- if (in.markSupported()) {
- // Reads unsigned short in Intel byte order and resets the stream to the start position.
- in.mark(2);
- final int b1 = in.read();
- final int b2 = in.read();
- if (b2 < 0) {
- throw new EOFException();
- }
- firstBytes = (b2 << 8) | b1;
- in.reset();
- }
- else {
- LOG.warning("mark() not supported for current stream!");
- }
-
- return firstBytes == GZIPInputStream.GZIP_MAGIC;
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.io.BufferedInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.StringTokenizer;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.GZIPInputStream;
+
+import com.tagtraum.perf.gcviewer.util.LocalisationHelper;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 6:47:45 PM
+ * @author Hendrik Schreiber
+ */
+public class DataReaderFactory {
+
+ private static Logger LOG = Logger.getLogger(DataReaderFactory.class.getName());
+ private static final int ONE_KB = 1024;
+ private static final int FOUR_KB = ONE_KB * 4;
+ private static final int MAX_ATTEMPT_COUNT = 100;
+
+ /**
+ * Returns the {@link DataReader} determined by content analysis. If no datareader can
+ * be determined, an Exception is thrown.
+ *
+ * @param inStream input stream to be read
+ * @return DataReader appropriate datareader if it could be determined
+ * @throws IOException if no appropriate datareader could be determined
+ */
+ public DataReader getDataReader(final InputStream inStream) throws IOException {
+ InputStream in = new BufferedInputStream(inStream, FOUR_KB);
+ // isGZipped relies on streams to support "mark" -> BufferdInputStream does
+ if (isGZipped(in)) {
+ LOG.info("GZip stream detected");
+ in = new BufferedInputStream(new GZIPInputStream(in, FOUR_KB), FOUR_KB);
+ }
+
+ DataReader dataReader = null;
+ long nextPos = 0;
+ String chunkOfLastLine = null;
+ int attemptCount = 0;
+ String s = "";
+ while (attemptCount < MAX_ATTEMPT_COUNT) {
+ in.mark(FOUR_KB + (int) nextPos);
+ if (nextPos > 0) {
+ long skipped = in.skip(nextPos);
+ if (skipped != nextPos) {
+ break;
+ }
+ }
+ byte[] buf = new byte[ONE_KB * 3];
+ int length = in.read(buf);
+ in.reset();
+
+ if (length <= 0) {
+ break;
+ }
+ nextPos += length;
+
+ s = new String(buf, 0, length, "ASCII");
+ if (chunkOfLastLine != null && chunkOfLastLine.length() > 0) {
+ s = chunkOfLastLine + s;
+ }
+ dataReader = getDataReaderBySample(s, in);
+ if (dataReader != null) {
+ break;
+ }
+
+ int index = s.lastIndexOf('\n');
+ if (index >= 0) {
+ chunkOfLastLine = s.substring(index + 1, s.length());
+ } else {
+ chunkOfLastLine = "";
+ }
+ attemptCount++;
+ }
+
+ if (dataReader == null) {
+ if (LOG.isLoggable(Level.SEVERE)) LOG.severe(LocalisationHelper.getString("datareaderfactory_instantiation_failed")
+ + "\ncontent:"
+ + "\n" + s);
+ throw new IOException(LocalisationHelper.getString("datareaderfactory_instantiation_failed"));
+ }
+ return dataReader;
+ }
+
+ private DataReader getDataReaderBySample(String s, InputStream in) throws IOException {
+ // if there is a [memory ] somewhere in the first chunk of the logs, it is JRockit
+ if (s.indexOf("[memory ]") != -1) {
+ int startOfRealLog = s.lastIndexOf("<");
+ // skip ahead of -: KB->KB (KB
+ String realLog;
+ if (startOfRealLog >= 0){
+ realLog = s.substring(startOfRealLog);
+ // skip all start report info to real log to determine JRockit version
+ } else {
+ realLog = s;
+ }
+ if (realLog.indexOf("->") == -1) {
+ return null; // No GC logs of format 1641728K->148365K (3145728K) yet, read next chunk
+ }
+ // JRockit 1.5 and 1.6 logs look like: [memory ][Tue Nov 13 08:39:01 2012][01684] [OC#1]
+ if ((realLog.indexOf("[YC#") != -1) ||(realLog.indexOf("[OC#") != -1)) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.6");
+ return new DataReaderJRockit1_6_0(in);
+ } else if ((realLog.indexOf("\n[memory") == -1) && (realLog.indexOf("[INFO ][memory") == -1)) {
+ // Only JRockit 1.4 can have GC logs with verbose timestamp precedig "[memory ]"
+ //[Wed Nov 16 15:19:38 2005][29147][memory ] 30.485-30.596: GC 23386K->8321K (32768K), 29.223 ms
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.4.2");
+ return new DataReaderJRockit1_4_2(in);
+ } else {
+ // may include some non-verbose JRockit 1.4 logs but should parse correctly as 1.5
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: JRockit 1.5");
+ return new DataReaderJRockit1_5_0(in);
+ }
+ } else if (s.indexOf("since last AF or CON>") != -1) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: IBM 1.4.2");
+ return new DataReaderIBM1_4_2(in);
+ } else if (s.indexOf("GC cycle started") != -1) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: IBM 1.3.1");
+ return new DataReaderIBM1_3_1(in);
+ } else if (s.indexOf(" 0 || s.indexOf("G1Ergonomics") > 0) {
+ // G1 logger usually starts with ": [GC pause (young)...]"
+ // but can start with : [G1Ergonomics (Heap Sizing) expand the heap...
+ // with certain logging flaggs.
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.6.x G1 collector");
+ return new DataReaderSun1_6_0G1(in, GcLogType.SUN1_6G1);
+ } else if (s.indexOf("[Times:") > 0) {
+ // all 1.6 lines end with a block like this "[Times: user=1.13 sys=0.08, real=0.95 secs]"
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.6.x");
+ return new DataReaderSun1_6_0(in, GcLogType.SUN1_6);
+ } else if (s.indexOf("CMS-initial-mark") != -1 || s.indexOf("PSYoungGen") != -1) {
+ // format is 1.5, but datareader for 1_6_0 can handle it
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.5.x");
+ return new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ } else if (s.indexOf(": [") != -1) {
+ // format is 1.4, but datareader for 1_6_0 can handle it
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.4.x");
+ return new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ } else if (s.indexOf("[GC") != -1 || s.indexOf("[Full GC") != -1 || s.indexOf("[Inc GC")!=-1) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: Sun 1.3.1");
+ return new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
+ } else if (s.indexOf("') != -1 && new StringTokenizer(s.substring(0, s.indexOf('>')+1), " ").countTokens() == 20) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: HP-UX 1.2/1.3/1.4.0");
+ return new DataReaderHPUX1_2(in);
+ } else if (s.indexOf("') != -1 && new StringTokenizer(s.substring(0, s.indexOf('>')+1), " ").countTokens() == 22) {
+ if (LOG.isLoggable(Level.INFO)) LOG.info("File format: HP-UX 1.4.1/1.4.2");
+ return new DataReaderHPUX1_4_1(in);
+ } else if (s.indexOf("true if the first two bytes are equal to the GZIP_MAGIC number
+ * @throws IOException
+ */
+ private boolean isGZipped(final InputStream in) throws IOException {
+ int firstBytes = 0;
+ if (in.markSupported()) {
+ // Reads unsigned short in Intel byte order and resets the stream to the start position.
+ in.mark(2);
+ final int b1 = in.read();
+ final int b2 = in.read();
+ if (b2 < 0) {
+ throw new EOFException();
+ }
+ firstBytes = (b2 << 8) | b1;
+ in.reset();
+ }
+ else {
+ LOG.warning("mark() not supported for current stream!");
+ }
+
+ return firstBytes == GZIPInputStream.GZIP_MAGIC;
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/GcLogType.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/GcLogType.java
index 7636cfe3..b265af22 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/GcLogType.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/GcLogType.java
@@ -1,29 +1,29 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-/**
- * Enumeration of all supported gc log file types.
- *
- * @author Joerg Wuethrich
- * created on: 30.10.2012
- */
-public enum GcLogType {
- HPUX1_2,
- HPUX1_4_1,
- IBM_J9_5_0,
- IBM1_3_0,
- IBM1_3_1,
- IBM1_4_2,
- IBMI5OS1_4_2,
- JROCKIT1_4_2,
- JRockit1_6_0,
- SUN1_2_2,
- SUN1_3_1,
- SUN1_4,
- SUN1_5,
- SUN1_6,
- SUN1_6G1,
- SUN1_7,
- SUN1_7G1,
- SUN1_8,
- SUN1_8G1,
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+/**
+ * Enumeration of all supported gc log file types.
+ *
+ * @author Joerg Wuethrich
+ * created on: 30.10.2012
+ */
+public enum GcLogType {
+ HPUX1_2,
+ HPUX1_4_1,
+ IBM_J9_5_0,
+ IBM1_3_0,
+ IBM1_3_1,
+ IBM1_4_2,
+ IBMI5OS1_4_2,
+ JROCKIT1_4_2,
+ JRockit1_6_0,
+ SUN1_2_2,
+ SUN1_3_1,
+ SUN1_4,
+ SUN1_5,
+ SUN1_6,
+ SUN1_6G1,
+ SUN1_7,
+ SUN1_7G1,
+ SUN1_8,
+ SUN1_8G1,
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/IBMJ9SAXHandler.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/IBMJ9SAXHandler.java
index 68ebb21d..f0bc2537 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/IBMJ9SAXHandler.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/IBMJ9SAXHandler.java
@@ -1,364 +1,364 @@
-/*
- * =================================================
- * Copyright 2007 Justin Kilimnik (IBM UK)
- * All rights reserved.
- * =================================================
- */
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.logging.Logger;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-import com.tagtraum.perf.gcviewer.util.NumberParser;
-
-/**
- * Simple (only for the -Xgcpolicy:optthruput output) IBMJ9 verbose GC reader.
- * Implemented as a SAX parser since XML based.
- *
- * @author Justin Kilimnik (IBM)
- */
-public class IBMJ9SAXHandler extends DefaultHandler {
- private GCModel model;
- private DateFormat cycleStartGCFormat5 = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US);
- private DateFormat cycleStartGCFormat6 = new SimpleDateFormat("MMM dd HH:mm:ss yyyy", Locale.US);
- private DateFormat current = cycleStartGCFormat5;
- protected AF currentAF;
- int currentTenured = 0; // 0 = none, 1=pre, 2=mid, 3=end
- private static Logger LOG = Logger.getLogger(IBMJ9SAXHandler.class.getName());
- private Date begin = null;
-
- public IBMJ9SAXHandler(GCModel model) {
- this.model = model;
- }
-
- protected Date parseTime(String ts) throws ParseException {
- try {
- return current.parse(ts);
- }
- catch (ParseException e) {
- if (current != cycleStartGCFormat6) {
-
- current = cycleStartGCFormat6;
- return parseTime(ts);
- }
- throw e;
- }
- }
-
- public void startElement(String namespaceURI, String sName, String qName,
- Attributes attrs) throws SAXException {
- try {
- // System.out.println("START: [" + qName + "]");
- if (currentAF == null) {
-
- if ("af".equals(qName)) {
- currentAF = new AF();
- String type = attrs.getValue("type");
- String id = attrs.getValue("id");
- String ts = attrs.getValue("timestamp");
- currentAF.id = id;
- currentAF.type = type;
- final Date date = parseTime(ts);
- currentAF.timestamp = date;
- if (begin == null) {
- begin = date;
- currentAF.elapsedTime = 0L;
- }
- else {
- currentAF.elapsedTime = (currentAF.timestamp.getTime() - begin
- .getTime()) / 1000;
- System.out.println("ElapsedTime: "
- + currentAF.elapsedTime);
- }
- // System.out.println("START: [af, " + type + "]");
-
- }
- }
- else if (currentAF != null) {
- if ("time".equals(qName)) {
- // String pauseStr = attrs.getValue("exclusiveaccessms");
- // double pause = -1D;
- // if(pauseStr != null){
- // pause = NumberParser.parseDouble(pauseStr);
- // currentAF.totalTime = pause/1000;
- // }
-
- String totalStr = attrs.getValue("totalms");
- double total = -1D;
- if (totalStr != null) {
- total = NumberParser.parseDouble(totalStr);
- currentAF.totalTime = total / 1000;
- }
-
- }
- else if ("gc".equals(qName)) {
- String type = attrs.getValue("type");
- currentAF.gcType = type;
- }
- else if ("timesms".equals(qName)) {
- String markStr = attrs.getValue("mark");
- double mark = -1D;
- if (markStr != null) {
- mark = NumberParser.parseDouble(markStr);
- currentAF.gcTimeMark = mark;
- }
- String sweepStr = attrs.getValue("sweep");
- double sweep = -1D;
- if (sweepStr != null) {
- mark = NumberParser.parseDouble(sweepStr);
- currentAF.gcTimeSweep = sweep;
- }
- }
- else if ("tenured".equals(qName)) {
- currentTenured++;
- String freeStr = attrs.getValue("freebytes");
- long free = -1;
- if (freeStr != null) {
- free = Long.parseLong(freeStr);
- }
- String totalStr = attrs.getValue("totalbytes");
- long total = -1;
- if (totalStr != null) {
- total = Long.parseLong(totalStr);
- }
-
- // For now only care about Total - don't break into SOA and
- // LOA
- if (currentTenured == 1) {
- currentAF.initialFreeBytes = free;
- currentAF.initialTotalBytes = total;
- }
- else if (currentTenured == 2) {
- // ignore
- }
- else if (currentTenured == 3) {
- currentAF.afterFreeBytes = free;
- currentAF.afterTotalBytes = total;
- }
- else {
- LOG.warning("currentTenured is > 3!");
- }
- }
- else if ("soa".equals(qName)) {
- String freeStr = attrs.getValue("freebytes");
- long free = -1;
- if (freeStr != null) {
- free = Long.parseLong(freeStr);
- }
- String totalStr = attrs.getValue("totalbytes");
- long total = -1;
- if (totalStr != null) {
- total = Long.parseLong(totalStr);
- }
-
- if (currentTenured == 1) {
- currentAF.initialSOAFreeBytes = free;
- currentAF.initialSOATotalBytes = total;
- }
- else if (currentTenured == 2) {
- // ignore
- }
- else if (currentTenured == 3) {
- currentAF.afterSOAFreeBytes = free;
- currentAF.afterSOATotalBytes = total;
- }
- else {
- LOG.warning("currentTenured is > 3!");
- }
- }
- else if ("loa".equals(qName)) {
- String freeStr = attrs.getValue("freebytes");
- long free = -1;
- if (freeStr != null) {
- free = Long.parseLong(freeStr);
- }
- String totalStr = attrs.getValue("totalbytes");
- long total = -1;
- if (totalStr != null) {
- total = Long.parseLong(totalStr);
- }
-
- if (currentTenured == 1) {
- currentAF.initialLOAFreeBytes = free;
- currentAF.initialLOATotalBytes = total;
- }
- else if (currentTenured == 2) {
- // ignore
- }
- else if (currentTenured == 3) {
- currentAF.afterLOAFreeBytes = free;
- currentAF.afterLOATotalBytes = total;
- }
- else {
- LOG.warning("currentTenured is > 3!");
- }
- }
- }
-
- }
- catch (ParseException e) {
- e.printStackTrace();
- }
- }
-
- public void endElement(String namespaceURI, String simpleName,
- String qualifiedName) throws SAXException {
-
- if ("af".equals(qualifiedName)) {
- System.out.println("In AF endElement!");
- if (currentAF != null) {
- GCEvent event = new GCEvent();
- if (!"tenured".equals(currentAF.type)) {
- LOG.warning("Unhandled AF type: " + currentAF.type);
- }
- if (!"global".equals(currentAF.gcType)) {
- LOG.warning("Different GC type: " + currentAF.gcType);
- }
- else {
- event.setType(AbstractGCEvent.Type.FULL_GC);
- }
- if (currentAF.initialTotalBytes != -1
- && currentAF.initialFreeBytes != -1) {
- event.setPreUsed(currentAF.getPreUsedInKb());
- }
-
- if (currentAF.afterTotalBytes != -1
- && currentAF.afterFreeBytes != -1) {
- event.setPostUsed(currentAF.getPostUsedInKb());
- }
-
- if (currentAF.afterTotalBytes != -1) {
- event.setTotal(currentAF.getTotalInKb());
- }
-
- // event.setTimestamp(currentAF.timestamp.getTime());
- event.setTimestamp(currentAF.elapsedTime);
-
- if (currentAF.totalTime >= 0) {
- event.setPause(currentAF.totalTime);
- }
-
- if (currentAF.afterSOATotalBytes != -1
- && currentAF.afterSOAFreeBytes != -1
- && currentAF.initialSOAFreeBytes != -1
- && currentAF.initialSOATotalBytes != -1) {
-
- final GCEvent detailEvent = new GCEvent();
- detailEvent.setTimestamp(currentAF.elapsedTime);
- detailEvent.setType(AbstractGCEvent.Type.PS_YOUNG_GEN);
- detailEvent.setTenuredDetail(true);
- detailEvent.setPreUsed(currentAF.getPreUsedSoaInKb());
- detailEvent.setPostUsed(currentAF.getPostUsedSoaInKb());
- detailEvent.setTotal(currentAF.getTotalSoaInKb());
- event.add(detailEvent);
- }
-
- if (currentAF.afterLOATotalBytes != -1
- && currentAF.afterLOAFreeBytes != -1
- && currentAF.initialLOAFreeBytes != -1
- && currentAF.initialLOATotalBytes != -1) {
-
- final GCEvent detailEvent = new GCEvent();
- detailEvent.setTimestamp(currentAF.elapsedTime);
- detailEvent.setType(AbstractGCEvent.Type.PS_OLD_GEN);
- detailEvent.setTenuredDetail(true);
- detailEvent.setPreUsed(currentAF.getPreUsedLoaInKb());
- detailEvent.setPostUsed(currentAF.getPostUsedLoaInKb());
- detailEvent.setTotal(currentAF.getTotalLoaInKb());
- event.add(detailEvent);
- }
-
- model.add(event);
- currentTenured = 0;
- currentAF = null;
- }
- else {
- LOG.warning("Found end tag with no begin tag");
- }
-
- }
- }
-
-}
-
-/**
- * Holder of GC information for standard Allocation Failures
- */
-class AF {
- String type;
- String id;
- Date timestamp;
- long elapsedTime;
- double intervalms = -1;
- long minRequestedBytes = -1;
- double timeExclusiveAccessMs = -1;
- long initialFreeBytes = -1;
- long initialTotalBytes = -1;
- long initialSOAFreeBytes = -1;
- long initialSOATotalBytes = -1;
- long initialLOAFreeBytes = -1;
- long initialLOATotalBytes = -1;
- long afterFreeBytes = -1;
- long afterTotalBytes = -1;
- long afterSOAFreeBytes = -1;
- long afterSOATotalBytes = -1;
- long afterLOAFreeBytes = -1;
- long afterLOATotalBytes = -1;
- String gcType;
- double gcIntervalms = -1;
- int gcSoftRefsCleared = -1;
- int gcWeakRefsCleared = -1;
- int gcPhantomRefsCleared = -1;
- double gcTimeMark = -1;
- double gcTimeSweep = -1;
- double gcTimeCompact = -1;
- double gcTime = -1;
- double totalTime = -1;
-
- public int getPreUsedInKb() {
- return (int) ((initialTotalBytes - initialFreeBytes) / 1024);
- }
-
- public int getPostUsedInKb() {
- return (int) ((afterTotalBytes - afterFreeBytes) / 1024);
- }
-
- public int getTotalInKb() {
- return (int) (afterTotalBytes / 1024);
- }
-
- public int getPreUsedSoaInKb() {
- return (int) ((initialSOATotalBytes - initialSOAFreeBytes) / 1024);
- }
-
- public int getPostUsedSoaInKb() {
- return (int) ((afterSOATotalBytes - afterSOAFreeBytes) / 1024);
- }
-
- public int getTotalSoaInKb() {
- return (int) (afterSOATotalBytes / 1024);
- }
-
- public int getPreUsedLoaInKb() {
- return (int) ((initialLOATotalBytes - initialLOAFreeBytes) / 1024);
- }
-
- public int getPostUsedLoaInKb() {
- return (int) ((afterLOATotalBytes - afterLOAFreeBytes) / 1024);
- }
-
- public int getTotalLoaInKb() {
- return (int) (afterLOATotalBytes / 1024);
- }
-}
+/*
+ * =================================================
+ * Copyright 2007 Justin Kilimnik (IBM UK)
+ * All rights reserved.
+ * =================================================
+ */
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.logging.Logger;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+import com.tagtraum.perf.gcviewer.util.NumberParser;
+
+/**
+ * Simple (only for the -Xgcpolicy:optthruput output) IBMJ9 verbose GC reader.
+ * Implemented as a SAX parser since XML based.
+ *
+ * @author Justin Kilimnik (IBM)
+ */
+public class IBMJ9SAXHandler extends DefaultHandler {
+ private GCModel model;
+ private DateFormat cycleStartGCFormat5 = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy", Locale.US);
+ private DateFormat cycleStartGCFormat6 = new SimpleDateFormat("MMM dd HH:mm:ss yyyy", Locale.US);
+ private DateFormat current = cycleStartGCFormat5;
+ protected AF currentAF;
+ int currentTenured = 0; // 0 = none, 1=pre, 2=mid, 3=end
+ private static Logger LOG = Logger.getLogger(IBMJ9SAXHandler.class.getName());
+ private Date begin = null;
+
+ public IBMJ9SAXHandler(GCModel model) {
+ this.model = model;
+ }
+
+ protected Date parseTime(String ts) throws ParseException {
+ try {
+ return current.parse(ts);
+ }
+ catch (ParseException e) {
+ if (current != cycleStartGCFormat6) {
+
+ current = cycleStartGCFormat6;
+ return parseTime(ts);
+ }
+ throw e;
+ }
+ }
+
+ public void startElement(String namespaceURI, String sName, String qName,
+ Attributes attrs) throws SAXException {
+ try {
+ // System.out.println("START: [" + qName + "]");
+ if (currentAF == null) {
+
+ if ("af".equals(qName)) {
+ currentAF = new AF();
+ String type = attrs.getValue("type");
+ String id = attrs.getValue("id");
+ String ts = attrs.getValue("timestamp");
+ currentAF.id = id;
+ currentAF.type = type;
+ final Date date = parseTime(ts);
+ currentAF.timestamp = date;
+ if (begin == null) {
+ begin = date;
+ currentAF.elapsedTime = 0L;
+ }
+ else {
+ currentAF.elapsedTime = (currentAF.timestamp.getTime() - begin
+ .getTime()) / 1000;
+ System.out.println("ElapsedTime: "
+ + currentAF.elapsedTime);
+ }
+ // System.out.println("START: [af, " + type + "]");
+
+ }
+ }
+ else if (currentAF != null) {
+ if ("time".equals(qName)) {
+ // String pauseStr = attrs.getValue("exclusiveaccessms");
+ // double pause = -1D;
+ // if(pauseStr != null){
+ // pause = NumberParser.parseDouble(pauseStr);
+ // currentAF.totalTime = pause/1000;
+ // }
+
+ String totalStr = attrs.getValue("totalms");
+ double total = -1D;
+ if (totalStr != null) {
+ total = NumberParser.parseDouble(totalStr);
+ currentAF.totalTime = total / 1000;
+ }
+
+ }
+ else if ("gc".equals(qName)) {
+ String type = attrs.getValue("type");
+ currentAF.gcType = type;
+ }
+ else if ("timesms".equals(qName)) {
+ String markStr = attrs.getValue("mark");
+ double mark = -1D;
+ if (markStr != null) {
+ mark = NumberParser.parseDouble(markStr);
+ currentAF.gcTimeMark = mark;
+ }
+ String sweepStr = attrs.getValue("sweep");
+ double sweep = -1D;
+ if (sweepStr != null) {
+ mark = NumberParser.parseDouble(sweepStr);
+ currentAF.gcTimeSweep = sweep;
+ }
+ }
+ else if ("tenured".equals(qName)) {
+ currentTenured++;
+ String freeStr = attrs.getValue("freebytes");
+ long free = -1;
+ if (freeStr != null) {
+ free = Long.parseLong(freeStr);
+ }
+ String totalStr = attrs.getValue("totalbytes");
+ long total = -1;
+ if (totalStr != null) {
+ total = Long.parseLong(totalStr);
+ }
+
+ // For now only care about Total - don't break into SOA and
+ // LOA
+ if (currentTenured == 1) {
+ currentAF.initialFreeBytes = free;
+ currentAF.initialTotalBytes = total;
+ }
+ else if (currentTenured == 2) {
+ // ignore
+ }
+ else if (currentTenured == 3) {
+ currentAF.afterFreeBytes = free;
+ currentAF.afterTotalBytes = total;
+ }
+ else {
+ LOG.warning("currentTenured is > 3!");
+ }
+ }
+ else if ("soa".equals(qName)) {
+ String freeStr = attrs.getValue("freebytes");
+ long free = -1;
+ if (freeStr != null) {
+ free = Long.parseLong(freeStr);
+ }
+ String totalStr = attrs.getValue("totalbytes");
+ long total = -1;
+ if (totalStr != null) {
+ total = Long.parseLong(totalStr);
+ }
+
+ if (currentTenured == 1) {
+ currentAF.initialSOAFreeBytes = free;
+ currentAF.initialSOATotalBytes = total;
+ }
+ else if (currentTenured == 2) {
+ // ignore
+ }
+ else if (currentTenured == 3) {
+ currentAF.afterSOAFreeBytes = free;
+ currentAF.afterSOATotalBytes = total;
+ }
+ else {
+ LOG.warning("currentTenured is > 3!");
+ }
+ }
+ else if ("loa".equals(qName)) {
+ String freeStr = attrs.getValue("freebytes");
+ long free = -1;
+ if (freeStr != null) {
+ free = Long.parseLong(freeStr);
+ }
+ String totalStr = attrs.getValue("totalbytes");
+ long total = -1;
+ if (totalStr != null) {
+ total = Long.parseLong(totalStr);
+ }
+
+ if (currentTenured == 1) {
+ currentAF.initialLOAFreeBytes = free;
+ currentAF.initialLOATotalBytes = total;
+ }
+ else if (currentTenured == 2) {
+ // ignore
+ }
+ else if (currentTenured == 3) {
+ currentAF.afterLOAFreeBytes = free;
+ currentAF.afterLOATotalBytes = total;
+ }
+ else {
+ LOG.warning("currentTenured is > 3!");
+ }
+ }
+ }
+
+ }
+ catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void endElement(String namespaceURI, String simpleName,
+ String qualifiedName) throws SAXException {
+
+ if ("af".equals(qualifiedName)) {
+ System.out.println("In AF endElement!");
+ if (currentAF != null) {
+ GCEvent event = new GCEvent();
+ if (!"tenured".equals(currentAF.type)) {
+ LOG.warning("Unhandled AF type: " + currentAF.type);
+ }
+ if (!"global".equals(currentAF.gcType)) {
+ LOG.warning("Different GC type: " + currentAF.gcType);
+ }
+ else {
+ event.setType(AbstractGCEvent.Type.FULL_GC);
+ }
+ if (currentAF.initialTotalBytes != -1
+ && currentAF.initialFreeBytes != -1) {
+ event.setPreUsed(currentAF.getPreUsedInKb());
+ }
+
+ if (currentAF.afterTotalBytes != -1
+ && currentAF.afterFreeBytes != -1) {
+ event.setPostUsed(currentAF.getPostUsedInKb());
+ }
+
+ if (currentAF.afterTotalBytes != -1) {
+ event.setTotal(currentAF.getTotalInKb());
+ }
+
+ // event.setTimestamp(currentAF.timestamp.getTime());
+ event.setTimestamp(currentAF.elapsedTime);
+
+ if (currentAF.totalTime >= 0) {
+ event.setPause(currentAF.totalTime);
+ }
+
+ if (currentAF.afterSOATotalBytes != -1
+ && currentAF.afterSOAFreeBytes != -1
+ && currentAF.initialSOAFreeBytes != -1
+ && currentAF.initialSOATotalBytes != -1) {
+
+ final GCEvent detailEvent = new GCEvent();
+ detailEvent.setTimestamp(currentAF.elapsedTime);
+ detailEvent.setType(AbstractGCEvent.Type.PS_YOUNG_GEN);
+ detailEvent.setTenuredDetail(true);
+ detailEvent.setPreUsed(currentAF.getPreUsedSoaInKb());
+ detailEvent.setPostUsed(currentAF.getPostUsedSoaInKb());
+ detailEvent.setTotal(currentAF.getTotalSoaInKb());
+ event.add(detailEvent);
+ }
+
+ if (currentAF.afterLOATotalBytes != -1
+ && currentAF.afterLOAFreeBytes != -1
+ && currentAF.initialLOAFreeBytes != -1
+ && currentAF.initialLOATotalBytes != -1) {
+
+ final GCEvent detailEvent = new GCEvent();
+ detailEvent.setTimestamp(currentAF.elapsedTime);
+ detailEvent.setType(AbstractGCEvent.Type.PS_OLD_GEN);
+ detailEvent.setTenuredDetail(true);
+ detailEvent.setPreUsed(currentAF.getPreUsedLoaInKb());
+ detailEvent.setPostUsed(currentAF.getPostUsedLoaInKb());
+ detailEvent.setTotal(currentAF.getTotalLoaInKb());
+ event.add(detailEvent);
+ }
+
+ model.add(event);
+ currentTenured = 0;
+ currentAF = null;
+ }
+ else {
+ LOG.warning("Found end tag with no begin tag");
+ }
+
+ }
+ }
+
+}
+
+/**
+ * Holder of GC information for standard Allocation Failures
+ */
+class AF {
+ String type;
+ String id;
+ Date timestamp;
+ long elapsedTime;
+ double intervalms = -1;
+ long minRequestedBytes = -1;
+ double timeExclusiveAccessMs = -1;
+ long initialFreeBytes = -1;
+ long initialTotalBytes = -1;
+ long initialSOAFreeBytes = -1;
+ long initialSOATotalBytes = -1;
+ long initialLOAFreeBytes = -1;
+ long initialLOATotalBytes = -1;
+ long afterFreeBytes = -1;
+ long afterTotalBytes = -1;
+ long afterSOAFreeBytes = -1;
+ long afterSOATotalBytes = -1;
+ long afterLOAFreeBytes = -1;
+ long afterLOATotalBytes = -1;
+ String gcType;
+ double gcIntervalms = -1;
+ int gcSoftRefsCleared = -1;
+ int gcWeakRefsCleared = -1;
+ int gcPhantomRefsCleared = -1;
+ double gcTimeMark = -1;
+ double gcTimeSweep = -1;
+ double gcTimeCompact = -1;
+ double gcTime = -1;
+ double totalTime = -1;
+
+ public int getPreUsedInKb() {
+ return (int) ((initialTotalBytes - initialFreeBytes) / 1024);
+ }
+
+ public int getPostUsedInKb() {
+ return (int) ((afterTotalBytes - afterFreeBytes) / 1024);
+ }
+
+ public int getTotalInKb() {
+ return (int) (afterTotalBytes / 1024);
+ }
+
+ public int getPreUsedSoaInKb() {
+ return (int) ((initialSOATotalBytes - initialSOAFreeBytes) / 1024);
+ }
+
+ public int getPostUsedSoaInKb() {
+ return (int) ((afterSOATotalBytes - afterSOAFreeBytes) / 1024);
+ }
+
+ public int getTotalSoaInKb() {
+ return (int) (afterSOATotalBytes / 1024);
+ }
+
+ public int getPreUsedLoaInKb() {
+ return (int) ((initialLOATotalBytes - initialLOAFreeBytes) / 1024);
+ }
+
+ public int getPostUsedLoaInKb() {
+ return (int) ((afterLOATotalBytes - afterLOAFreeBytes) / 1024);
+ }
+
+ public int getTotalLoaInKb() {
+ return (int) (afterLOATotalBytes / 1024);
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/ParseException.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/ParseException.java
index 397523f2..cba54793 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/ParseException.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/ParseException.java
@@ -1,43 +1,43 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.io.IOException;
-
-import com.tagtraum.perf.gcviewer.util.ParseInformation;
-
-/**
- * Is thrown whenever a ParseError occurs.
- *
- * Date: Jan 30, 2002
- * Time: 6:19:45 PM
- * @author Hendrik Schreiber
- */
-public class ParseException extends IOException {
- private String line;
- private ParseInformation parsePosition;
-
- public ParseException(String s) {
- this(s, null);
- }
-
- public ParseException(String s, String line) {
- super(s);
- this.line = line;
- }
-
- public ParseException(String s, String line, ParseInformation pos) {
- super(s);
- this.line = line;
- this.parsePosition = pos;
- }
-
- @Override
- public String getMessage() {
- if (line == null) {
- return super.getMessage();
- }
- return super.getMessage() + (parsePosition != null
- ? (" Line " + parsePosition.getLineNumber() + ": " + line)
- : (" Line: " + line));
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.io.IOException;
+
+import com.tagtraum.perf.gcviewer.util.ParseInformation;
+
+/**
+ * Is thrown whenever a ParseError occurs.
+ *
+ * Date: Jan 30, 2002
+ * Time: 6:19:45 PM
+ * @author Hendrik Schreiber
+ */
+public class ParseException extends IOException {
+ private String line;
+ private ParseInformation parsePosition;
+
+ public ParseException(String s) {
+ this(s, null);
+ }
+
+ public ParseException(String s, String line) {
+ super(s);
+ this.line = line;
+ }
+
+ public ParseException(String s, String line, ParseInformation pos) {
+ super(s);
+ this.line = line;
+ this.parsePosition = pos;
+ }
+
+ @Override
+ public String getMessage() {
+ if (line == null) {
+ return super.getMessage();
+ }
+ return super.getMessage() + (parsePosition != null
+ ? (" Line " + parsePosition.getLineNumber() + ": " + line)
+ : (" Line: " + line));
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/imp/UnknownGcTypeException.java b/src/main/java/com/tagtraum/perf/gcviewer/imp/UnknownGcTypeException.java
index f50741e3..4b50661c 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/imp/UnknownGcTypeException.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/imp/UnknownGcTypeException.java
@@ -1,26 +1,26 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import com.tagtraum.perf.gcviewer.util.ParseInformation;
-
-/**
- * GC Types are the text introducing specific information for (part of) a GC (e.g. "Full GC")
- *
- * @author Joerg Wuethrich
- * created on: 23.10.2011
- */
-public class UnknownGcTypeException extends ParseException {
-
- public UnknownGcTypeException(String gcType, String line, ParseInformation pos) {
- super("Unknown gc type: '" + gcType + "'", line, pos);
- }
-
- public UnknownGcTypeException(String gcType) {
- this(gcType, null);
- }
-
- public UnknownGcTypeException(String gcType, String line) {
- this(gcType, line, null);
- }
-
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import com.tagtraum.perf.gcviewer.util.ParseInformation;
+
+/**
+ * GC Types are the text introducing specific information for (part of) a GC (e.g. "Full GC")
+ *
+ * @author Joerg Wuethrich
+ * created on: 23.10.2011
+ */
+public class UnknownGcTypeException extends ParseException {
+
+ public UnknownGcTypeException(String gcType, String line, ParseInformation pos) {
+ super("Unknown gc type: '" + gcType + "'", line, pos);
+ }
+
+ public UnknownGcTypeException(String gcType) {
+ this(gcType, null);
+ }
+
+ public UnknownGcTypeException(String gcType, String line) {
+ this(gcType, line, null);
+ }
+
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaFormatter.java b/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaFormatter.java
index e33d06e3..7d479270 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaFormatter.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaFormatter.java
@@ -1,42 +1,42 @@
-package com.tagtraum.perf.gcviewer.log;
-
-import java.util.logging.Formatter;
-import java.util.logging.LogRecord;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.PrintWriter;
-
-/**
- * TextAreaFormatter.
- *
- * Date: Oct 3, 2005
- * Time: 4:50:41 PM
- *
- * @author Hendrik Schreiber
- */
-public class TextAreaFormatter extends Formatter {
- private static final String LINE_SEPARATOR = System.getProperty("line.separator");
-
- public String format(LogRecord record) {
- StringBuffer sb = new StringBuffer();
- sb.append(record.getLevel().getLocalizedName());
- sb.append(" [");
- final String logger = record.getLoggerName();
- sb.append(logger.substring(logger.lastIndexOf('.') + 1));
- sb.append("]: ");
- sb.append(record.getMessage());
- sb.append(LINE_SEPARATOR);
- if (record.getThrown() != null) {
- try (StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw)) {
-
- record.getThrown().printStackTrace(pw);
- sb.append(sw.toString());
- }
- catch (IOException e) {
- // ignore
- }
- }
- return sb.toString();
- }
-}
+package com.tagtraum.perf.gcviewer.log;
+
+import java.util.logging.Formatter;
+import java.util.logging.LogRecord;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+
+/**
+ * TextAreaFormatter.
+ *
+ * Date: Oct 3, 2005
+ * Time: 4:50:41 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class TextAreaFormatter extends Formatter {
+ private static final String LINE_SEPARATOR = System.getProperty("line.separator");
+
+ public String format(LogRecord record) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(record.getLevel().getLocalizedName());
+ sb.append(" [");
+ final String logger = record.getLoggerName();
+ sb.append(logger.substring(logger.lastIndexOf('.') + 1));
+ sb.append("]: ");
+ sb.append(record.getMessage());
+ sb.append(LINE_SEPARATOR);
+ if (record.getThrown() != null) {
+ try (StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw)) {
+
+ record.getThrown().printStackTrace(pw);
+ sb.append(sw.toString());
+ }
+ catch (IOException e) {
+ // ignore
+ }
+ }
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaLogHandler.java b/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaLogHandler.java
index b84ebdc5..6aafd13b 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaLogHandler.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/log/TextAreaLogHandler.java
@@ -1,69 +1,69 @@
-package com.tagtraum.perf.gcviewer.log;
-
-import javax.swing.*;
-import java.util.logging.*;
-
-/**
- * TextAreaLogHandler.
- *
- * Date: Sep 29, 2005
- * Time: 9:20:36 PM
- *
- * @author Hendrik Schreiber
- */
-public class TextAreaLogHandler extends Handler {
-
- private JTextArea textArea;
- private boolean errors;
- private int errorCount;
-
- public TextAreaLogHandler() {
- this.textArea = new JTextArea();
- setFormatter(new TextAreaFormatter());
- }
-
- public JTextArea getTextArea() {
- return textArea;
- }
-
- public boolean hasErrors() {
- return errors;
- }
-
- public int getErrorCount() {
- return errorCount;
- }
-
- public void publish(LogRecord record) {
- try {
- if (isLoggable(record)) {
- final int level = record.getLevel().intValue();
- if (level >=Level.WARNING.intValue() && level < Level.OFF.intValue()) {
- ++errorCount;
- }
- if (!errors) {
- errors = level >= Level.WARNING.intValue() && level < Level.OFF.intValue();
- }
- String formattedRecord = null;
- try {
- formattedRecord = getFormatter().format(record);
- } catch (Exception e) {
- reportError(e.toString(), e, ErrorManager.FORMAT_FAILURE);
- }
- try {
- textArea.append(formattedRecord);
- } catch (Exception e) {
- reportError(e.toString(), e, ErrorManager.WRITE_FAILURE);
- }
- }
- } catch (Exception e) {
- reportError(e.toString(), e, ErrorManager.GENERIC_FAILURE);
- }
- }
-
- public void flush() {
- }
-
- public void close() throws SecurityException {
- }
-}
+package com.tagtraum.perf.gcviewer.log;
+
+import javax.swing.*;
+import java.util.logging.*;
+
+/**
+ * TextAreaLogHandler.
+ *
+ * Date: Sep 29, 2005
+ * Time: 9:20:36 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class TextAreaLogHandler extends Handler {
+
+ private JTextArea textArea;
+ private boolean errors;
+ private int errorCount;
+
+ public TextAreaLogHandler() {
+ this.textArea = new JTextArea();
+ setFormatter(new TextAreaFormatter());
+ }
+
+ public JTextArea getTextArea() {
+ return textArea;
+ }
+
+ public boolean hasErrors() {
+ return errors;
+ }
+
+ public int getErrorCount() {
+ return errorCount;
+ }
+
+ public void publish(LogRecord record) {
+ try {
+ if (isLoggable(record)) {
+ final int level = record.getLevel().intValue();
+ if (level >=Level.WARNING.intValue() && level < Level.OFF.intValue()) {
+ ++errorCount;
+ }
+ if (!errors) {
+ errors = level >= Level.WARNING.intValue() && level < Level.OFF.intValue();
+ }
+ String formattedRecord = null;
+ try {
+ formattedRecord = getFormatter().format(record);
+ } catch (Exception e) {
+ reportError(e.toString(), e, ErrorManager.FORMAT_FAILURE);
+ }
+ try {
+ textArea.append(formattedRecord);
+ } catch (Exception e) {
+ reportError(e.toString(), e, ErrorManager.WRITE_FAILURE);
+ }
+ }
+ } catch (Exception e) {
+ reportError(e.toString(), e, ErrorManager.GENERIC_FAILURE);
+ }
+ }
+
+ public void flush() {
+ }
+
+ public void close() throws SecurityException {
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/math/DoubleData.java b/src/main/java/com/tagtraum/perf/gcviewer/math/DoubleData.java
index 279ca5d1..88ed058d 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/math/DoubleData.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/math/DoubleData.java
@@ -1,88 +1,88 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import java.io.Serializable;
-
-/**
- *
- * @author Hendrik Schreiber
- * Date: May 20, 2005
- * Time: 5:08:33 PM
- *
- */
-public class DoubleData implements Serializable {
-
- private int n;
- private double sum;
- private double sumSquares;
- private double min = Double.MAX_VALUE;
- private double max = Double.MIN_VALUE;
-
- public void add(double x) {
- sum += x;
- sumSquares += x*x;
- n++;
- min = Math.min(min, x);
- max = Math.max(max, x);
- }
-
- public void add(double x, int weight) {
- sum += x * weight;
- n += weight;
- sumSquares += x*x*weight;
- min = Math.min(min, x);
- max = Math.max(max, x);
- }
-
- public int getN() {
- return n;
- }
-
- public double getSum() {
- return sum;
- }
-
- public double getMin() {
- return min;
- }
-
- public double getMax() {
- return max;
- }
-
- public double average() {
- if (n == 0) throw new IllegalStateException("n == 0");
- return sum / n;
- }
-
- public double standardDeviation() {
- if (n == 0) throw new IllegalStateException("n == 0");
- if (n==1) return 0;
- return Math.sqrt(variance());
- }
-
- public double variance() {
- if (n == 0) throw new IllegalStateException("n == 0");
- if (n==1) return 0;
- return (sumSquares - sum*sum/n)/(n-1);
- }
-
- public void reset() {
- sum = 0;
- sumSquares = 0;
- n = 0;
- }
-
- public static double average(double[] n) {
- return Sum.sum(n) / n.length;
- }
-
- public static double weightedAverage(double[] n, int[] weight) {
- double sum = 0;
- int m = 0;
- for (int i=0; iHendrik Schreiber
+ * Date: May 20, 2005
+ * Time: 5:08:33 PM
+ *
+ */
+public class DoubleData implements Serializable {
+
+ private int n;
+ private double sum;
+ private double sumSquares;
+ private double min = Double.MAX_VALUE;
+ private double max = Double.MIN_VALUE;
+
+ public void add(double x) {
+ sum += x;
+ sumSquares += x*x;
+ n++;
+ min = Math.min(min, x);
+ max = Math.max(max, x);
+ }
+
+ public void add(double x, int weight) {
+ sum += x * weight;
+ n += weight;
+ sumSquares += x*x*weight;
+ min = Math.min(min, x);
+ max = Math.max(max, x);
+ }
+
+ public int getN() {
+ return n;
+ }
+
+ public double getSum() {
+ return sum;
+ }
+
+ public double getMin() {
+ return min;
+ }
+
+ public double getMax() {
+ return max;
+ }
+
+ public double average() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ return sum / n;
+ }
+
+ public double standardDeviation() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ if (n==1) return 0;
+ return Math.sqrt(variance());
+ }
+
+ public double variance() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ if (n==1) return 0;
+ return (sumSquares - sum*sum/n)/(n-1);
+ }
+
+ public void reset() {
+ sum = 0;
+ sumSquares = 0;
+ n = 0;
+ }
+
+ public static double average(double[] n) {
+ return Sum.sum(n) / n.length;
+ }
+
+ public static double weightedAverage(double[] n, int[] weight) {
+ double sum = 0;
+ int m = 0;
+ for (int i=0; iHendrik Schreiber
- * Date: May 20, 2005
- * Time: 5:08:33 PM
- *
- */
-public class IntData implements Serializable {
-
- private int n;
- private long sum;
- private long sumSquares;
- private int min = Integer.MAX_VALUE;
- private int max = Integer.MIN_VALUE;
-
- public void add(int x) {
- sum += x;
- sumSquares += ((long)x)*((long)x);
- n++;
- min = Math.min(min, x);
- max = Math.max(max, x);
- }
-
- public void add(int x, int weight) {
- sum += x * weight;
- n += weight;
- sumSquares += ((long)x)*((long)x)*(weight);
- min = Math.min(min, x);
- max = Math.max(max, x);
- }
-
- public int getN() {
- return n;
- }
-
- public long getSum() {
- return sum;
- }
-
- public int getMin() {
- return min;
- }
-
- public int getMax() {
- return max;
- }
-
- public double average() {
- if (n == 0) throw new IllegalStateException("n == 0");
- return ((double)sum) / ((double)n);
- }
-
- public double standardDeviation() {
- if (n == 0) throw new IllegalStateException("n == 0");
- if (n==1) return 0;
- return Math.sqrt(variance());
- }
-
- public double variance() {
- if (n == 0) throw new IllegalStateException("n == 0");
- if (n==1) return 0;
- final double dsum = sum;
- final double dn = n;
- return (sumSquares - dsum*dsum/dn)/(dn-1);
- }
-
- public void reset() {
- sum = 0;
- sumSquares = 0;
- n = 0;
- }
-
- public static long weightedAverage(long[] n, int[] weight) {
- long sum = 0;
- int m = 0;
- for (int i=0; iHendrik Schreiber
+ * Date: May 20, 2005
+ * Time: 5:08:33 PM
+ *
+ */
+public class IntData implements Serializable {
+
+ private int n;
+ private long sum;
+ private long sumSquares;
+ private int min = Integer.MAX_VALUE;
+ private int max = Integer.MIN_VALUE;
+
+ public void add(int x) {
+ sum += x;
+ sumSquares += ((long)x)*((long)x);
+ n++;
+ min = Math.min(min, x);
+ max = Math.max(max, x);
+ }
+
+ public void add(int x, int weight) {
+ sum += x * weight;
+ n += weight;
+ sumSquares += ((long)x)*((long)x)*(weight);
+ min = Math.min(min, x);
+ max = Math.max(max, x);
+ }
+
+ public int getN() {
+ return n;
+ }
+
+ public long getSum() {
+ return sum;
+ }
+
+ public int getMin() {
+ return min;
+ }
+
+ public int getMax() {
+ return max;
+ }
+
+ public double average() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ return ((double)sum) / ((double)n);
+ }
+
+ public double standardDeviation() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ if (n==1) return 0;
+ return Math.sqrt(variance());
+ }
+
+ public double variance() {
+ if (n == 0) throw new IllegalStateException("n == 0");
+ if (n==1) return 0;
+ final double dsum = sum;
+ final double dn = n;
+ return (sumSquares - dsum*dsum/dn)/(dn-1);
+ }
+
+ public void reset() {
+ sum = 0;
+ sumSquares = 0;
+ n = 0;
+ }
+
+ public static long weightedAverage(long[] n, int[] weight) {
+ long sum = 0;
+ int m = 0;
+ for (int i=0; iHendrik Schreiber
- * Date: May 20, 2005
- * Time: 4:04:43 PM
- *
- */
-public class RegressionLine implements Serializable {
-
- private double sumX;
- private double sumY;
- private double sumXSquare;
- private double sumXY;
- private int n;
-
- public void addPoint(double x, double y) {
- sumX += x;
- sumY += y;
- sumXSquare += x*x;
- sumXY += x*y;
- n++;
- }
-
- public int getPointCount() {
- return n;
- }
-
- public boolean isLine() {
- return n>1;
- }
-
- public boolean hasPoints() {
- return n != 0;
- }
-
- public double slope() {
- return slope(n, sumX, sumY, sumXY, sumXSquare);
- }
-
- public void reset() {
- sumX = 0;
- sumY = 0;
- sumXSquare = 0;
- sumXY = 0;
- n = 0;
- }
-
- public static double slope(double[] x, double[] y) {
- double n = x.length;
- double sumX = Sum.sum(x);
- double sumY = Sum.sum(y);
- double sumXY = Sum.sumOfProducts(x, y);
- double sumXSquare = Sum.sumOfSquares(x);
- return slope(n, sumX, sumY, sumXY, sumXSquare);
- }
-
- private static double slope(double n, double sumX, double sumY, double sumXY, double sumXSquare) {
- return (n * sumXY - sumX * sumY) / (n * sumXSquare - sumX * sumX);
- }
-
-}
+package com.tagtraum.perf.gcviewer.math;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @author Hendrik Schreiber
+ * Date: May 20, 2005
+ * Time: 4:04:43 PM
+ *
+ */
+public class RegressionLine implements Serializable {
+
+ private double sumX;
+ private double sumY;
+ private double sumXSquare;
+ private double sumXY;
+ private int n;
+
+ public void addPoint(double x, double y) {
+ sumX += x;
+ sumY += y;
+ sumXSquare += x*x;
+ sumXY += x*y;
+ n++;
+ }
+
+ public int getPointCount() {
+ return n;
+ }
+
+ public boolean isLine() {
+ return n>1;
+ }
+
+ public boolean hasPoints() {
+ return n != 0;
+ }
+
+ public double slope() {
+ return slope(n, sumX, sumY, sumXY, sumXSquare);
+ }
+
+ public void reset() {
+ sumX = 0;
+ sumY = 0;
+ sumXSquare = 0;
+ sumXY = 0;
+ n = 0;
+ }
+
+ public static double slope(double[] x, double[] y) {
+ double n = x.length;
+ double sumX = Sum.sum(x);
+ double sumY = Sum.sum(y);
+ double sumXY = Sum.sumOfProducts(x, y);
+ double sumXSquare = Sum.sumOfSquares(x);
+ return slope(n, sumX, sumY, sumXY, sumXSquare);
+ }
+
+ private static double slope(double n, double sumX, double sumY, double sumXY, double sumXSquare) {
+ return (n * sumXY - sumX * sumY) / (n * sumXSquare - sumX * sumX);
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/math/Sum.java b/src/main/java/com/tagtraum/perf/gcviewer/math/Sum.java
index 5404cd1c..4bc6741b 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/math/Sum.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/math/Sum.java
@@ -1,39 +1,39 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import java.io.Serializable;
-
-/**
- *
- * @author Hendrik Schreiber
- * Date: May 20, 2005
- * Time: 5:06:34 PM
- *
- */
-public class Sum implements Serializable {
- private Sum(){}
-
-
- public static double sum(double[] n) {
- double sum = 0;
- for (int i=0; iHendrik Schreiber
+ * Date: May 20, 2005
+ * Time: 5:06:34 PM
+ *
+ */
+public class Sum implements Serializable {
+ private Sum(){}
+
+
+ public static double sum(double[] n) {
+ double sum = 0;
+ for (int i=0; iHendrik Schreiber
- * Date: Jun 1, 2005
- * Time: 11:55:26 AM
- *
- */
-public class ConcurrentGCEvent extends AbstractGCEvent {
-
- private double duration;
-
- /**
- * Time this step in the concurrent GC mechanism took.
- *
[CMS-concurrent-sweep: 0.005/0.015 secs]
- *
- * So in this example the time that was exclusively spent on
- * the step would be 0.005secs of an overall duration of 0.015secs.
- *
- * So {@link #getPause()} returns the time that was exclusively spent.
- *
- * @return time a certain concurrent GC step took.
- */
- public double getDuration() {
- return duration;
- }
-
- /**
- * @see #getDuration()
- * @param duration
- */
- public void setDuration(double duration) {
- this.duration = duration;
- }
-
- public boolean hasDuration() {
- return !getExtendedType().getName().endsWith("-start");
- }
-
- public void toStringBuffer(StringBuffer sb) {
- sb.append(getTimestamp());
- sb.append(": [");
- sb.append(getExtendedType().getName());
- if (hasDuration()) {
- sb.append(' ');
- sb.append(getPause());
- sb.append('/');
- sb.append(duration);
- sb.append(" secs");
- }
- sb.append(']');
- }
-}
+package com.tagtraum.perf.gcviewer.model;
+
+/**
+ *
+ * @author Hendrik Schreiber
+ * Date: Jun 1, 2005
+ * Time: 11:55:26 AM
+ *
+ */
+public class ConcurrentGCEvent extends AbstractGCEvent {
+
+ private double duration;
+
+ /**
+ * Time this step in the concurrent GC mechanism took.
+ *
[CMS-concurrent-sweep: 0.005/0.015 secs]
+ *
+ * So in this example the time that was exclusively spent on
+ * the step would be 0.005secs of an overall duration of 0.015secs.
+ *
+ * So {@link #getPause()} returns the time that was exclusively spent.
+ *
+ * @return time a certain concurrent GC step took.
+ */
+ public double getDuration() {
+ return duration;
+ }
+
+ /**
+ * @see #getDuration()
+ * @param duration
+ */
+ public void setDuration(double duration) {
+ this.duration = duration;
+ }
+
+ public boolean hasDuration() {
+ return !getExtendedType().getName().endsWith("-start");
+ }
+
+ public void toStringBuffer(StringBuffer sb) {
+ sb.append(getTimestamp());
+ sb.append(": [");
+ sb.append(getExtendedType().getName());
+ if (hasDuration()) {
+ sb.append(' ');
+ sb.append(getPause());
+ sb.append('/');
+ sb.append(duration);
+ sb.append(" secs");
+ }
+ sb.append(']');
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/model/G1GcEvent.java b/src/main/java/com/tagtraum/perf/gcviewer/model/G1GcEvent.java
index 7bbfe488..4895ca38 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/model/G1GcEvent.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/model/G1GcEvent.java
@@ -1,23 +1,23 @@
-package com.tagtraum.perf.gcviewer.model;
-
-/**
- * G1GcEvent may contain lots of detail information which provide information about the
- * different steps of the garbage collection. It is not just information about different
- * generations as with e.g. CMS collector.
- *
- * @author Joerg Wuethrich
- *
created on: 26.10.2011
- */
-public class G1GcEvent extends GCEvent {
-
- @Override
- public String getTypeAsString() {
- return getExtendedType().getName();
- }
-
- @Override
- public void toStringBuffer(StringBuffer sb) {
- super.toStringBuffer(sb);
- }
-
-}
+package com.tagtraum.perf.gcviewer.model;
+
+/**
+ * G1GcEvent may contain lots of detail information which provide information about the
+ * different steps of the garbage collection. It is not just information about different
+ * generations as with e.g. CMS collector.
+ *
+ * @author Joerg Wuethrich
+ * created on: 26.10.2011
+ */
+public class G1GcEvent extends GCEvent {
+
+ @Override
+ public String getTypeAsString() {
+ return getExtendedType().getName();
+ }
+
+ @Override
+ public void toStringBuffer(StringBuffer sb) {
+ super.toStringBuffer(sb);
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/model/GCEvent.java b/src/main/java/com/tagtraum/perf/gcviewer/model/GCEvent.java
index 82726333..b42cbd05 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/model/GCEvent.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/model/GCEvent.java
@@ -1,164 +1,164 @@
-package com.tagtraum.perf.gcviewer.model;
-
-/**
- * The GCEvent is the type of event that contains memory (preused, postused, total) and
- * pause information.
- *
- * Date: Jan 30, 2002
- * Time: 5:05:43 PM
- * @author Hendrik Schreiber
- * @author Joerg Wuethrich
- */
-public class GCEvent extends AbstractGCEvent {
-
- /** Used before GC in KB */
- private int preUsed;
-
- /** Used after GC in KB */
- private int postUsed;
-
- /** Capacity in KB */
- private int total;
-
- /** store references to related/inferred events */
- private GCEvent young;
- private GCEvent tenured;
- private GCEvent perm;
-
- public GCEvent() {
- }
-
- public GCEvent(double timestamp, int preUsed, int postUsed, int total, double pause, Type type) {
- this.setTimestamp(timestamp);
- this.preUsed = preUsed;
- this.postUsed = postUsed;
- this.total = total;
- this.setPause(pause);
- this.setType(type);
- }
-
- @Override
- public void add(GCEvent event) {
- super.add(event);
-
- switch (event.getExtendedType().getGeneration()) {
- case YOUNG:
- young = event;
- break;
- case TENURED:
- tenured = event;
- break;
- case PERM:
- perm = event;
- break;
- // ALL and OTHER are never read
- case ALL:
- break;
- case OTHER:
- break;
- }
- }
-
- /**
- * Returns information on young generation. If it was not present in the gc log, but
- * tenured was, it is inferred from there (with -XX:+PrintGCDetails). Otherwise it is
- * null
(without -XX:+PrintGCDetails).
- *
- * @return Information on young generation if possible, null
otherwise.
- */
- public GCEvent getYoung() {
- if (young == null) {
- if (tenured != null) {
- young = new GCEvent();
- young.setTimestamp(tenured.getTimestamp());
- young.setPreUsed(preUsed - tenured.getPreUsed());
- young.setPostUsed(postUsed - tenured.getPostUsed());
- young.setTotal(total - tenured.getTotal());
- young.setPause(tenured.getPause());
- }
- }
-
- return young;
- }
-
- /**
- * Returns information on young generation. If it was not present in the gc log, but
- * tenured was, it is inferred from there (with -XX:+PrintGCDetails). Otherwise it
- * is null
(without -XX:+PrintGCDetails).
- *
- * @return Information on young generation if possible, null
otherwise.
- */
- public GCEvent getTenured() {
- if (tenured == null) {
- if (young != null) {
- tenured = new GCEvent();
- tenured.setTimestamp(young.getTimestamp());
- tenured.setPreUsed(preUsed - young.getPreUsed());
- tenured.setPostUsed(postUsed - young.getPostUsed());
- tenured.setTotal(total - young.getTotal());
- tenured.setPause(young.getPause());
- }
- }
-
- return tenured;
- }
-
- /**
- * Returns information on perm generation. If it was not present in the gc log,
- * null
will be returned, because the values cannot be inferred.
- *
- * @return Information on perm generation or null
if not present.
- */
- public GCEvent getPerm() {
- return perm;
- }
-
- public void setPreUsed(int preUsed) {
- this.preUsed = preUsed;
- }
-
- public void setPostUsed(int postUsed) {
- this.postUsed = postUsed;
- }
-
- public void setTotal(int total) {
- this.total = total;
- }
-
- public int getPreUsed() {
- return preUsed;
- }
-
- public int getPostUsed() {
- return postUsed;
- }
-
- public int getTotal() {
- return total;
- }
-
- public void toStringBuffer(StringBuffer sb) {
- sb.append(getTimestamp());
- sb.append(": [");
- sb.append(getExtendedType().getName());
- if (details != null) {
- sb.append(' ');
- for (GCEvent event : details) {
- event.toStringBuffer(sb);
- }
- sb.append(' ');
- }
- else {
- sb.append(": ");
- }
- sb.append(preUsed);
- sb.append("K->");
- sb.append(postUsed);
- sb.append("K(");
- sb.append(total);
- sb.append("K), ");
- sb.append(getPause());
- sb.append(" secs]");
- }
-
-}
+package com.tagtraum.perf.gcviewer.model;
+
+/**
+ * The GCEvent is the type of event that contains memory (preused, postused, total) and
+ * pause information.
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:05:43 PM
+ * @author Hendrik Schreiber
+ * @author Joerg Wuethrich
+ */
+public class GCEvent extends AbstractGCEvent {
+
+ /** Used before GC in KB */
+ private int preUsed;
+
+ /** Used after GC in KB */
+ private int postUsed;
+
+ /** Capacity in KB */
+ private int total;
+
+ /** store references to related/inferred events */
+ private GCEvent young;
+ private GCEvent tenured;
+ private GCEvent perm;
+
+ public GCEvent() {
+ }
+
+ public GCEvent(double timestamp, int preUsed, int postUsed, int total, double pause, Type type) {
+ this.setTimestamp(timestamp);
+ this.preUsed = preUsed;
+ this.postUsed = postUsed;
+ this.total = total;
+ this.setPause(pause);
+ this.setType(type);
+ }
+
+ @Override
+ public void add(GCEvent event) {
+ super.add(event);
+
+ switch (event.getExtendedType().getGeneration()) {
+ case YOUNG:
+ young = event;
+ break;
+ case TENURED:
+ tenured = event;
+ break;
+ case PERM:
+ perm = event;
+ break;
+ // ALL and OTHER are never read
+ case ALL:
+ break;
+ case OTHER:
+ break;
+ }
+ }
+
+ /**
+ * Returns information on young generation. If it was not present in the gc log, but
+ * tenured was, it is inferred from there (with -XX:+PrintGCDetails). Otherwise it is
+ * null
(without -XX:+PrintGCDetails).
+ *
+ * @return Information on young generation if possible, null
otherwise.
+ */
+ public GCEvent getYoung() {
+ if (young == null) {
+ if (tenured != null) {
+ young = new GCEvent();
+ young.setTimestamp(tenured.getTimestamp());
+ young.setPreUsed(preUsed - tenured.getPreUsed());
+ young.setPostUsed(postUsed - tenured.getPostUsed());
+ young.setTotal(total - tenured.getTotal());
+ young.setPause(tenured.getPause());
+ }
+ }
+
+ return young;
+ }
+
+ /**
+ * Returns information on young generation. If it was not present in the gc log, but
+ * tenured was, it is inferred from there (with -XX:+PrintGCDetails). Otherwise it
+ * is null
(without -XX:+PrintGCDetails).
+ *
+ * @return Information on young generation if possible, null
otherwise.
+ */
+ public GCEvent getTenured() {
+ if (tenured == null) {
+ if (young != null) {
+ tenured = new GCEvent();
+ tenured.setTimestamp(young.getTimestamp());
+ tenured.setPreUsed(preUsed - young.getPreUsed());
+ tenured.setPostUsed(postUsed - young.getPostUsed());
+ tenured.setTotal(total - young.getTotal());
+ tenured.setPause(young.getPause());
+ }
+ }
+
+ return tenured;
+ }
+
+ /**
+ * Returns information on perm generation. If it was not present in the gc log,
+ * null
will be returned, because the values cannot be inferred.
+ *
+ * @return Information on perm generation or null
if not present.
+ */
+ public GCEvent getPerm() {
+ return perm;
+ }
+
+ public void setPreUsed(int preUsed) {
+ this.preUsed = preUsed;
+ }
+
+ public void setPostUsed(int postUsed) {
+ this.postUsed = postUsed;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public int getPreUsed() {
+ return preUsed;
+ }
+
+ public int getPostUsed() {
+ return postUsed;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void toStringBuffer(StringBuffer sb) {
+ sb.append(getTimestamp());
+ sb.append(": [");
+ sb.append(getExtendedType().getName());
+ if (details != null) {
+ sb.append(' ');
+ for (GCEvent event : details) {
+ event.toStringBuffer(sb);
+ }
+ sb.append(' ');
+ }
+ else {
+ sb.append(": ");
+ }
+ sb.append(preUsed);
+ sb.append("K->");
+ sb.append(postUsed);
+ sb.append("K(");
+ sb.append(total);
+ sb.append("K), ");
+ sb.append(getPause());
+ sb.append(" secs]");
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/model/VmOperationEvent.java b/src/main/java/com/tagtraum/perf/gcviewer/model/VmOperationEvent.java
index bcd403df..a9f21a8e 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/model/VmOperationEvent.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/model/VmOperationEvent.java
@@ -1,24 +1,24 @@
-package com.tagtraum.perf.gcviewer.model;
-
-/**
- * Stop the world events that are not GCEvents, but some other vm operations.
- *
- * @see http://stackoverflow.com/questions/2850514/meaning-of-message-operations-coalesced-during-safepoint
- * @see https://blogs.oracle.com/jonthecollector/entry/the_unspoken_gc_times
- *
- * @author Joerg Wuethrich
- * created on: 27.04.2014
- */
-public class VmOperationEvent extends AbstractGCEvent {
-
- @Override
- public void toStringBuffer(StringBuffer sb) {
- sb.append(getTimestamp());
- sb.append(": [");
- sb.append(getExtendedType().getName());
- sb.append(": ");
- sb.append(getPause());
- sb.append(" secs]");
- }
-
-}
+package com.tagtraum.perf.gcviewer.model;
+
+/**
+ * Stop the world events that are not GCEvents, but some other vm operations.
+ *
+ * @see http://stackoverflow.com/questions/2850514/meaning-of-message-operations-coalesced-during-safepoint
+ * @see https://blogs.oracle.com/jonthecollector/entry/the_unspoken_gc_times
+ *
+ * @author Joerg Wuethrich
+ * created on: 27.04.2014
+ */
+public class VmOperationEvent extends AbstractGCEvent {
+
+ @Override
+ public void toStringBuffer(StringBuffer sb) {
+ sb.append(getTimestamp());
+ sb.append(": [");
+ sb.append(getExtendedType().getName());
+ sb.append(": ");
+ sb.append(getPause());
+ sb.append(" secs]");
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/ConcurrentGcBegionEndRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/ConcurrentGcBegionEndRenderer.java
index 70843c93..a6665132 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/ConcurrentGcBegionEndRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/ConcurrentGcBegionEndRenderer.java
@@ -1,58 +1,58 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Paint;
-import java.awt.RenderingHints;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ChartRenderer;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.ConcurrentGCEvent;
-
-/**
- * ConcurrentGcStardEndRenderer draws lines for every begin and end of a concurrent GC event. Start
- * is cyan, end is pink.
- *
- * @author Joerg Wuethrich
- * created on: 30.10.2011
- */
-public class ConcurrentGcBegionEndRenderer extends ChartRenderer {
- public static final Paint CONCURRENT_COLLECTION_BEGIN = Color.CYAN;
- public static final Paint CONCURRENT_COLLECTION_END = Color.PINK;
-
- public ConcurrentGcBegionEndRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(CONCURRENT_COLLECTION_BEGIN);
- }
-
- public void paintComponent(Graphics2D g2d) {
- // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
- g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
-
- final double scaleFactor = getModelChart().getScaleFactor();
- final int height = getHeight();
- int lastScaledTimestampBegin = Integer.MIN_VALUE;
- int lastScaledTimestampEnd = Integer.MIN_VALUE;
- for (Iterator i = getModelChart().getModel().getConcurrentGCEvents(); i.hasNext();) {
- final ConcurrentGCEvent event = i.next();
- if (event.isConcurrentCollectionStart()) {
- final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
- if (scaledTimestamp != lastScaledTimestampBegin) {
- g2d.setPaint(CONCURRENT_COLLECTION_BEGIN);
- g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
- lastScaledTimestampBegin = scaledTimestamp;
- }
- }
- else if (event.isConcurrentCollectionEnd()) {
- final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
- if (scaledTimestamp != lastScaledTimestampEnd) {
- g2d.setPaint(CONCURRENT_COLLECTION_END);
- g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
- lastScaledTimestampEnd = scaledTimestamp;
- }
- }
- }
- }
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.RenderingHints;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ChartRenderer;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.ConcurrentGCEvent;
+
+/**
+ * ConcurrentGcStardEndRenderer draws lines for every begin and end of a concurrent GC event. Start
+ * is cyan, end is pink.
+ *
+ * @author Joerg Wuethrich
+ * created on: 30.10.2011
+ */
+public class ConcurrentGcBegionEndRenderer extends ChartRenderer {
+ public static final Paint CONCURRENT_COLLECTION_BEGIN = Color.CYAN;
+ public static final Paint CONCURRENT_COLLECTION_END = Color.PINK;
+
+ public ConcurrentGcBegionEndRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(CONCURRENT_COLLECTION_BEGIN);
+ }
+
+ public void paintComponent(Graphics2D g2d) {
+ // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+
+ final double scaleFactor = getModelChart().getScaleFactor();
+ final int height = getHeight();
+ int lastScaledTimestampBegin = Integer.MIN_VALUE;
+ int lastScaledTimestampEnd = Integer.MIN_VALUE;
+ for (Iterator i = getModelChart().getModel().getConcurrentGCEvents(); i.hasNext();) {
+ final ConcurrentGCEvent event = i.next();
+ if (event.isConcurrentCollectionStart()) {
+ final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
+ if (scaledTimestamp != lastScaledTimestampBegin) {
+ g2d.setPaint(CONCURRENT_COLLECTION_BEGIN);
+ g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
+ lastScaledTimestampBegin = scaledTimestamp;
+ }
+ }
+ else if (event.isConcurrentCollectionEnd()) {
+ final int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
+ if (scaledTimestamp != lastScaledTimestampEnd) {
+ g2d.setPaint(CONCURRENT_COLLECTION_END);
+ g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
+ lastScaledTimestampEnd = scaledTimestamp;
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/FullGCLineRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/FullGCLineRenderer.java
index 31f79979..ee8fe937 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/FullGCLineRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/FullGCLineRenderer.java
@@ -1,45 +1,45 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import com.tagtraum.perf.gcviewer.ChartRenderer;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-
-import java.awt.*;
-import java.util.Iterator;
-
-/**
- * FullGCLineRenderer.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class FullGCLineRenderer extends ChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.BLACK;
-
- public FullGCLineRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- }
-
- public void paintComponent(Graphics2D g2d) {
- // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
- g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
- double scaleFactor = getModelChart().getScaleFactor();
- Rectangle clipBounds = g2d.getClipBounds();
- int minX = clipBounds.x;
- int maxX = clipBounds.x+clipBounds.width;
-
- int height = getHeight();
- int lastScaledTimestamp = Integer.MIN_VALUE;
- for (Iterator i = getModelChart().getModel().getFullGCEvents(); i.hasNext();) {
- GCEvent event = i.next();
- int scaledTimestamp = (int)(scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
- if (scaledTimestamp != lastScaledTimestamp && scaledTimestamp >= minX && scaledTimestamp <= maxX) {
- g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
- lastScaledTimestamp = scaledTimestamp;
- }
- }
- }
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import com.tagtraum.perf.gcviewer.ChartRenderer;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+
+import java.awt.*;
+import java.util.Iterator;
+
+/**
+ * FullGCLineRenderer.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class FullGCLineRenderer extends ChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.BLACK;
+
+ public FullGCLineRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ }
+
+ public void paintComponent(Graphics2D g2d) {
+ // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+ double scaleFactor = getModelChart().getScaleFactor();
+ Rectangle clipBounds = g2d.getClipBounds();
+ int minX = clipBounds.x;
+ int maxX = clipBounds.x+clipBounds.width;
+
+ int height = getHeight();
+ int lastScaledTimestamp = Integer.MIN_VALUE;
+ for (Iterator i = getModelChart().getModel().getFullGCEvents(); i.hasNext();) {
+ GCEvent event = i.next();
+ int scaledTimestamp = (int)(scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
+ if (scaledTimestamp != lastScaledTimestamp && scaledTimestamp >= minX && scaledTimestamp <= maxX) {
+ g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
+ lastScaledTimestamp = scaledTimestamp;
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCRectanglesRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCRectanglesRenderer.java
index 47f6da81..c98e7157 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCRectanglesRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCRectanglesRenderer.java
@@ -1,96 +1,96 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.Paint;
-import java.awt.Rectangle;
-import java.awt.RenderingHints;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ChartRenderer;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.VmOperationEvent;
-
-/**
- * Renders all stop the world event pauses as rectangles.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- *
- * @author Hendrik Schreiber
- */
-public class GCRectanglesRenderer extends ChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.GRAY;
- private Paint brighter;
-
- public GCRectanglesRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- }
-
- public void setLinePaint(Paint linePaint) {
- super.setLinePaint(linePaint);
- if (linePaint instanceof Color) {
- brighter = ((Color) linePaint).brighter();
- } else {
- // TODO add fancy logic for GradientPaint etc...
- brighter = linePaint;
- }
- }
-
- public void paintComponent(Graphics2D g2d) {
- // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
- g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
- final double scaleFactor = getModelChart().getScaleFactor();
- final double scaledHeight = (getHeight() / getModelChart().getMaxPause());
-
- int lastWidth = Integer.MIN_VALUE;
- int lastHeight = Integer.MIN_VALUE;
- int lastX = Integer.MIN_VALUE;
- int lastY = Integer.MIN_VALUE;
-
- Rectangle clip = g2d.getClipBounds();
- int leftBoundary = clip.x;
- int rightBoundary = clip.x + clip.width;
-
- for (Iterator> i = getModelChart().getModel().getStopTheWorldEvents(); i.hasNext() && lastX < rightBoundary;) {
- AbstractGCEvent> event = i.next();
- double pause = event.getPause();
- int width = (int) Math.max(Math.abs(scaleFactor * pause), 1.0d);
- int height = (int) (pause * scaledHeight);
- int x = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
- int y = getHeight() - (int) (pause * scaledHeight);
- if (lastX != x || lastY != y || lastWidth != width || lastHeight != height) {
- if ((x + width) > leftBoundary && x < rightBoundary) {
- // make sure only visible rectangles are drawn
- if (event.isFull()) {
- g2d.setPaint(Color.BLACK);
- }
- else if (event.isInitialMark()) {
- g2d.setPaint(Color.BLUE);
- }
- else if (event.isRemark()) {
- g2d.setPaint(Color.ORANGE);
- }
- else if (event.getExtendedType().getType() == AbstractGCEvent.Type.INC_GC) {
- g2d.setPaint(brighter);
- }
- else if (event instanceof VmOperationEvent) {
- g2d.setPaint(Color.RED);
- }
- else {
- g2d.setPaint(getLinePaint());
- }
- g2d.fillRect(x, y, width, height);
- }
- lastWidth = width;
- lastHeight = height;
- lastX = x;
- lastY = y;
- }
- }
- }
-
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ChartRenderer;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.VmOperationEvent;
+
+/**
+ * Renders all stop the world event pauses as rectangles.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class GCRectanglesRenderer extends ChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.GRAY;
+ private Paint brighter;
+
+ public GCRectanglesRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ }
+
+ public void setLinePaint(Paint linePaint) {
+ super.setLinePaint(linePaint);
+ if (linePaint instanceof Color) {
+ brighter = ((Color) linePaint).brighter();
+ } else {
+ // TODO add fancy logic for GradientPaint etc...
+ brighter = linePaint;
+ }
+ }
+
+ public void paintComponent(Graphics2D g2d) {
+ // make sure that we ignore the AntiAliasing flag as it does not make sense for vertical lines
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+ final double scaleFactor = getModelChart().getScaleFactor();
+ final double scaledHeight = (getHeight() / getModelChart().getMaxPause());
+
+ int lastWidth = Integer.MIN_VALUE;
+ int lastHeight = Integer.MIN_VALUE;
+ int lastX = Integer.MIN_VALUE;
+ int lastY = Integer.MIN_VALUE;
+
+ Rectangle clip = g2d.getClipBounds();
+ int leftBoundary = clip.x;
+ int rightBoundary = clip.x + clip.width;
+
+ for (Iterator> i = getModelChart().getModel().getStopTheWorldEvents(); i.hasNext() && lastX < rightBoundary;) {
+ AbstractGCEvent> event = i.next();
+ double pause = event.getPause();
+ int width = (int) Math.max(Math.abs(scaleFactor * pause), 1.0d);
+ int height = (int) (pause * scaledHeight);
+ int x = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
+ int y = getHeight() - (int) (pause * scaledHeight);
+ if (lastX != x || lastY != y || lastWidth != width || lastHeight != height) {
+ if ((x + width) > leftBoundary && x < rightBoundary) {
+ // make sure only visible rectangles are drawn
+ if (event.isFull()) {
+ g2d.setPaint(Color.BLACK);
+ }
+ else if (event.isInitialMark()) {
+ g2d.setPaint(Color.BLUE);
+ }
+ else if (event.isRemark()) {
+ g2d.setPaint(Color.ORANGE);
+ }
+ else if (event.getExtendedType().getType() == AbstractGCEvent.Type.INC_GC) {
+ g2d.setPaint(brighter);
+ }
+ else if (event instanceof VmOperationEvent) {
+ g2d.setPaint(Color.RED);
+ }
+ else {
+ g2d.setPaint(getLinePaint());
+ }
+ g2d.fillRect(x, y, width, height);
+ }
+ lastWidth = width;
+ lastHeight = height;
+ lastX = x;
+ lastY = y;
+ }
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCTimesRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCTimesRenderer.java
index d8dcd5ac..a979d29a 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCTimesRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/GCTimesRenderer.java
@@ -1,40 +1,40 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Renders all stop the world event pauses.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class GCTimesRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.GREEN;
-
- public GCTimesRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(false);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createTimeScaledPolygon();
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> event = i.next();
- polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getPause());
- }
- // dummy point to make the polygon complete
- polygon.addPoint(model.getRunningTime(), 0.0d);
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Renders all stop the world event pauses.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class GCTimesRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.GREEN;
+
+ public GCTimesRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(false);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createTimeScaledPolygon();
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> event = i.next();
+ polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getPause());
+ }
+ // dummy point to make the polygon complete
+ polygon.addPoint(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/IncLineRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/IncLineRenderer.java
index 8f61d957..ae495e14 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/IncLineRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/IncLineRenderer.java
@@ -1,41 +1,41 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import com.tagtraum.perf.gcviewer.ChartRenderer;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-
-import java.awt.*;
-import java.util.Iterator;
-
-/**
- * IncLineRenderer.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class IncLineRenderer extends ChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.CYAN;
-
- public IncLineRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- }
-
- public void paintComponent(Graphics2D g2d) {
- double scaleFactor = getModelChart().getScaleFactor();
- int height = getHeight();
- int lastScaledTimestamp = Integer.MIN_VALUE;
- for (Iterator i = getModelChart().getModel().getGCEvents(); i.hasNext();) {
- GCEvent event = i.next();
- if (event.isInc()) {
- int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
- if (scaledTimestamp != lastScaledTimestamp) {
- g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
- lastScaledTimestamp = scaledTimestamp;
- }
- }
- }
- }
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import com.tagtraum.perf.gcviewer.ChartRenderer;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+
+import java.awt.*;
+import java.util.Iterator;
+
+/**
+ * IncLineRenderer.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class IncLineRenderer extends ChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.CYAN;
+
+ public IncLineRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ }
+
+ public void paintComponent(Graphics2D g2d) {
+ double scaleFactor = getModelChart().getScaleFactor();
+ int height = getHeight();
+ int lastScaledTimestamp = Integer.MIN_VALUE;
+ for (Iterator i = getModelChart().getModel().getGCEvents(); i.hasNext();) {
+ GCEvent event = i.next();
+ if (event.isInc()) {
+ int scaledTimestamp = (int) (scaleFactor * (event.getTimestamp() - getModelChart().getModel().getFirstPauseTimeStamp()));
+ if (scaledTimestamp != lastScaledTimestamp) {
+ g2d.drawLine(scaledTimestamp, 0, scaledTimestamp, height);
+ lastScaledTimestamp = scaledTimestamp;
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/InitialMarkLevelRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/InitialMarkLevelRenderer.java
index f6fdfec6..3f107ca3 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/InitialMarkLevelRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/InitialMarkLevelRenderer.java
@@ -1,41 +1,41 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Draws a line indicating the level of memory at the initial-mark event.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class InitialMarkLevelRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.YELLOW;
-
- public InitialMarkLevelRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(false);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- for (Iterator i = model.getGCEvents(); i.hasNext();) {
- GCEvent event = i.next();
- if (event.isInitialMark()) {
- polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getPreUsed());
- }
- }
- // Don't add dummy point to make the polygon complete! Just stop drawing.
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Draws a line indicating the level of memory at the initial-mark event.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class InitialMarkLevelRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.YELLOW;
+
+ public InitialMarkLevelRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(false);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ for (Iterator i = model.getGCEvents(); i.hasNext();) {
+ GCEvent event = i.next();
+ if (event.isInitialMark()) {
+ polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getPreUsed());
+ }
+ }
+ // Don't add dummy point to make the polygon complete! Just stop drawing.
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/PolygonChartRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/PolygonChartRenderer.java
index 872d08ac..fe165e72 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/PolygonChartRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/PolygonChartRenderer.java
@@ -1,370 +1,370 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import com.tagtraum.perf.gcviewer.ChartRenderer;
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.GcPattern;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-import java.awt.*;
-import java.awt.geom.Point2D;
-import java.util.Arrays;
-
-/**
- * Superclass for components rendering model data as polygon, polyline
- * or both.
- *
- * Date: Jun 2, 2005
- * Time: 2:53:36 PM
- * @author Hendrik Schreiber
- */
-public abstract class PolygonChartRenderer extends ChartRenderer {
- private boolean drawPolygon;
- private Paint fillPaint;
- private Polygon polygon;
- private Polygon clippedPolygon = new Polygon();
-
- public PolygonChartRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setOpaque(false);
- }
-
- public void setDrawPolygon(boolean drawPolygon) {
- this.drawPolygon = drawPolygon;
- }
-
- public void setFillPaint(Paint fillPaint) {
- this.fillPaint = fillPaint;
- }
-
- /**
- * Reset the internally cached polygon. Should always be done when size of chart is changed
- * in some way (zoom, window resize, reload), but not more often.
- */
- public void resetPolygon() {
- polygon = null;
- }
-
- /**
- * @see com.tagtraum.perf.gcviewer.ChartRenderer#paintComponent(java.awt.Graphics2D)
- */
- public void paintComponent(Graphics2D g2d) {
- if ((!drawPolygon) && (!isDrawLine())) return;
- if (polygon == null) {
- // don't recompute polygon for each paint event
- polygon = computePolygon(getModelChart(), getModelChart().getModel());
- }
- clippedPolygon = initClippedPolygon(polygon, g2d.getClip());
- if (drawPolygon) {
- // don't antialias the polygon, if we are going to antialias the bounding lines
- Object oldAAHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
- if (isDrawLine()) {
- g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
- }
- g2d.setPaint(createPaint(polygon));
- g2d.fillPolygon(clippedPolygon);
- if (isDrawLine()) {
- g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAAHint);
- }
- }
- if (isDrawLine()) {
- g2d.setPaint(getLinePaint());
- g2d.drawPolyline(clippedPolygon.xpoints, clippedPolygon.ypoints, clippedPolygon.npoints-1);
- }
- }
-
- /**
- * Updates the clippedPolygon
instance in this class to contain only the points
- * needed to fill the current clipped area.
- *
- * @param polygon full polygon with all points of the gc log file.
- * @param clip size of the current clipping area
- * @return the updated clippedPolygon
with only the points relevant to draw
- * the area inside the clip
area.
- */
- private Polygon initClippedPolygon(Polygon polygon, Shape clip) {
- int xMin = (int) clip.getBounds2D().getMinX();
- int xMax = (int) Math.ceil(clip.getBounds2D().getMaxX());
-
- // only clip if there are enough points in the polygon
- if (polygon.npoints > 1000 && (xMin > polygon.xpoints[0] || xMax < polygon.xpoints[polygon.npoints-1])) {
- InsertionBoundary insertionPoint = findInsertionBoundary(polygon, xMin, xMax);
-
- int[] xpoints = new int[insertionPoint.getDistance() + 2];
- int[] ypoints = new int[insertionPoint.getDistance() + 2];
-
- System.arraycopy(polygon.xpoints,
- insertionPoint.getStartX(),
- xpoints,
- 1,
- insertionPoint.getDistance() + 1);
-
- System.arraycopy(polygon.ypoints,
- insertionPoint.getStartX(),
- ypoints,
- 1,
- insertionPoint.getDistance() + 1);
-
- xpoints[0] = xpoints[1]-1;
- if (drawPolygon) {
- // for polygons the last point needs to be in the bottom of the chart
- // (otherwise filling will not be correct)...
- ypoints[0] = (int) Math.ceil(clip.getBounds2D().getMaxY());
- }
- else {
- // ...for lines it must not (otherwise vertical lines will appear where they shouldn't)
- ypoints[0] = ypoints[1];
- }
-
- clippedPolygon.xpoints = xpoints;
- clippedPolygon.ypoints = ypoints;
- clippedPolygon.npoints = insertionPoint.getDistance() + 2;
- clippedPolygon.addPoint(xpoints[xpoints.length-1]+1, ypoints[0]);
- }
- else {
- clippedPolygon.xpoints = polygon.xpoints;
- clippedPolygon.ypoints = polygon.ypoints;
- clippedPolygon.npoints = polygon.npoints;
- }
-
- clippedPolygon.invalidate();
-
- return clippedPolygon;
- }
-
- /**
- * Finds boundaries in xpoints
of polygon
so that startX
- * is smaller or equal to xMin
and endX
is greater or equal to
- * xMax
;
- *
- * @param polygon polygon where the boundaries have to be found
- * @param xMin min value of x
- * @param xMax max value of x
- * @return InsertionBoundary containing startX as index of first element in xpoints being
- * smaller than xMin and endX as index of first element in xpoints being greater than xMax.
- */
- private InsertionBoundary findInsertionBoundary(Polygon polygon, int xMin, int xMax) {
- InsertionBoundary insertionBoundary = new InsertionBoundary(polygon.npoints);
- // find zero based index of elements to the right and the left of "xMin" and "xMax" in the polygon
- insertionBoundary.setStartX(Math.abs(Arrays.binarySearch(polygon.xpoints, 0, polygon.npoints, xMin))-2);
- insertionBoundary.setEndX(Math.abs(Arrays.binarySearch(polygon.xpoints, 0, polygon.npoints, xMax))-1);
-
- // if the resulting point is not between two points in the array, make sure that the range
- // is extended until the insertion point is found
- while (polygon.xpoints[insertionBoundary.getStartX()] > xMin) {
- if (!insertionBoundary.decreaseStartX()) {
- break;
- }
- }
- while (polygon.xpoints[insertionBoundary.getEndX()] < xMax) {
- if (!insertionBoundary.increaseEndX()) {
- break;
- }
- }
-
- return insertionBoundary;
- }
-
- public abstract Polygon computePolygon(ModelChart modelChart, GCModel model);
-
- protected Paint createPaint(Polygon polygon) {
- if (fillPaint instanceof GradientPaint) {
- GradientPaint gradientPaint = (GradientPaint)fillPaint;
- Point2D point1 = new Point(0, getLowestY(polygon));
- Point2D point2 = new Point(0, getHeight());
- return new GradientPaint(point1, gradientPaint.getColor1(), point2, gradientPaint.getColor2(), false);
- }
- else {
- return fillPaint;
- }
- }
-
- protected ScaledPolygon createTimeScaledPolygon() {
- return new ScaledPolygon(getModelChart().getScaleFactor(), getHeight()/(getModelChart().getMaxPause()), getHeight());
- }
-
- protected ScaledPolygon createMemoryScaledPolygon() {
- return new ScaledPolygon(getModelChart().getScaleFactor(), getHeight()/((double)getModelChart().getFootprint()), getHeight());
- }
-
- private static int getLowestY(Polygon polygon) {
- int[] y = polygon.ypoints;
- int min = Integer.MAX_VALUE;
- for (int i=0, max=polygon.npoints; itrue if event
is of a type that contains memory information.
- *
- * @param event event to be analysed
- * @return true
if event
contains memory information
- */
- protected boolean hasMemoryInformation(GCEvent event) {
- return event.getExtendedType().getPattern().equals(GcPattern.GC_MEMORY)
- || event.getExtendedType().getPattern().equals(GcPattern.GC_MEMORY_PAUSE);
- }
-
- /**
- * Polygon that scales points upon addition.
- */
- public static class ScaledPolygon extends Polygon {
- private double xScaleFactor;
- private double yScaleFactor;
- private int yOffset;
- private Point lastPointOfOptimisation = new Point();
- private boolean lastPointWasOptimised = false;
-
- public ScaledPolygon(double xScaleFactor, double yScaleFactor, int yOffset) {
- this.xScaleFactor = xScaleFactor;
- this.yScaleFactor = yScaleFactor;
- this.yOffset = yOffset;
- }
-
- /**
- * Adds Point to the polygon optimising the polygon so as not to add points that can't
- * be seen in the graph because they are on the same pixel after scaling.
- *
- * @param x x-value
- * @param y y-value
- */
- public void addPoint(double x, double y) {
- int scaledY = getScaledYValue(y);
- int scaledX = getScaledXValue(x);
- // optimize the polygon as we add points.
- if (!lastPointWasOptimised
- && npoints>2
- && ypoints[npoints-2] == scaledY
- && ypoints[npoints-1] == ypoints[npoints-2]) {
-
- xpoints[npoints-1] = scaledX;
- }
- else if (npoints>2 && xpoints[npoints-2] == scaledX && xpoints[npoints-1] == xpoints[npoints-2]) {
- if (!lastPointWasOptimised) {
- // first point to be optimised in this sequence
- // duplicate second last point to make sure that the connecting line ends right
- addPoint(xpoints[npoints-1], ypoints[npoints-1]);
- ypoints[npoints-2] = ypoints[npoints-3];
- }
-
- // optimise the subsequent points to make sure the resulting vertical line is
- // as long as the greatest distance between any two points of the sequence
- if (ypoints[npoints-2] < ypoints[npoints-1]) {
- ypoints[npoints-2] = Math.min(ypoints[npoints-2], scaledY);
- ypoints[npoints-1] = Math.max(ypoints[npoints-1], scaledY);
- }
- else {
- ypoints[npoints-2] = Math.max(ypoints[npoints-2], scaledY);
- ypoints[npoints-1] = Math.min(ypoints[npoints-1], scaledY);
- }
- lastPointOfOptimisation.setLocation(scaledX, scaledY);
- lastPointWasOptimised = true;
- }
- else {
- if (lastPointWasOptimised) {
- // the last point of the sequence must be exactly the last point before
- // this optimisation sequence stops; again to make sure that the connecting
- // line starting from this point will start from the right position
- addPoint(lastPointOfOptimisation.x, lastPointOfOptimisation.y);
- }
- addPoint(scaledX, scaledY);
- lastPointWasOptimised = false;
- }
- }
-
- /**
- * Adds the given point without optimisation.
- *
- * @param x x-Value
- * @param y y-Value
- */
- public void addPointNotOptimised(double x, double y) {
- addPoint(getScaledXValue(x), getScaledYValue(y));
- }
-
- private int getScaledXValue(double x) {
- return (int)(xScaleFactor * x);
- }
-
- private int getScaledYValue(double y) {
- return yOffset - (int)(yScaleFactor * y);
- }
-
- }
-
- /**
- * InsertionBoundary holds the boundaries (index in polygon.xpoints) in a polygon array.
- * This class makes sure that the boundary indexes are allways within the size of the
- * polygon arrays size.
- *
- * @author Joerg Wuethrich
- * created on: 04.06.2012
- */
- private static class InsertionBoundary {
- private int startX;
- private int endX;
-
- /** max value that insertion point may have */
- private int maxX;
-
- public InsertionBoundary(int arrayLength) {
- super();
-
- if (arrayLength == 0) {
- throw new IllegalArgumentException("arrayLength must be > 0");
- }
-
- this.maxX = arrayLength-1;
- }
-
- /**
- * Decreases start index by one
- * @return true
if current start index was >0 before, false
otherwise
- */
- public boolean decreaseStartX() {
- if (startX > 0) {
- --startX;
- return true;
- }
-
- return false;
- }
-
- /**
- * Increases end index by one
- * @return true
if current end index was < max value before, false
otherwise
- */
- public boolean increaseEndX() {
- if (endX < maxX) {
- ++endX;
- return true;
- }
-
- return false;
- }
-
- public int getDistance() {
- return endX - startX;
- }
-
- public int getStartX() {
- return startX;
- }
-
- public void setStartX(int startX) {
- this.startX = startX < 0 ? 0 : startX;
- }
-
- public int getEndX() {
- return endX;
- }
-
- public void setEndX(int endX) {
- this.endX = endX > maxX ? maxX : endX;
- }
-
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import com.tagtraum.perf.gcviewer.ChartRenderer;
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.GcPattern;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+import java.awt.*;
+import java.awt.geom.Point2D;
+import java.util.Arrays;
+
+/**
+ * Superclass for components rendering model data as polygon, polyline
+ * or both.
+ *
+ * Date: Jun 2, 2005
+ * Time: 2:53:36 PM
+ * @author Hendrik Schreiber
+ */
+public abstract class PolygonChartRenderer extends ChartRenderer {
+ private boolean drawPolygon;
+ private Paint fillPaint;
+ private Polygon polygon;
+ private Polygon clippedPolygon = new Polygon();
+
+ public PolygonChartRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setOpaque(false);
+ }
+
+ public void setDrawPolygon(boolean drawPolygon) {
+ this.drawPolygon = drawPolygon;
+ }
+
+ public void setFillPaint(Paint fillPaint) {
+ this.fillPaint = fillPaint;
+ }
+
+ /**
+ * Reset the internally cached polygon. Should always be done when size of chart is changed
+ * in some way (zoom, window resize, reload), but not more often.
+ */
+ public void resetPolygon() {
+ polygon = null;
+ }
+
+ /**
+ * @see com.tagtraum.perf.gcviewer.ChartRenderer#paintComponent(java.awt.Graphics2D)
+ */
+ public void paintComponent(Graphics2D g2d) {
+ if ((!drawPolygon) && (!isDrawLine())) return;
+ if (polygon == null) {
+ // don't recompute polygon for each paint event
+ polygon = computePolygon(getModelChart(), getModelChart().getModel());
+ }
+ clippedPolygon = initClippedPolygon(polygon, g2d.getClip());
+ if (drawPolygon) {
+ // don't antialias the polygon, if we are going to antialias the bounding lines
+ Object oldAAHint = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING);
+ if (isDrawLine()) {
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+ }
+ g2d.setPaint(createPaint(polygon));
+ g2d.fillPolygon(clippedPolygon);
+ if (isDrawLine()) {
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, oldAAHint);
+ }
+ }
+ if (isDrawLine()) {
+ g2d.setPaint(getLinePaint());
+ g2d.drawPolyline(clippedPolygon.xpoints, clippedPolygon.ypoints, clippedPolygon.npoints-1);
+ }
+ }
+
+ /**
+ * Updates the clippedPolygon
instance in this class to contain only the points
+ * needed to fill the current clipped area.
+ *
+ * @param polygon full polygon with all points of the gc log file.
+ * @param clip size of the current clipping area
+ * @return the updated clippedPolygon
with only the points relevant to draw
+ * the area inside the clip
area.
+ */
+ private Polygon initClippedPolygon(Polygon polygon, Shape clip) {
+ int xMin = (int) clip.getBounds2D().getMinX();
+ int xMax = (int) Math.ceil(clip.getBounds2D().getMaxX());
+
+ // only clip if there are enough points in the polygon
+ if (polygon.npoints > 1000 && (xMin > polygon.xpoints[0] || xMax < polygon.xpoints[polygon.npoints-1])) {
+ InsertionBoundary insertionPoint = findInsertionBoundary(polygon, xMin, xMax);
+
+ int[] xpoints = new int[insertionPoint.getDistance() + 2];
+ int[] ypoints = new int[insertionPoint.getDistance() + 2];
+
+ System.arraycopy(polygon.xpoints,
+ insertionPoint.getStartX(),
+ xpoints,
+ 1,
+ insertionPoint.getDistance() + 1);
+
+ System.arraycopy(polygon.ypoints,
+ insertionPoint.getStartX(),
+ ypoints,
+ 1,
+ insertionPoint.getDistance() + 1);
+
+ xpoints[0] = xpoints[1]-1;
+ if (drawPolygon) {
+ // for polygons the last point needs to be in the bottom of the chart
+ // (otherwise filling will not be correct)...
+ ypoints[0] = (int) Math.ceil(clip.getBounds2D().getMaxY());
+ }
+ else {
+ // ...for lines it must not (otherwise vertical lines will appear where they shouldn't)
+ ypoints[0] = ypoints[1];
+ }
+
+ clippedPolygon.xpoints = xpoints;
+ clippedPolygon.ypoints = ypoints;
+ clippedPolygon.npoints = insertionPoint.getDistance() + 2;
+ clippedPolygon.addPoint(xpoints[xpoints.length-1]+1, ypoints[0]);
+ }
+ else {
+ clippedPolygon.xpoints = polygon.xpoints;
+ clippedPolygon.ypoints = polygon.ypoints;
+ clippedPolygon.npoints = polygon.npoints;
+ }
+
+ clippedPolygon.invalidate();
+
+ return clippedPolygon;
+ }
+
+ /**
+ * Finds boundaries in xpoints
of polygon
so that startX
+ * is smaller or equal to xMin
and endX
is greater or equal to
+ * xMax
;
+ *
+ * @param polygon polygon where the boundaries have to be found
+ * @param xMin min value of x
+ * @param xMax max value of x
+ * @return InsertionBoundary containing startX as index of first element in xpoints being
+ * smaller than xMin and endX as index of first element in xpoints being greater than xMax.
+ */
+ private InsertionBoundary findInsertionBoundary(Polygon polygon, int xMin, int xMax) {
+ InsertionBoundary insertionBoundary = new InsertionBoundary(polygon.npoints);
+ // find zero based index of elements to the right and the left of "xMin" and "xMax" in the polygon
+ insertionBoundary.setStartX(Math.abs(Arrays.binarySearch(polygon.xpoints, 0, polygon.npoints, xMin))-2);
+ insertionBoundary.setEndX(Math.abs(Arrays.binarySearch(polygon.xpoints, 0, polygon.npoints, xMax))-1);
+
+ // if the resulting point is not between two points in the array, make sure that the range
+ // is extended until the insertion point is found
+ while (polygon.xpoints[insertionBoundary.getStartX()] > xMin) {
+ if (!insertionBoundary.decreaseStartX()) {
+ break;
+ }
+ }
+ while (polygon.xpoints[insertionBoundary.getEndX()] < xMax) {
+ if (!insertionBoundary.increaseEndX()) {
+ break;
+ }
+ }
+
+ return insertionBoundary;
+ }
+
+ public abstract Polygon computePolygon(ModelChart modelChart, GCModel model);
+
+ protected Paint createPaint(Polygon polygon) {
+ if (fillPaint instanceof GradientPaint) {
+ GradientPaint gradientPaint = (GradientPaint)fillPaint;
+ Point2D point1 = new Point(0, getLowestY(polygon));
+ Point2D point2 = new Point(0, getHeight());
+ return new GradientPaint(point1, gradientPaint.getColor1(), point2, gradientPaint.getColor2(), false);
+ }
+ else {
+ return fillPaint;
+ }
+ }
+
+ protected ScaledPolygon createTimeScaledPolygon() {
+ return new ScaledPolygon(getModelChart().getScaleFactor(), getHeight()/(getModelChart().getMaxPause()), getHeight());
+ }
+
+ protected ScaledPolygon createMemoryScaledPolygon() {
+ return new ScaledPolygon(getModelChart().getScaleFactor(), getHeight()/((double)getModelChart().getFootprint()), getHeight());
+ }
+
+ private static int getLowestY(Polygon polygon) {
+ int[] y = polygon.ypoints;
+ int min = Integer.MAX_VALUE;
+ for (int i=0, max=polygon.npoints; itrue if event
is of a type that contains memory information.
+ *
+ * @param event event to be analysed
+ * @return true
if event
contains memory information
+ */
+ protected boolean hasMemoryInformation(GCEvent event) {
+ return event.getExtendedType().getPattern().equals(GcPattern.GC_MEMORY)
+ || event.getExtendedType().getPattern().equals(GcPattern.GC_MEMORY_PAUSE);
+ }
+
+ /**
+ * Polygon that scales points upon addition.
+ */
+ public static class ScaledPolygon extends Polygon {
+ private double xScaleFactor;
+ private double yScaleFactor;
+ private int yOffset;
+ private Point lastPointOfOptimisation = new Point();
+ private boolean lastPointWasOptimised = false;
+
+ public ScaledPolygon(double xScaleFactor, double yScaleFactor, int yOffset) {
+ this.xScaleFactor = xScaleFactor;
+ this.yScaleFactor = yScaleFactor;
+ this.yOffset = yOffset;
+ }
+
+ /**
+ * Adds Point to the polygon optimising the polygon so as not to add points that can't
+ * be seen in the graph because they are on the same pixel after scaling.
+ *
+ * @param x x-value
+ * @param y y-value
+ */
+ public void addPoint(double x, double y) {
+ int scaledY = getScaledYValue(y);
+ int scaledX = getScaledXValue(x);
+ // optimize the polygon as we add points.
+ if (!lastPointWasOptimised
+ && npoints>2
+ && ypoints[npoints-2] == scaledY
+ && ypoints[npoints-1] == ypoints[npoints-2]) {
+
+ xpoints[npoints-1] = scaledX;
+ }
+ else if (npoints>2 && xpoints[npoints-2] == scaledX && xpoints[npoints-1] == xpoints[npoints-2]) {
+ if (!lastPointWasOptimised) {
+ // first point to be optimised in this sequence
+ // duplicate second last point to make sure that the connecting line ends right
+ addPoint(xpoints[npoints-1], ypoints[npoints-1]);
+ ypoints[npoints-2] = ypoints[npoints-3];
+ }
+
+ // optimise the subsequent points to make sure the resulting vertical line is
+ // as long as the greatest distance between any two points of the sequence
+ if (ypoints[npoints-2] < ypoints[npoints-1]) {
+ ypoints[npoints-2] = Math.min(ypoints[npoints-2], scaledY);
+ ypoints[npoints-1] = Math.max(ypoints[npoints-1], scaledY);
+ }
+ else {
+ ypoints[npoints-2] = Math.max(ypoints[npoints-2], scaledY);
+ ypoints[npoints-1] = Math.min(ypoints[npoints-1], scaledY);
+ }
+ lastPointOfOptimisation.setLocation(scaledX, scaledY);
+ lastPointWasOptimised = true;
+ }
+ else {
+ if (lastPointWasOptimised) {
+ // the last point of the sequence must be exactly the last point before
+ // this optimisation sequence stops; again to make sure that the connecting
+ // line starting from this point will start from the right position
+ addPoint(lastPointOfOptimisation.x, lastPointOfOptimisation.y);
+ }
+ addPoint(scaledX, scaledY);
+ lastPointWasOptimised = false;
+ }
+ }
+
+ /**
+ * Adds the given point without optimisation.
+ *
+ * @param x x-Value
+ * @param y y-Value
+ */
+ public void addPointNotOptimised(double x, double y) {
+ addPoint(getScaledXValue(x), getScaledYValue(y));
+ }
+
+ private int getScaledXValue(double x) {
+ return (int)(xScaleFactor * x);
+ }
+
+ private int getScaledYValue(double y) {
+ return yOffset - (int)(yScaleFactor * y);
+ }
+
+ }
+
+ /**
+ * InsertionBoundary holds the boundaries (index in polygon.xpoints) in a polygon array.
+ * This class makes sure that the boundary indexes are allways within the size of the
+ * polygon arrays size.
+ *
+ * @author Joerg Wuethrich
+ * created on: 04.06.2012
+ */
+ private static class InsertionBoundary {
+ private int startX;
+ private int endX;
+
+ /** max value that insertion point may have */
+ private int maxX;
+
+ public InsertionBoundary(int arrayLength) {
+ super();
+
+ if (arrayLength == 0) {
+ throw new IllegalArgumentException("arrayLength must be > 0");
+ }
+
+ this.maxX = arrayLength-1;
+ }
+
+ /**
+ * Decreases start index by one
+ * @return true
if current start index was >0 before, false
otherwise
+ */
+ public boolean decreaseStartX() {
+ if (startX > 0) {
+ --startX;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Increases end index by one
+ * @return true
if current end index was < max value before, false
otherwise
+ */
+ public boolean increaseEndX() {
+ if (endX < maxX) {
+ ++endX;
+ return true;
+ }
+
+ return false;
+ }
+
+ public int getDistance() {
+ return endX - startX;
+ }
+
+ public int getStartX() {
+ return startX;
+ }
+
+ public void setStartX(int startX) {
+ this.startX = startX < 0 ? 0 : startX;
+ }
+
+ public int getEndX() {
+ return endX;
+ }
+
+ public void setEndX(int endX) {
+ this.endX = endX > maxX ? maxX : endX;
+ }
+
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalHeapRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalHeapRenderer.java
index 44599e18..5e6d7d6f 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalHeapRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalHeapRenderer.java
@@ -1,50 +1,50 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import com.tagtraum.perf.gcviewer.*;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-import java.awt.*;
-import java.util.Iterator;
-
-/**
- * TotalHeapRenderer.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class TotalHeapRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.RED;
- public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.RED, 0, 0, Color.WHITE);
-
- public TotalHeapRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setFillPaint(DEFAULT_FILLPAINT);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(true);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- polygon.addPoint(0.0d, 0.0d);
- int lastTotal = 0;
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- if (event.getTotal() > 0) {
- // there are events that don't have a heap size associated (like "GC remark" of G1)
- // -> skip them
- polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getTotal());
- lastTotal = event.getTotal();
- }
- }
- }
- polygon.addPointNotOptimised(model.getRunningTime(), lastTotal);
- polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import com.tagtraum.perf.gcviewer.*;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+import java.awt.*;
+import java.util.Iterator;
+
+/**
+ * TotalHeapRenderer.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class TotalHeapRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.RED;
+ public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.RED, 0, 0, Color.WHITE);
+
+ public TotalHeapRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setFillPaint(DEFAULT_FILLPAINT);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(true);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ polygon.addPoint(0.0d, 0.0d);
+ int lastTotal = 0;
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ if (event.getTotal() > 0) {
+ // there are events that don't have a heap size associated (like "GC remark" of G1)
+ // -> skip them
+ polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), event.getTotal());
+ lastTotal = event.getTotal();
+ }
+ }
+ }
+ polygon.addPointNotOptimised(model.getRunningTime(), lastTotal);
+ polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalTenuredRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalTenuredRenderer.java
index e8f35e74..8e9e7509 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalTenuredRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalTenuredRenderer.java
@@ -1,66 +1,66 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.GradientPaint;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Renders total size of tenured heap.
- *
- *
Date: Jun 2, 2005
- *
Time: 3:31:21 PM
- * @author Hendrik Schreiber
- * @author Joerg Wuethrich
- */
-public class TotalTenuredRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.MAGENTA;
- public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.MAGENTA, 0, 0, Color.WHITE);
-
- public TotalTenuredRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setFillPaint(DEFAULT_FILLPAINT);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(true);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- polygon.addPoint(0.0d, 0.0d);
- double lastTotal = 0.0d;
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- GCEvent tenured = event.getTenured();
- if (hasMemoryInformation(event) && tenured != null) {
- double total = tenured.getTotal();
- if (polygon.npoints == 1) {
- // first point needs to be treated different from the rest,
- // because otherwise the polygon would not start with a vertical line at 0,
- // but with a slanting line between 0 and after the first pause
- polygon.addPoint(0.0d, total);
- lastTotal = total;
- }
-
- if (lastTotal != total) {
- polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp(), lastTotal);
- }
- polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp() + tenured.getPause(), total);
- lastTotal = total;
- }
- }
- }
- polygon.addPointNotOptimised(model.getRunningTime(), lastTotal);
- polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.GradientPaint;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Renders total size of tenured heap.
+ *
+ *
Date: Jun 2, 2005
+ *
Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ * @author Joerg Wuethrich
+ */
+public class TotalTenuredRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.MAGENTA;
+ public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.MAGENTA, 0, 0, Color.WHITE);
+
+ public TotalTenuredRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setFillPaint(DEFAULT_FILLPAINT);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(true);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ polygon.addPoint(0.0d, 0.0d);
+ double lastTotal = 0.0d;
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ GCEvent tenured = event.getTenured();
+ if (hasMemoryInformation(event) && tenured != null) {
+ double total = tenured.getTotal();
+ if (polygon.npoints == 1) {
+ // first point needs to be treated different from the rest,
+ // because otherwise the polygon would not start with a vertical line at 0,
+ // but with a slanting line between 0 and after the first pause
+ polygon.addPoint(0.0d, total);
+ lastTotal = total;
+ }
+
+ if (lastTotal != total) {
+ polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp(), lastTotal);
+ }
+ polygon.addPoint(tenured.getTimestamp() - model.getFirstPauseTimeStamp() + tenured.getPause(), total);
+ lastTotal = total;
+ }
+ }
+ }
+ polygon.addPointNotOptimised(model.getRunningTime(), lastTotal);
+ polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalYoungRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalYoungRenderer.java
index 9d7aabcc..b400315a 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalYoungRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/TotalYoungRenderer.java
@@ -1,75 +1,75 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.GradientPaint;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Renders total size of young generation.
- *
- *
Date: Jun 2, 2005
- *
Time: 3:31:21 PM
- * @author Hendrik Schreiber
- * @author Joerg Wuethrich
- */
-public class TotalYoungRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.ORANGE;
- public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.ORANGE, 0, 0, Color.WHITE);
-
- public TotalYoungRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setFillPaint(DEFAULT_FILLPAINT);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(true);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- polygon.addPoint(0.0d, 0.0d);
- double lastTenured = 0;
- double lastYoung = 0;
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- double tenuredSize = 0;
- double youngSize = 0;
- GCEvent young = event.getYoung();
- GCEvent tenured = event.getTenured();
- if (hasMemoryInformation(event) && young != null && tenured != null) {
- if (modelChart.isShowTenured()) {
- tenuredSize = tenured.getTotal();
- }
- youngSize = young.getTotal();
-
- if (polygon.npoints == 1) {
- // first point needs to be treated different from the rest,
- // because otherwise the polygon would not start with a vertical line at 0,
- // but with a slanting line between 0 and after the first pause
- polygon.addPoint(0, tenuredSize + youngSize);
- lastYoung = youngSize;
- lastTenured = tenuredSize;
- }
- if (((lastTenured + lastYoung) - (tenuredSize + youngSize)) > 0.0000001) {
- polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), lastTenured + lastYoung);
- }
- polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp() + event.getPause(), tenuredSize + youngSize);
- lastYoung = youngSize;
- lastTenured = tenuredSize;
- }
- }
- }
- polygon.addPointNotOptimised(model.getRunningTime(), lastTenured + lastYoung);
- polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.GradientPaint;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Renders total size of young generation.
+ *
+ *
Date: Jun 2, 2005
+ *
Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ * @author Joerg Wuethrich
+ */
+public class TotalYoungRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.ORANGE;
+ public static final Paint DEFAULT_FILLPAINT = new GradientPaint(0, 0, Color.ORANGE, 0, 0, Color.WHITE);
+
+ public TotalYoungRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setFillPaint(DEFAULT_FILLPAINT);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(true);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ polygon.addPoint(0.0d, 0.0d);
+ double lastTenured = 0;
+ double lastYoung = 0;
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ double tenuredSize = 0;
+ double youngSize = 0;
+ GCEvent young = event.getYoung();
+ GCEvent tenured = event.getTenured();
+ if (hasMemoryInformation(event) && young != null && tenured != null) {
+ if (modelChart.isShowTenured()) {
+ tenuredSize = tenured.getTotal();
+ }
+ youngSize = young.getTotal();
+
+ if (polygon.npoints == 1) {
+ // first point needs to be treated different from the rest,
+ // because otherwise the polygon would not start with a vertical line at 0,
+ // but with a slanting line between 0 and after the first pause
+ polygon.addPoint(0, tenuredSize + youngSize);
+ lastYoung = youngSize;
+ lastTenured = tenuredSize;
+ }
+ if (((lastTenured + lastYoung) - (tenuredSize + youngSize)) > 0.0000001) {
+ polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp(), lastTenured + lastYoung);
+ }
+ polygon.addPoint(event.getTimestamp() - model.getFirstPauseTimeStamp() + event.getPause(), tenuredSize + youngSize);
+ lastYoung = youngSize;
+ lastTenured = tenuredSize;
+ }
+ }
+ }
+ polygon.addPointNotOptimised(model.getRunningTime(), lastTenured + lastYoung);
+ polygon.addPointNotOptimised(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedHeapRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedHeapRenderer.java
index 8846e624..33b6971e 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedHeapRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedHeapRenderer.java
@@ -1,50 +1,50 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * UsedHeapRenderer.
- *
- * Date: Jun 2, 2005
- * Time: 3:31:21 PM
- * @author Hendrik Schreiber
- */
-public class UsedHeapRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.BLUE;
-
- public UsedHeapRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(false);
- setDrawLine(true);
- }
-
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- // e.g. "GC remark" of G1 algorithm does not contain memory information
- if (event.getTotal() > 0) {
- final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
- polygon.addPoint(timestamp, event.getPreUsed());
- polygon.addPoint(timestamp + event.getPause(), event.getPostUsed());
- }
- }
- }
- // dummy point to make the polygon complete
- polygon.addPoint(model.getRunningTime(), 0.0d);
- //System.out.println("last x coord " + polygon.xpoints[polygon.npoints-1]);
- return polygon;
- }
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * UsedHeapRenderer.
+ *
+ * Date: Jun 2, 2005
+ * Time: 3:31:21 PM
+ * @author Hendrik Schreiber
+ */
+public class UsedHeapRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.BLUE;
+
+ public UsedHeapRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(false);
+ setDrawLine(true);
+ }
+
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ // e.g. "GC remark" of G1 algorithm does not contain memory information
+ if (event.getTotal() > 0) {
+ final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
+ polygon.addPoint(timestamp, event.getPreUsed());
+ polygon.addPoint(timestamp + event.getPause(), event.getPostUsed());
+ }
+ }
+ }
+ // dummy point to make the polygon complete
+ polygon.addPoint(model.getRunningTime(), 0.0d);
+ //System.out.println("last x coord " + polygon.xpoints[polygon.npoints-1]);
+ return polygon;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedTenuredRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedTenuredRenderer.java
index 20ded0b3..8a03a71e 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedTenuredRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedTenuredRenderer.java
@@ -1,54 +1,54 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * UsedTenuredRenderer draws a line to indicate the current usage of the tenured generation.
- *
- * @author Joerg Wuethrich
- * created on: 22.07.2012
- */
-public class UsedTenuredRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.MAGENTA.darker();
-
- public UsedTenuredRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(false);
- setDrawLine(true);
- }
-
- @Override
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- GCEvent tenuredEvent = event.getTenured();
- if (tenuredEvent != null) {
- // only -XX:+PrintGCDetails adds information about generations
- // e.g. "GC remark" of G1 algorithm does not contain memory information
- if (tenuredEvent.getTotal() > 0) {
- final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
- polygon.addPoint(timestamp, tenuredEvent.getPreUsed());
- polygon.addPoint(timestamp + event.getPause(), tenuredEvent.getPostUsed());
- }
- }
- }
- }
- // dummy point to make the polygon complete
- polygon.addPoint(model.getRunningTime(), 0.0d);
- return polygon;
- }
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * UsedTenuredRenderer draws a line to indicate the current usage of the tenured generation.
+ *
+ * @author Joerg Wuethrich
+ * created on: 22.07.2012
+ */
+public class UsedTenuredRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.MAGENTA.darker();
+
+ public UsedTenuredRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(false);
+ setDrawLine(true);
+ }
+
+ @Override
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ GCEvent tenuredEvent = event.getTenured();
+ if (tenuredEvent != null) {
+ // only -XX:+PrintGCDetails adds information about generations
+ // e.g. "GC remark" of G1 algorithm does not contain memory information
+ if (tenuredEvent.getTotal() > 0) {
+ final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
+ polygon.addPoint(timestamp, tenuredEvent.getPreUsed());
+ polygon.addPoint(timestamp + event.getPause(), tenuredEvent.getPostUsed());
+ }
+ }
+ }
+ }
+ // dummy point to make the polygon complete
+ polygon.addPoint(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedYoungRenderer.java b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedYoungRenderer.java
index f3ace4ff..5b047dcb 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedYoungRenderer.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/renderer/UsedYoungRenderer.java
@@ -1,69 +1,69 @@
-package com.tagtraum.perf.gcviewer.renderer;
-
-import java.awt.Color;
-import java.awt.Paint;
-import java.awt.Polygon;
-import java.util.Iterator;
-
-import com.tagtraum.perf.gcviewer.ModelChart;
-import com.tagtraum.perf.gcviewer.ModelChartImpl;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * UsedYoungRenderer draws a line to indicate the current usage of the young generation. The line
- * is drawn inside the young generation (as drawn by the {@link TotalYoungRenderer}).
- *
- * @author Joerg Wuethrich
- * created on: 22.07.2012
- */
-public class UsedYoungRenderer extends PolygonChartRenderer {
- public static final Paint DEFAULT_LINEPAINT = Color.LIGHT_GRAY;
-
- public UsedYoungRenderer(ModelChartImpl modelChart) {
- super(modelChart);
- setLinePaint(DEFAULT_LINEPAINT);
- setDrawPolygon(false);
- setDrawLine(true);
- }
-
- @Override
- public Polygon computePolygon(ModelChart modelChart, GCModel model) {
- ScaledPolygon polygon = createMemoryScaledPolygon();
- GCEvent lastTenuredEvent = null;
- GCEvent tenuredEvent = null;
- for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
- AbstractGCEvent> abstractGCEvent = i.next();
- if (abstractGCEvent instanceof GCEvent) {
- GCEvent event = (GCEvent) abstractGCEvent;
- GCEvent youngEvent = event.getYoung();
- int lastTenuredTotal = 0;
- int tenuredTotal = 0;
- if (youngEvent != null) {
- // event contains information about generation (only with -XX:+PrintGCDetails)
- if (modelChart.isShowTenured()) {
- if (tenuredEvent != null && tenuredEvent.getTotal() > 0) {
- lastTenuredEvent = tenuredEvent;
- }
- if (lastTenuredEvent == null) lastTenuredEvent = event.getTenured();
- tenuredEvent = event.getTenured();
-
- lastTenuredTotal = lastTenuredEvent.getTotal();
- tenuredTotal = tenuredEvent.getTotal();
- }
- // e.g. "GC remark" of G1 algorithm does not contain memory information
- if (youngEvent.getTotal() > 0) {
- final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
- polygon.addPoint(timestamp, lastTenuredTotal + youngEvent.getPreUsed());
- polygon.addPoint(timestamp + event.getPause(), tenuredTotal + youngEvent.getPostUsed());
- }
- }
- }
- }
- // dummy point to make the polygon complete
- polygon.addPoint(model.getRunningTime(), 0.0d);
- return polygon;
- }
-
-}
+package com.tagtraum.perf.gcviewer.renderer;
+
+import java.awt.Color;
+import java.awt.Paint;
+import java.awt.Polygon;
+import java.util.Iterator;
+
+import com.tagtraum.perf.gcviewer.ModelChart;
+import com.tagtraum.perf.gcviewer.ModelChartImpl;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * UsedYoungRenderer draws a line to indicate the current usage of the young generation. The line
+ * is drawn inside the young generation (as drawn by the {@link TotalYoungRenderer}).
+ *
+ * @author Joerg Wuethrich
+ * created on: 22.07.2012
+ */
+public class UsedYoungRenderer extends PolygonChartRenderer {
+ public static final Paint DEFAULT_LINEPAINT = Color.LIGHT_GRAY;
+
+ public UsedYoungRenderer(ModelChartImpl modelChart) {
+ super(modelChart);
+ setLinePaint(DEFAULT_LINEPAINT);
+ setDrawPolygon(false);
+ setDrawLine(true);
+ }
+
+ @Override
+ public Polygon computePolygon(ModelChart modelChart, GCModel model) {
+ ScaledPolygon polygon = createMemoryScaledPolygon();
+ GCEvent lastTenuredEvent = null;
+ GCEvent tenuredEvent = null;
+ for (Iterator> i = model.getStopTheWorldEvents(); i.hasNext();) {
+ AbstractGCEvent> abstractGCEvent = i.next();
+ if (abstractGCEvent instanceof GCEvent) {
+ GCEvent event = (GCEvent) abstractGCEvent;
+ GCEvent youngEvent = event.getYoung();
+ int lastTenuredTotal = 0;
+ int tenuredTotal = 0;
+ if (youngEvent != null) {
+ // event contains information about generation (only with -XX:+PrintGCDetails)
+ if (modelChart.isShowTenured()) {
+ if (tenuredEvent != null && tenuredEvent.getTotal() > 0) {
+ lastTenuredEvent = tenuredEvent;
+ }
+ if (lastTenuredEvent == null) lastTenuredEvent = event.getTenured();
+ tenuredEvent = event.getTenured();
+
+ lastTenuredTotal = lastTenuredEvent.getTotal();
+ tenuredTotal = tenuredEvent.getTotal();
+ }
+ // e.g. "GC remark" of G1 algorithm does not contain memory information
+ if (youngEvent.getTotal() > 0) {
+ final double timestamp = event.getTimestamp() - model.getFirstPauseTimeStamp();
+ polygon.addPoint(timestamp, lastTenuredTotal + youngEvent.getPreUsed());
+ polygon.addPoint(timestamp + event.getPause(), tenuredTotal + youngEvent.getPostUsed());
+ }
+ }
+ }
+ }
+ // dummy point to make the polygon complete
+ polygon.addPoint(model.getRunningTime(), 0.0d);
+ return polygon;
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/BuildInfoReader.java b/src/main/java/com/tagtraum/perf/gcviewer/util/BuildInfoReader.java
index eb8421cb..6c8425fe 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/BuildInfoReader.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/BuildInfoReader.java
@@ -1,62 +1,62 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-/**
- * Small helper class to provide current version of GCViewer.
- *
- * @author Joerg Wuethrich
- * created on: 14.07.2012
- *
- */
-public class BuildInfoReader {
-
- private final static String FILE_NAME = "META-INF/MANIFEST.MF";
- private final static String BUILD_VERSION = "Implementation-Version";
- private final static String BUILD_TIMESTAMP = "Implementation-Date";
-
- /**
- * Reads the value of a property from FILE_NAME (must be in classpath).
- *
- * @param propertyName name of the property to be read
- * @return "n/a" if it couldn't be found or the value
- */
- private static String readPropertyValue(String propertyName) {
- String propertyValue = "n/a";
- try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(FILE_NAME)) {
- if (in != null) {
- Properties props = new Properties();
- props.load(in);
- propertyValue = props.getProperty(propertyName);
- if (propertyValue == null || propertyValue.length() == 0) {
- propertyValue = "n/a";
- }
- }
- }
- catch (IOException e) {
- e.printStackTrace();
- }
-
- return propertyValue;
- }
-
- /**
- * Read version from properties file in classpath if it can be found.
- *
- * @return version or "n/a" if not found.
- */
- public static String getVersion() {
- return readPropertyValue(BUILD_VERSION);
- }
-
- /**
- * Read build date from properties file in classpath if it can be found.
- *
- * @return date or "n/a" if not found.
- */
- public static String getBuildDate() {
- return readPropertyValue(BUILD_TIMESTAMP);
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+/**
+ * Small helper class to provide current version of GCViewer.
+ *
+ * @author Joerg Wuethrich
+ * created on: 14.07.2012
+ *
+ */
+public class BuildInfoReader {
+
+ private final static String FILE_NAME = "META-INF/MANIFEST.MF";
+ private final static String BUILD_VERSION = "Implementation-Version";
+ private final static String BUILD_TIMESTAMP = "Implementation-Date";
+
+ /**
+ * Reads the value of a property from FILE_NAME (must be in classpath).
+ *
+ * @param propertyName name of the property to be read
+ * @return "n/a" if it couldn't be found or the value
+ */
+ private static String readPropertyValue(String propertyName) {
+ String propertyValue = "n/a";
+ try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(FILE_NAME)) {
+ if (in != null) {
+ Properties props = new Properties();
+ props.load(in);
+ propertyValue = props.getProperty(propertyName);
+ if (propertyValue == null || propertyValue.length() == 0) {
+ propertyValue = "n/a";
+ }
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ return propertyValue;
+ }
+
+ /**
+ * Read version from properties file in classpath if it can be found.
+ *
+ * @return version or "n/a" if not found.
+ */
+ public static String getVersion() {
+ return readPropertyValue(BUILD_VERSION);
+ }
+
+ /**
+ * Read build date from properties file in classpath if it can be found.
+ *
+ * @return date or "n/a" if not found.
+ */
+ public static String getBuildDate() {
+ return readPropertyValue(BUILD_TIMESTAMP);
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/ExtensionFileFilter.java b/src/main/java/com/tagtraum/perf/gcviewer/util/ExtensionFileFilter.java
index 377c084c..3dcf9397 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/ExtensionFileFilter.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/ExtensionFileFilter.java
@@ -1,40 +1,40 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import javax.swing.filechooser.FileFilter;
-import java.io.File;
-
-/**
- * ExtensionFileFilter.
- *
- * Date: Sep 24, 2005
- * Time: 7:14:23 PM
- *
- * @author Hendrik Schreiber
- */
-public class ExtensionFileFilter extends FileFilter {
-
- public static final ExtensionFileFilter[] EXT_FILE_FILTERS = {
- new ExtensionFileFilter("txt"), new ExtensionFileFilter("gc"), new ExtensionFileFilter("log"),
- new ExtensionFileFilter("txt.gz"), new ExtensionFileFilter("gc.gz"), new ExtensionFileFilter("log.gz")
- };
-
- private final String extension;
-
- public ExtensionFileFilter(String extension) {
- this.extension = extension;
- }
-
- public boolean accept(File f) {
- // TODO: Can probably be refactored; seems to be the same as in Export class
- try {
- return f.isDirectory() || f.toString().toLowerCase().endsWith("." + extension);
- }
- catch (NullPointerException e) {
- return false;
- }
- }
-
- public String getDescription() {
- return "*." + extension;
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+/**
+ * ExtensionFileFilter.
+ *
+ * Date: Sep 24, 2005
+ * Time: 7:14:23 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class ExtensionFileFilter extends FileFilter {
+
+ public static final ExtensionFileFilter[] EXT_FILE_FILTERS = {
+ new ExtensionFileFilter("txt"), new ExtensionFileFilter("gc"), new ExtensionFileFilter("log"),
+ new ExtensionFileFilter("txt.gz"), new ExtensionFileFilter("gc.gz"), new ExtensionFileFilter("log.gz")
+ };
+
+ private final String extension;
+
+ public ExtensionFileFilter(String extension) {
+ this.extension = extension;
+ }
+
+ public boolean accept(File f) {
+ // TODO: Can probably be refactored; seems to be the same as in Export class
+ try {
+ return f.isDirectory() || f.toString().toLowerCase().endsWith("." + extension);
+ }
+ catch (NullPointerException e) {
+ return false;
+ }
+ }
+
+ public String getDescription() {
+ return "*." + extension;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/HttpUrlConnectionHelper.java b/src/main/java/com/tagtraum/perf/gcviewer/util/HttpUrlConnectionHelper.java
index 23da940d..541fd67d 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/HttpUrlConnectionHelper.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/HttpUrlConnectionHelper.java
@@ -1,143 +1,143 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.nio.charset.Charset;
-import java.util.Date;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.zip.GZIPInputStream;
-
-/**
- * Helper class dealing with opening an HttpURLConnection and it's error situations.
- *
- * @author Joerg Wuethrich
- * @author Hans Bausewein
- * created on: 18.09.2013
- */
-public class HttpUrlConnectionHelper {
-
- public static final String GZIP = "gzip";
-
- private static final Logger LOGGER = Logger.getLogger(HttpUrlConnectionHelper.class.getName());
- private static final String ACCEPT_ENCODING = "Accept-Encoding";
- private static final String CHARSET_KEY = "charset=";
-
- private HttpUrlConnectionHelper() {
- super();
- }
-
- private static InputStream checkContentDecodingForInputStream(InputStream in, final String contentEncoding) throws IOException {
- if (GZIP.equals(contentEncoding)) {
- in = new GZIPInputStream(in, 4096);
- }
- return in;
- }
-
- /**
- * Reads input stream into result and closes the stream.
- *
- * @param in content to read
- * @param contentEncoding optional encoding of stream (gzip)
- * @param contentType optional; if 'text/xx', may contain charset.
- * @return Content of InputStream or null if input is null
- */
- private static String readAndCloseErrorStream(InputStream in,
- final String contentEncoding,
- final String contentType) {
-
- String result = null;
-
- if (in != null) {
- try {
- in = checkContentDecodingForInputStream(in, contentEncoding);
- }
- catch(IOException e) {
- LOGGER.log(Level.FINE, contentEncoding + " read failed; try plain reading", e);;
- }
- // extract charset from content-type header
- // e.g. Content-Type: text/html; charset=ISO-8859-4
- Charset charSet = Charset.defaultCharset();
- int charSetIdx;
- if ((contentType != null) && ((charSetIdx = contentType.indexOf(CHARSET_KEY)) > 0)) {
- charSetIdx += CHARSET_KEY.length(); // skip
- final int nextSemicolon = contentType.indexOf(';', charSetIdx);
- final int endIndex = nextSemicolon < 0 ? contentType.length() : nextSemicolon;
- final String charSetName = contentType.substring(charSetIdx, endIndex);
- try {
- // if this fails, use the default character set.
- charSet = Charset.forName(charSetName);
- }
- catch(RuntimeException re) {
- LOGGER.fine("Failed to create CharSet from \"" + charSetName + "\":" + re.getMessage());
- }
- }
-
- StringBuilder sb = new StringBuilder();
-
- try (BufferedReader br = new BufferedReader(new InputStreamReader(in, charSet))) {
- String line;
- while ((line = br.readLine()) != null) {
- sb.append(line).append(System.lineSeparator());
- }
- }
- catch(IOException e) {
- LOGGER.log(Level.FINE, "readLine() from error page failed", e);
- }
-
- result = sb.toString();
- }
- return result;
- }
-
- /**
- * Sets request properties, connects and opens the input stream depending on the HTTP response.
- *
- * @param conn The HTTP connection
- * @param acceptEncoding Content-encoding (gzip,defate or null)
- * @return The input stream
- */
- public static InputStream openInputStream(final HttpURLConnection httpConn,
- final String acceptEncoding)
- throws IOException {
-
- // set request properties
- httpConn.setRequestProperty(ACCEPT_ENCODING, acceptEncoding);
- httpConn.setUseCaches(false);
- httpConn.connect();
- // from here we're reading the server's response
- final String contentEncoding = httpConn.getContentEncoding();
- final String contentType = httpConn.getContentType();
- final long contentLength = httpConn.getContentLengthLong();
- final long lastModified = httpConn.getLastModified();
- LOGGER.log(Level.INFO, "Reading " + (contentLength < 0L
- ? "?"
- : Long.toString(contentLength) ) + " bytes from " + httpConn.getURL() +
- "; contentType = " + contentType +
- "; contentEncoding = " + contentEncoding +
- "; last modified = " + (lastModified <= 0L ? "-" : new Date(lastModified).toString()));
-
- final int responseCode = httpConn.getResponseCode();
- if (responseCode/100 != 2) {
- final String responseMessage = httpConn.getResponseMessage();
- final String msg = "Server sent " + responseCode + ": " + responseMessage;
- LOGGER.info(msg);
- // NOTE: Apache gzips the error page if client sets Accept-Encoding header
- final String detailMsg = readAndCloseErrorStream(httpConn.getErrorStream(),
- contentEncoding,
- contentType);
-
- if (detailMsg != null) {
- LOGGER.fine(detailMsg);
- }
- throw new IOException(msg);
- }
- InputStream in = httpConn.getInputStream();
- in = checkContentDecodingForInputStream(in, contentEncoding);
- return in;
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.nio.charset.Charset;
+import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * Helper class dealing with opening an HttpURLConnection and it's error situations.
+ *
+ * @author Joerg Wuethrich
+ * @author Hans Bausewein
+ * created on: 18.09.2013
+ */
+public class HttpUrlConnectionHelper {
+
+ public static final String GZIP = "gzip";
+
+ private static final Logger LOGGER = Logger.getLogger(HttpUrlConnectionHelper.class.getName());
+ private static final String ACCEPT_ENCODING = "Accept-Encoding";
+ private static final String CHARSET_KEY = "charset=";
+
+ private HttpUrlConnectionHelper() {
+ super();
+ }
+
+ private static InputStream checkContentDecodingForInputStream(InputStream in, final String contentEncoding) throws IOException {
+ if (GZIP.equals(contentEncoding)) {
+ in = new GZIPInputStream(in, 4096);
+ }
+ return in;
+ }
+
+ /**
+ * Reads input stream into result and closes the stream.
+ *
+ * @param in content to read
+ * @param contentEncoding optional encoding of stream (gzip)
+ * @param contentType optional; if 'text/xx', may contain charset.
+ * @return Content of InputStream or null if input is null
+ */
+ private static String readAndCloseErrorStream(InputStream in,
+ final String contentEncoding,
+ final String contentType) {
+
+ String result = null;
+
+ if (in != null) {
+ try {
+ in = checkContentDecodingForInputStream(in, contentEncoding);
+ }
+ catch(IOException e) {
+ LOGGER.log(Level.FINE, contentEncoding + " read failed; try plain reading", e);;
+ }
+ // extract charset from content-type header
+ // e.g. Content-Type: text/html; charset=ISO-8859-4
+ Charset charSet = Charset.defaultCharset();
+ int charSetIdx;
+ if ((contentType != null) && ((charSetIdx = contentType.indexOf(CHARSET_KEY)) > 0)) {
+ charSetIdx += CHARSET_KEY.length(); // skip
+ final int nextSemicolon = contentType.indexOf(';', charSetIdx);
+ final int endIndex = nextSemicolon < 0 ? contentType.length() : nextSemicolon;
+ final String charSetName = contentType.substring(charSetIdx, endIndex);
+ try {
+ // if this fails, use the default character set.
+ charSet = Charset.forName(charSetName);
+ }
+ catch(RuntimeException re) {
+ LOGGER.fine("Failed to create CharSet from \"" + charSetName + "\":" + re.getMessage());
+ }
+ }
+
+ StringBuilder sb = new StringBuilder();
+
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(in, charSet))) {
+ String line;
+ while ((line = br.readLine()) != null) {
+ sb.append(line).append(System.lineSeparator());
+ }
+ }
+ catch(IOException e) {
+ LOGGER.log(Level.FINE, "readLine() from error page failed", e);
+ }
+
+ result = sb.toString();
+ }
+ return result;
+ }
+
+ /**
+ * Sets request properties, connects and opens the input stream depending on the HTTP response.
+ *
+ * @param conn The HTTP connection
+ * @param acceptEncoding Content-encoding (gzip,defate or null)
+ * @return The input stream
+ */
+ public static InputStream openInputStream(final HttpURLConnection httpConn,
+ final String acceptEncoding)
+ throws IOException {
+
+ // set request properties
+ httpConn.setRequestProperty(ACCEPT_ENCODING, acceptEncoding);
+ httpConn.setUseCaches(false);
+ httpConn.connect();
+ // from here we're reading the server's response
+ final String contentEncoding = httpConn.getContentEncoding();
+ final String contentType = httpConn.getContentType();
+ final long contentLength = httpConn.getContentLengthLong();
+ final long lastModified = httpConn.getLastModified();
+ LOGGER.log(Level.INFO, "Reading " + (contentLength < 0L
+ ? "?"
+ : Long.toString(contentLength) ) + " bytes from " + httpConn.getURL() +
+ "; contentType = " + contentType +
+ "; contentEncoding = " + contentEncoding +
+ "; last modified = " + (lastModified <= 0L ? "-" : new Date(lastModified).toString()));
+
+ final int responseCode = httpConn.getResponseCode();
+ if (responseCode/100 != 2) {
+ final String responseMessage = httpConn.getResponseMessage();
+ final String msg = "Server sent " + responseCode + ": " + responseMessage;
+ LOGGER.info(msg);
+ // NOTE: Apache gzips the error page if client sets Accept-Encoding header
+ final String detailMsg = readAndCloseErrorStream(httpConn.getErrorStream(),
+ contentEncoding,
+ contentType);
+
+ if (detailMsg != null) {
+ LOGGER.fine(detailMsg);
+ }
+ throw new IOException(msg);
+ }
+ InputStream in = httpConn.getInputStream();
+ in = checkContentDecodingForInputStream(in, contentEncoding);
+ return in;
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/LocalisationHelper.java b/src/main/java/com/tagtraum/perf/gcviewer/util/LocalisationHelper.java
index b36b7e26..56acd314 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/LocalisationHelper.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/LocalisationHelper.java
@@ -1,50 +1,50 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.text.MessageFormat;
-import java.util.ResourceBundle;
-
-/**
- * Helperclass to support localisation.
- *
- * @author Joerg Wuethrich
- * created on: 25.04.2013
- */
-public class LocalisationHelper {
- private static ResourceBundle resourceBundle;
- private static final Object[] EMPTY_ARRAY = new Object[]{};
-
- /**
- * Returns localised text as result of lookup with key
.
- *
- * @param key key to look up localised text for
- * @return localised text
- */
- public static String getString(String key) {
- return getString(key, EMPTY_ARRAY);
- }
-
- /**
- * Returns localised text as result of lookup with key
using values
- * as parameters for the text.
- *
- * @param key key to look up localised text for
- * @param values values to be inserted into the text
- * @return localised text
- */
- public static String getString(String key, Object... values) {
- if (getBundle().containsKey(key)) {
- return MessageFormat.format(getBundle().getString(key), values);
- }
- else {
- return "\"" + key + "\" not found";
- }
- }
-
- private static ResourceBundle getBundle() {
- if (resourceBundle == null) {
- resourceBundle = ResourceBundle.getBundle("com.tagtraum.perf.gcviewer.localStrings");
- }
-
- return resourceBundle;
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.text.MessageFormat;
+import java.util.ResourceBundle;
+
+/**
+ * Helperclass to support localisation.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.04.2013
+ */
+public class LocalisationHelper {
+ private static ResourceBundle resourceBundle;
+ private static final Object[] EMPTY_ARRAY = new Object[]{};
+
+ /**
+ * Returns localised text as result of lookup with key
.
+ *
+ * @param key key to look up localised text for
+ * @return localised text
+ */
+ public static String getString(String key) {
+ return getString(key, EMPTY_ARRAY);
+ }
+
+ /**
+ * Returns localised text as result of lookup with key
using values
+ * as parameters for the text.
+ *
+ * @param key key to look up localised text for
+ * @param values values to be inserted into the text
+ * @return localised text
+ */
+ public static String getString(String key, Object... values) {
+ if (getBundle().containsKey(key)) {
+ return MessageFormat.format(getBundle().getString(key), values);
+ }
+ else {
+ return "\"" + key + "\" not found";
+ }
+ }
+
+ private static ResourceBundle getBundle() {
+ if (resourceBundle == null) {
+ resourceBundle = ResourceBundle.getBundle("com.tagtraum.perf.gcviewer.localStrings");
+ }
+
+ return resourceBundle;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/LoggerHelper.java b/src/main/java/com/tagtraum/perf/gcviewer/util/LoggerHelper.java
index 37604bc5..aa3d8962 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/LoggerHelper.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/LoggerHelper.java
@@ -1,58 +1,58 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-/**
- * This class contains convenience methods to support logging.
- *
- * @author Joerg Wuethrich
- * created on: 26.02.2012
- */
-public class LoggerHelper {
-
- /**
- * Logs a given exception using the given logger
.
- *
- * @param logger logger of the class where the exception occurred
- * @param level level to be used
- * @param msg message to be logged
- * @param t exception thrown
- */
- public static void logException(Logger logger, Level level, String msg, Throwable t) {
- StackTraceElement callerStackTraceElement = getCallerStackTraceElement();
- if (callerStackTraceElement != null) {
- // using this stackTraceElements allows to log the message using the caller's class / method name
- logger.logp(level,
- callerStackTraceElement.getClassName(),
- callerStackTraceElement.getMethodName(),
- msg,
- t);
- }
- else {
- // we haven't found the caller, so just log what we have
- LogRecord logRecord = new LogRecord(level, msg);
- logRecord.setThrown(t);
- logger.log(logRecord);
- }
- }
-
- /**
- * Finds the first StackTraceElement outside this loggerHelper.
- */
- private static StackTraceElement getCallerStackTraceElement() {
- Throwable throwable = new Throwable();
-
- String logClassName = LoggerHelper.class.getName();
- for (StackTraceElement stackTraceElement : throwable.getStackTrace()) {
- String cname = stackTraceElement.getClassName();
- if (!cname.equals(logClassName)) {
- return stackTraceElement;
- }
- }
-
- // should not happen, but means that we haven't found a stackTraceElement outside this class
- return null;
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+/**
+ * This class contains convenience methods to support logging.
+ *
+ * @author Joerg Wuethrich
+ * created on: 26.02.2012
+ */
+public class LoggerHelper {
+
+ /**
+ * Logs a given exception using the given logger
.
+ *
+ * @param logger logger of the class where the exception occurred
+ * @param level level to be used
+ * @param msg message to be logged
+ * @param t exception thrown
+ */
+ public static void logException(Logger logger, Level level, String msg, Throwable t) {
+ StackTraceElement callerStackTraceElement = getCallerStackTraceElement();
+ if (callerStackTraceElement != null) {
+ // using this stackTraceElements allows to log the message using the caller's class / method name
+ logger.logp(level,
+ callerStackTraceElement.getClassName(),
+ callerStackTraceElement.getMethodName(),
+ msg,
+ t);
+ }
+ else {
+ // we haven't found the caller, so just log what we have
+ LogRecord logRecord = new LogRecord(level, msg);
+ logRecord.setThrown(t);
+ logger.log(logRecord);
+ }
+ }
+
+ /**
+ * Finds the first StackTraceElement outside this loggerHelper.
+ */
+ private static StackTraceElement getCallerStackTraceElement() {
+ Throwable throwable = new Throwable();
+
+ String logClassName = LoggerHelper.class.getName();
+ for (StackTraceElement stackTraceElement : throwable.getStackTrace()) {
+ String cname = stackTraceElement.getClassName();
+ if (!cname.equals(logClassName)) {
+ return stackTraceElement;
+ }
+ }
+
+ // should not happen, but means that we haven't found a stackTraceElement outside this class
+ return null;
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/MemoryFormat.java b/src/main/java/com/tagtraum/perf/gcviewer/util/MemoryFormat.java
index dd60baa3..dd0decbb 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/MemoryFormat.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/MemoryFormat.java
@@ -1,124 +1,124 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.text.NumberFormat;
-import java.text.FieldPosition;
-import java.text.ParsePosition;
-
-/**
- * MemoryFormat.
- *
- * Date: Sep 17, 2005
- * Time: 5:13:32 PM
- *
- * @author Hendrik Schreiber
- */
-public class MemoryFormat extends NumberFormat {
-
- private static final long serialVersionUID = 7269835290617687327L;
- protected static final long ONE_KB = 1024;
- protected static final long TEN_KB = ONE_KB * 10l;
- protected static final long ONE_MB = 1024l * ONE_KB;
- protected static final long TEN_MB = ONE_MB * 10;
- protected NumberFormat format = NumberFormat.getInstance();
-
- public MemoryFormat() {
- format.setMaximumFractionDigits(3);
- }
-
- public void setMaximumFractionDigits(int newValue) {
- format.setMaximumFractionDigits(newValue);
- }
-
- public StringBuffer format(double memInK, StringBuffer toAppendTo, FieldPosition pos) {
- final double bytes = memInK * ONE_KB;
- if (bytes >= TEN_MB) {
- format.format(bytes / ONE_MB, toAppendTo, pos);
- toAppendTo.append('M');
- }
- else if (bytes >= TEN_KB) {
- format.format(bytes / ONE_KB, toAppendTo, pos);
- toAppendTo.append('K');
- }
- else {
- int maxFrac = format.getMaximumFractionDigits();
- format.setMaximumFractionDigits(0);
- format.format(bytes, toAppendTo, pos);
- format.setMaximumFractionDigits(maxFrac);
- toAppendTo.append('B');
- }
- return toAppendTo;
- }
-
- public StringBuffer format(long memInK, StringBuffer toAppendTo, FieldPosition pos) {
- final double bytes = memInK * ONE_KB;
- if (bytes >= TEN_MB) {
- format.format(bytes / ONE_MB, toAppendTo, pos);
- toAppendTo.append('M');
- }
- else if (bytes >= TEN_KB) {
- format.format(bytes / ONE_KB, toAppendTo, pos);
- toAppendTo.append('K');
- }
- else {
- int maxFrac = format.getMaximumFractionDigits();
- format.setMaximumFractionDigits(0);
- format.format(bytes, toAppendTo, pos);
- format.setMaximumFractionDigits(maxFrac);
- toAppendTo.append('B');
- }
- return toAppendTo;
- }
-
- public Number parse(String source, ParsePosition parsePosition) {
- throw new RuntimeException("Not implemented.");
- }
-
-
- public FormattedValue formatToFormatted(double memInK) {
- StringBuffer toAppendTo = new StringBuffer();
- FieldPosition pos = new FieldPosition(0);
-
- FormattedValue formed = formatToFormatted(memInK, toAppendTo, pos, false);
-
- return formed;
- }
-
- protected FormattedValue formatToFormatted(double memInK, StringBuffer toAppendTo, FieldPosition pos, boolean bAppendUnits) {
-
- char units = ' ';
-
- int iOrigMaxFracDigits = format.getMaximumFractionDigits();
- int iOrigMinFracDigits = format.getMinimumFractionDigits();
- format.setMaximumFractionDigits(3);
- format.setMinimumFractionDigits(format.getMinimumFractionDigits());
-
- final double bytes = memInK * ONE_KB;
- if (bytes >= TEN_MB) {
- format.format(bytes / ONE_MB, toAppendTo, pos);
- units = 'M';
- if(bAppendUnits)
- toAppendTo.append(units);
- }
- else if (bytes >= TEN_KB) {
- format.format(bytes / ONE_KB, toAppendTo, pos);
- units = 'K';
- if(bAppendUnits)
- toAppendTo.append(units);
- }
- else {
- int maxFrac = format.getMaximumFractionDigits();
- format.setMaximumFractionDigits(0);
- format.format(bytes, toAppendTo, pos);
- format.setMaximumFractionDigits(maxFrac);
- units = 'B';
- if(bAppendUnits)
- toAppendTo.append(units);
- }
-
- format.setMaximumFractionDigits(iOrigMaxFracDigits);
- format.setMinimumFractionDigits(iOrigMinFracDigits);
-
- return new FormattedValue(toAppendTo, units);
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.text.NumberFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+
+/**
+ * MemoryFormat.
+ *
+ * Date: Sep 17, 2005
+ * Time: 5:13:32 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class MemoryFormat extends NumberFormat {
+
+ private static final long serialVersionUID = 7269835290617687327L;
+ protected static final long ONE_KB = 1024;
+ protected static final long TEN_KB = ONE_KB * 10l;
+ protected static final long ONE_MB = 1024l * ONE_KB;
+ protected static final long TEN_MB = ONE_MB * 10;
+ protected NumberFormat format = NumberFormat.getInstance();
+
+ public MemoryFormat() {
+ format.setMaximumFractionDigits(3);
+ }
+
+ public void setMaximumFractionDigits(int newValue) {
+ format.setMaximumFractionDigits(newValue);
+ }
+
+ public StringBuffer format(double memInK, StringBuffer toAppendTo, FieldPosition pos) {
+ final double bytes = memInK * ONE_KB;
+ if (bytes >= TEN_MB) {
+ format.format(bytes / ONE_MB, toAppendTo, pos);
+ toAppendTo.append('M');
+ }
+ else if (bytes >= TEN_KB) {
+ format.format(bytes / ONE_KB, toAppendTo, pos);
+ toAppendTo.append('K');
+ }
+ else {
+ int maxFrac = format.getMaximumFractionDigits();
+ format.setMaximumFractionDigits(0);
+ format.format(bytes, toAppendTo, pos);
+ format.setMaximumFractionDigits(maxFrac);
+ toAppendTo.append('B');
+ }
+ return toAppendTo;
+ }
+
+ public StringBuffer format(long memInK, StringBuffer toAppendTo, FieldPosition pos) {
+ final double bytes = memInK * ONE_KB;
+ if (bytes >= TEN_MB) {
+ format.format(bytes / ONE_MB, toAppendTo, pos);
+ toAppendTo.append('M');
+ }
+ else if (bytes >= TEN_KB) {
+ format.format(bytes / ONE_KB, toAppendTo, pos);
+ toAppendTo.append('K');
+ }
+ else {
+ int maxFrac = format.getMaximumFractionDigits();
+ format.setMaximumFractionDigits(0);
+ format.format(bytes, toAppendTo, pos);
+ format.setMaximumFractionDigits(maxFrac);
+ toAppendTo.append('B');
+ }
+ return toAppendTo;
+ }
+
+ public Number parse(String source, ParsePosition parsePosition) {
+ throw new RuntimeException("Not implemented.");
+ }
+
+
+ public FormattedValue formatToFormatted(double memInK) {
+ StringBuffer toAppendTo = new StringBuffer();
+ FieldPosition pos = new FieldPosition(0);
+
+ FormattedValue formed = formatToFormatted(memInK, toAppendTo, pos, false);
+
+ return formed;
+ }
+
+ protected FormattedValue formatToFormatted(double memInK, StringBuffer toAppendTo, FieldPosition pos, boolean bAppendUnits) {
+
+ char units = ' ';
+
+ int iOrigMaxFracDigits = format.getMaximumFractionDigits();
+ int iOrigMinFracDigits = format.getMinimumFractionDigits();
+ format.setMaximumFractionDigits(3);
+ format.setMinimumFractionDigits(format.getMinimumFractionDigits());
+
+ final double bytes = memInK * ONE_KB;
+ if (bytes >= TEN_MB) {
+ format.format(bytes / ONE_MB, toAppendTo, pos);
+ units = 'M';
+ if(bAppendUnits)
+ toAppendTo.append(units);
+ }
+ else if (bytes >= TEN_KB) {
+ format.format(bytes / ONE_KB, toAppendTo, pos);
+ units = 'K';
+ if(bAppendUnits)
+ toAppendTo.append(units);
+ }
+ else {
+ int maxFrac = format.getMaximumFractionDigits();
+ format.setMaximumFractionDigits(0);
+ format.format(bytes, toAppendTo, pos);
+ format.setMaximumFractionDigits(maxFrac);
+ units = 'B';
+ if(bAppendUnits)
+ toAppendTo.append(units);
+ }
+
+ format.setMaximumFractionDigits(iOrigMaxFracDigits);
+ format.setMinimumFractionDigits(iOrigMinFracDigits);
+
+ return new FormattedValue(toAppendTo, units);
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/NumberParser.java b/src/main/java/com/tagtraum/perf/gcviewer/util/NumberParser.java
index c0f3b4be..59a81ba3 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/NumberParser.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/NumberParser.java
@@ -1,225 +1,225 @@
-package com.tagtraum.perf.gcviewer.util;
-
-/**
- * Fast methods for parsing ints and longs.
- *
- * This class originally stems form the book "Performant Java Programmieren" by Hendrik Schreiber
- *
- * @author Hendrik Schreiber
- * @see "Performant Java Programmieren" by Hendrik Schreiber
- */
-public class NumberParser {
- // replace parseInt(String) with parseInt(CharSequence) in later version
- // replace parseLong(String) with parseLong(CharSequence) in later version
-
- public static final int MAX_NEGATIVE_INTEGER_CHARS = Integer.toString(Integer.MIN_VALUE).length();
- public static final int MAX_POSITIVE_INTEGER_CHARS = Integer.toString(Integer.MAX_VALUE).length();
-
- public static final int MAX_NEGATIVE_LONG_CHARS = Long.toString(Long.MIN_VALUE).length();
- public static final int MAX_POSITIVE_LONG_CHARS = Long.toString(Long.MAX_VALUE).length();
-
- public static int parseInt(char[] cb, int offset, int length ) throws NumberFormatException {
- if (cb == null) throw new NumberFormatException("null");
- int result = 0;
- boolean negative = false;
- int i = 0;
- int limit;
- int digit;
-
- if (length > 0) {
- if (cb[offset] == '-') {
- if (length > MAX_NEGATIVE_INTEGER_CHARS) throw new NumberFormatException(new String(cb, offset, length));
- negative = true;
- limit = Integer.MIN_VALUE;
- i++;
- } else {
- if (length > MAX_POSITIVE_INTEGER_CHARS) throw new NumberFormatException(new String(cb, offset, length));
- limit = -Integer.MAX_VALUE;
- }
- while (i < length) {
- digit = cb[offset + i++]-'0';
- if (digit < 0 || digit > 9) {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- result *= 10;
- if (result < limit + digit) {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- result -= digit;
- }
- } else {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- if (negative) {
- if (i > 1) {
- return result;
- } else {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- } else {
- return -result;
- }
- }
-
- public static int parseInt(String s) throws NumberFormatException {
- return parseInt(s, 0, s.length());
- }
-
- public static int parseInt(String s, int offset, int length) throws NumberFormatException {
- // for speed this is a copy of parseInt(string) instead of just using toCharArrays()...
- if (s == null) throw new NumberFormatException("null");
- int result = 0;
- boolean negative = false;
- int i = 0;
- int limit;
- int digit;
-
- if (length > 0) {
- if (s.charAt(offset) == '-') {
- if (length > MAX_NEGATIVE_INTEGER_CHARS) throw new NumberFormatException(s);
- negative = true;
- limit = Integer.MIN_VALUE;
- i++;
- } else {
- if (length > MAX_POSITIVE_INTEGER_CHARS) throw new NumberFormatException(s);
- limit = -Integer.MAX_VALUE;
- }
- while (i < length) {
- digit = s.charAt(offset + i++)-'0';
- if (digit < 0 || digit > 9) {
- throw new NumberFormatException(s);
- }
- result *= 10;
- if (result < limit + digit) {
- throw new NumberFormatException(s);
- }
- result -= digit;
- }
- } else {
- throw new NumberFormatException(s);
- }
- if (negative) {
- if (i > 1) {
- return result;
- } else {
- throw new NumberFormatException(s);
- }
- } else {
- return -result;
- }
- }
-
- public static long parseLong(String s) throws NumberFormatException {
- return parseLong(s, 0, s.length());
- }
-
- public static long parseLong(String s, int offset, int length) throws NumberFormatException {
- if (s == null) throw new NumberFormatException("null");
- long result = 0;
- boolean negative = false;
- int i = 0;
- long limit;
- int digit;
-
- if (length > 0) {
- if (s.charAt(offset) == '-') {
- // shortcut for ints
- if (length <= MAX_NEGATIVE_INTEGER_CHARS) return parseInt(s, offset, length);
- if (length > MAX_NEGATIVE_LONG_CHARS) throw new NumberFormatException(s);
- negative = true;
- limit = Long.MIN_VALUE;
- i++;
- } else {
- // shortcut for ints
- if (length <= MAX_POSITIVE_INTEGER_CHARS) return parseInt(s, offset, length);
- if (length > MAX_POSITIVE_LONG_CHARS) throw new NumberFormatException(s);
- limit = -Long.MAX_VALUE;
- }
- while (i < length) {
- digit = s.charAt(offset + i++)-'0';
- if (digit < 0 || digit > 9) {
- throw new NumberFormatException(s);
- }
- result *= 10L;
- if (result < limit + digit) {
- throw new NumberFormatException(s);
- }
- result -= digit;
- }
- } else {
- throw new NumberFormatException(s);
- }
- if (negative) {
- if (i > 1) {
- return result;
- } else {
- throw new NumberFormatException(s);
- }
- } else {
- return -result;
- }
- }
-
- public static long parseLong(char[] cb, int offset, int length) throws NumberFormatException {
- // for speed this is a copy of parseLong(string) instead of just using toCharArrays()...
- if (cb == null) throw new NumberFormatException("null");
- long result = 0;
- boolean negative = false;
- int i = 0;
- long limit;
- int digit;
-
- if (length > 0) {
- if (cb[offset] == '-') {
- // shortcut for ints
- if (length <= MAX_NEGATIVE_INTEGER_CHARS) return parseInt(cb, offset, length);
- if (length > MAX_NEGATIVE_LONG_CHARS) throw new NumberFormatException(new String(cb, offset, length));
- negative = true;
- limit = Long.MIN_VALUE;
- i++;
- } else {
- // shortcut for ints
- if (length <= MAX_POSITIVE_INTEGER_CHARS) return parseInt(cb, offset, length);
- if (length > MAX_POSITIVE_LONG_CHARS) throw new NumberFormatException(new String(cb, offset, length));
- limit = -Long.MAX_VALUE;
- }
- while (i < length) {
- digit = cb[offset + i++]-'0';
- if (digit < 0 || digit > 9) {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- result *= 10L;
- if (result < limit + digit) {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- result -= digit;
- }
- } else {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- if (negative) {
- if (i > 1) {
- return result;
- } else {
- throw new NumberFormatException(new String(cb, offset, length));
- }
- } else {
- return -result;
- }
- }
-
- public static double parseDouble(String s, int offset, int length) {
- // Currently, this method is unlikely to be as efficient as those above.
- // This logic is factored out so as to allow future optimisations. For
- // example, we might want to make some simplifying assumptions about the
- // kind of doubles present in GC logs.
-
- return parseDouble(s.substring(offset, offset + length));
- }
-
- public static double parseDouble (String s) {
- // replace "," with "." because doubles may only contain "."
- // some localized gc logs contain "," in pauses
- return Double.parseDouble(s.replace(",", "."));
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+/**
+ * Fast methods for parsing ints and longs.
+ *
+ * This class originally stems form the book "Performant Java Programmieren" by Hendrik Schreiber
+ *
+ * @author Hendrik Schreiber
+ * @see "Performant Java Programmieren" by Hendrik Schreiber
+ */
+public class NumberParser {
+ // replace parseInt(String) with parseInt(CharSequence) in later version
+ // replace parseLong(String) with parseLong(CharSequence) in later version
+
+ public static final int MAX_NEGATIVE_INTEGER_CHARS = Integer.toString(Integer.MIN_VALUE).length();
+ public static final int MAX_POSITIVE_INTEGER_CHARS = Integer.toString(Integer.MAX_VALUE).length();
+
+ public static final int MAX_NEGATIVE_LONG_CHARS = Long.toString(Long.MIN_VALUE).length();
+ public static final int MAX_POSITIVE_LONG_CHARS = Long.toString(Long.MAX_VALUE).length();
+
+ public static int parseInt(char[] cb, int offset, int length ) throws NumberFormatException {
+ if (cb == null) throw new NumberFormatException("null");
+ int result = 0;
+ boolean negative = false;
+ int i = 0;
+ int limit;
+ int digit;
+
+ if (length > 0) {
+ if (cb[offset] == '-') {
+ if (length > MAX_NEGATIVE_INTEGER_CHARS) throw new NumberFormatException(new String(cb, offset, length));
+ negative = true;
+ limit = Integer.MIN_VALUE;
+ i++;
+ } else {
+ if (length > MAX_POSITIVE_INTEGER_CHARS) throw new NumberFormatException(new String(cb, offset, length));
+ limit = -Integer.MAX_VALUE;
+ }
+ while (i < length) {
+ digit = cb[offset + i++]-'0';
+ if (digit < 0 || digit > 9) {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ result *= 10;
+ if (result < limit + digit) {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ result -= digit;
+ }
+ } else {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ if (negative) {
+ if (i > 1) {
+ return result;
+ } else {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ } else {
+ return -result;
+ }
+ }
+
+ public static int parseInt(String s) throws NumberFormatException {
+ return parseInt(s, 0, s.length());
+ }
+
+ public static int parseInt(String s, int offset, int length) throws NumberFormatException {
+ // for speed this is a copy of parseInt(string) instead of just using toCharArrays()...
+ if (s == null) throw new NumberFormatException("null");
+ int result = 0;
+ boolean negative = false;
+ int i = 0;
+ int limit;
+ int digit;
+
+ if (length > 0) {
+ if (s.charAt(offset) == '-') {
+ if (length > MAX_NEGATIVE_INTEGER_CHARS) throw new NumberFormatException(s);
+ negative = true;
+ limit = Integer.MIN_VALUE;
+ i++;
+ } else {
+ if (length > MAX_POSITIVE_INTEGER_CHARS) throw new NumberFormatException(s);
+ limit = -Integer.MAX_VALUE;
+ }
+ while (i < length) {
+ digit = s.charAt(offset + i++)-'0';
+ if (digit < 0 || digit > 9) {
+ throw new NumberFormatException(s);
+ }
+ result *= 10;
+ if (result < limit + digit) {
+ throw new NumberFormatException(s);
+ }
+ result -= digit;
+ }
+ } else {
+ throw new NumberFormatException(s);
+ }
+ if (negative) {
+ if (i > 1) {
+ return result;
+ } else {
+ throw new NumberFormatException(s);
+ }
+ } else {
+ return -result;
+ }
+ }
+
+ public static long parseLong(String s) throws NumberFormatException {
+ return parseLong(s, 0, s.length());
+ }
+
+ public static long parseLong(String s, int offset, int length) throws NumberFormatException {
+ if (s == null) throw new NumberFormatException("null");
+ long result = 0;
+ boolean negative = false;
+ int i = 0;
+ long limit;
+ int digit;
+
+ if (length > 0) {
+ if (s.charAt(offset) == '-') {
+ // shortcut for ints
+ if (length <= MAX_NEGATIVE_INTEGER_CHARS) return parseInt(s, offset, length);
+ if (length > MAX_NEGATIVE_LONG_CHARS) throw new NumberFormatException(s);
+ negative = true;
+ limit = Long.MIN_VALUE;
+ i++;
+ } else {
+ // shortcut for ints
+ if (length <= MAX_POSITIVE_INTEGER_CHARS) return parseInt(s, offset, length);
+ if (length > MAX_POSITIVE_LONG_CHARS) throw new NumberFormatException(s);
+ limit = -Long.MAX_VALUE;
+ }
+ while (i < length) {
+ digit = s.charAt(offset + i++)-'0';
+ if (digit < 0 || digit > 9) {
+ throw new NumberFormatException(s);
+ }
+ result *= 10L;
+ if (result < limit + digit) {
+ throw new NumberFormatException(s);
+ }
+ result -= digit;
+ }
+ } else {
+ throw new NumberFormatException(s);
+ }
+ if (negative) {
+ if (i > 1) {
+ return result;
+ } else {
+ throw new NumberFormatException(s);
+ }
+ } else {
+ return -result;
+ }
+ }
+
+ public static long parseLong(char[] cb, int offset, int length) throws NumberFormatException {
+ // for speed this is a copy of parseLong(string) instead of just using toCharArrays()...
+ if (cb == null) throw new NumberFormatException("null");
+ long result = 0;
+ boolean negative = false;
+ int i = 0;
+ long limit;
+ int digit;
+
+ if (length > 0) {
+ if (cb[offset] == '-') {
+ // shortcut for ints
+ if (length <= MAX_NEGATIVE_INTEGER_CHARS) return parseInt(cb, offset, length);
+ if (length > MAX_NEGATIVE_LONG_CHARS) throw new NumberFormatException(new String(cb, offset, length));
+ negative = true;
+ limit = Long.MIN_VALUE;
+ i++;
+ } else {
+ // shortcut for ints
+ if (length <= MAX_POSITIVE_INTEGER_CHARS) return parseInt(cb, offset, length);
+ if (length > MAX_POSITIVE_LONG_CHARS) throw new NumberFormatException(new String(cb, offset, length));
+ limit = -Long.MAX_VALUE;
+ }
+ while (i < length) {
+ digit = cb[offset + i++]-'0';
+ if (digit < 0 || digit > 9) {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ result *= 10L;
+ if (result < limit + digit) {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ result -= digit;
+ }
+ } else {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ if (negative) {
+ if (i > 1) {
+ return result;
+ } else {
+ throw new NumberFormatException(new String(cb, offset, length));
+ }
+ } else {
+ return -result;
+ }
+ }
+
+ public static double parseDouble(String s, int offset, int length) {
+ // Currently, this method is unlikely to be as efficient as those above.
+ // This logic is factored out so as to allow future optimisations. For
+ // example, we might want to make some simplifying assumptions about the
+ // kind of doubles present in GC logs.
+
+ return parseDouble(s.substring(offset, offset + length));
+ }
+
+ public static double parseDouble (String s) {
+ // replace "," with "." because doubles may only contain "."
+ // some localized gc logs contain "," in pauses
+ return Double.parseDouble(s.replace(",", "."));
+ }
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/ParseInformation.java b/src/main/java/com/tagtraum/perf/gcviewer/util/ParseInformation.java
index 260c0352..5ab09b3f 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/ParseInformation.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/ParseInformation.java
@@ -1,37 +1,37 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.text.ParsePosition;
-import java.util.Date;
-
-/**
- * This class holds information about the current parsing process.
- *
- * @author Hendrik Schreiber
- * @author Joerg Wuethrich
- */
-public class ParseInformation extends ParsePosition {
-
- private Date firstDateStamp;
- private int lineNumber;
-
- public ParseInformation(int index) {
- super(index);
- }
-
- public Date getFirstDateStamp() {
- return firstDateStamp;
- }
-
- public int getLineNumber() {
- return lineNumber;
- }
-
- public void setFirstDateStamp(Date firstDateStamp) {
- this.firstDateStamp = firstDateStamp;
- }
-
- public void setLineNumber(int lineNumber) {
- this.lineNumber = lineNumber;
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.text.ParsePosition;
+import java.util.Date;
+
+/**
+ * This class holds information about the current parsing process.
+ *
+ * @author Hendrik Schreiber
+ * @author Joerg Wuethrich
+ */
+public class ParseInformation extends ParsePosition {
+
+ private Date firstDateStamp;
+ private int lineNumber;
+
+ public ParseInformation(int index) {
+ super(index);
+ }
+
+ public Date getFirstDateStamp() {
+ return firstDateStamp;
+ }
+
+ public int getLineNumber() {
+ return lineNumber;
+ }
+
+ public void setFirstDateStamp(Date firstDateStamp) {
+ this.firstDateStamp = firstDateStamp;
+ }
+
+ public void setLineNumber(int lineNumber) {
+ this.lineNumber = lineNumber;
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/TimeFormat.java b/src/main/java/com/tagtraum/perf/gcviewer/util/TimeFormat.java
index f9909c21..4c1e32cc 100755
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/TimeFormat.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/TimeFormat.java
@@ -1,76 +1,76 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.text.DateFormat;
-import java.text.FieldPosition;
-import java.text.ParsePosition;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
-
-/**
- * TimeStampFormatter.
- *
- * Date: Sep 17, 2005
- * Time: 1:01:13 PM
- *
- * @author Hendrik Schreiber
- */
-public class TimeFormat extends DateFormat {
-
- private static final long ONE_SECOND = 1000l;
- private static final long ONE_MINUTE = ONE_SECOND * 60l;
- private static final long ONE_HOUR = ONE_MINUTE * 60l;
- private static final long ONE_DAY = ONE_HOUR * 24l;
-
- private SimpleDateFormat millisFormat = new SimpleDateFormat("S");
- private SimpleDateFormat secondsFormat = new SimpleDateFormat("s's'");
- private SimpleDateFormat minuteFormat = new SimpleDateFormat("m'm'");
- private SimpleDateFormat hourFormat = new SimpleDateFormat("H'h'");
- private DateFormat fullFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
-
- public TimeFormat() {
- final TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
- millisFormat.setTimeZone(utcTimeZone);
- minuteFormat.setTimeZone(utcTimeZone);
- hourFormat.setTimeZone(utcTimeZone);
- }
-
- //@author sean
- public FormattedValue formatToFormatted(Date date) {
- StringBuffer appendTo = new StringBuffer();
- appendTo.append(date.getTime() / ONE_SECOND);
- FormattedValue formed = new FormattedValue(appendTo, "s");
- return formed;
- }
-
- public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
- long time = date.getTime();
- if (time >= ONE_DAY * 365) {
- return fullFormat.format(date, toAppendTo, fieldPosition);
- }
- if (time >= ONE_DAY * 3) {
- toAppendTo.append(time / ONE_DAY);
- toAppendTo.append('d');
- if (time % ONE_DAY != 0) {
- hourFormat.format(date, toAppendTo, fieldPosition);
- }
- }
- else if (time >= ONE_HOUR) {
- toAppendTo.append(time / ONE_HOUR);
- toAppendTo.append('h');
- }
-
- if (time >= ONE_MINUTE && time % ONE_HOUR !=0) {
- minuteFormat.format(date, toAppendTo, fieldPosition);
- }
- if (time >= ONE_SECOND && time % ONE_MINUTE !=0) {
- secondsFormat.format(date, toAppendTo, fieldPosition);
- }
- return toAppendTo;
- }
-
- public Date parse(String source, ParsePosition pos) {
- throw new RuntimeException("Not implemented.");
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * TimeStampFormatter.
+ *
+ * Date: Sep 17, 2005
+ * Time: 1:01:13 PM
+ *
+ * @author Hendrik Schreiber
+ */
+public class TimeFormat extends DateFormat {
+
+ private static final long ONE_SECOND = 1000l;
+ private static final long ONE_MINUTE = ONE_SECOND * 60l;
+ private static final long ONE_HOUR = ONE_MINUTE * 60l;
+ private static final long ONE_DAY = ONE_HOUR * 24l;
+
+ private SimpleDateFormat millisFormat = new SimpleDateFormat("S");
+ private SimpleDateFormat secondsFormat = new SimpleDateFormat("s's'");
+ private SimpleDateFormat minuteFormat = new SimpleDateFormat("m'm'");
+ private SimpleDateFormat hourFormat = new SimpleDateFormat("H'h'");
+ private DateFormat fullFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
+
+ public TimeFormat() {
+ final TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
+ millisFormat.setTimeZone(utcTimeZone);
+ minuteFormat.setTimeZone(utcTimeZone);
+ hourFormat.setTimeZone(utcTimeZone);
+ }
+
+ //@author sean
+ public FormattedValue formatToFormatted(Date date) {
+ StringBuffer appendTo = new StringBuffer();
+ appendTo.append(date.getTime() / ONE_SECOND);
+ FormattedValue formed = new FormattedValue(appendTo, "s");
+ return formed;
+ }
+
+ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+ long time = date.getTime();
+ if (time >= ONE_DAY * 365) {
+ return fullFormat.format(date, toAppendTo, fieldPosition);
+ }
+ if (time >= ONE_DAY * 3) {
+ toAppendTo.append(time / ONE_DAY);
+ toAppendTo.append('d');
+ if (time % ONE_DAY != 0) {
+ hourFormat.format(date, toAppendTo, fieldPosition);
+ }
+ }
+ else if (time >= ONE_HOUR) {
+ toAppendTo.append(time / ONE_HOUR);
+ toAppendTo.append('h');
+ }
+
+ if (time >= ONE_MINUTE && time % ONE_HOUR !=0) {
+ minuteFormat.format(date, toAppendTo, fieldPosition);
+ }
+ if (time >= ONE_SECOND && time % ONE_MINUTE !=0) {
+ secondsFormat.format(date, toAppendTo, fieldPosition);
+ }
+ return toAppendTo;
+ }
+
+ public Date parse(String source, ParsePosition pos) {
+ throw new RuntimeException("Not implemented.");
+ }
+
+}
diff --git a/src/main/java/com/tagtraum/perf/gcviewer/util/UrlDisplayHelper.java b/src/main/java/com/tagtraum/perf/gcviewer/util/UrlDisplayHelper.java
index a3222e04..3db71f70 100644
--- a/src/main/java/com/tagtraum/perf/gcviewer/util/UrlDisplayHelper.java
+++ b/src/main/java/com/tagtraum/perf/gcviewer/util/UrlDisplayHelper.java
@@ -1,60 +1,60 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import java.awt.Component;
-import java.awt.Desktop;
-import java.awt.Desktop.Action;
-import java.awt.Frame;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-
-import javax.swing.JOptionPane;
-
-/**
- * Helperclass to display urls in a browser on all platforms.
- *
- * @author Joerg Wuethrich
- * created on: 25.04.2013
- *
- */
-public class UrlDisplayHelper {
- /**
- * Returns true
if the platform supports displaying of urls.
- *
- * @return true
if displaying of urls is supported
- */
- public static boolean displayUrlIsSupported() {
- return Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.BROWSE);
- }
-
- /**
- * Display given url
in the default browser. If this action is not supported
- * a message dialog with an error message is displayed.
- *
- * @param parent parent for error message dialog
- * @param url url to be displayed
- */
- public static void displayUrl(Component parent, String url) {
- try {
- Desktop.getDesktop().browse(URI.create(url));
- }
- catch (IOException | IllegalArgumentException | NullPointerException e) {
- e.printStackTrace();
- // TODO localize!
- JOptionPane.showMessageDialog(parent,
- "oops - could not show url ('" + url + "'): " + e.toString(),
- "oops",
- JOptionPane.ERROR_MESSAGE | JOptionPane.OK_OPTION);
- }
- }
-
- /**
- * Convenience method to display an url.
- *
- * @see #displayUrl(Frame, String)
- */
- public static void displayUrl(Component parent, URL url) {
- displayUrl(parent, url.toString());
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import java.awt.Component;
+import java.awt.Desktop;
+import java.awt.Desktop.Action;
+import java.awt.Frame;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+
+import javax.swing.JOptionPane;
+
+/**
+ * Helperclass to display urls in a browser on all platforms.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.04.2013
+ *
+ */
+public class UrlDisplayHelper {
+ /**
+ * Returns true
if the platform supports displaying of urls.
+ *
+ * @return true
if displaying of urls is supported
+ */
+ public static boolean displayUrlIsSupported() {
+ return Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Action.BROWSE);
+ }
+
+ /**
+ * Display given url
in the default browser. If this action is not supported
+ * a message dialog with an error message is displayed.
+ *
+ * @param parent parent for error message dialog
+ * @param url url to be displayed
+ */
+ public static void displayUrl(Component parent, String url) {
+ try {
+ Desktop.getDesktop().browse(URI.create(url));
+ }
+ catch (IOException | IllegalArgumentException | NullPointerException e) {
+ e.printStackTrace();
+ // TODO localize!
+ JOptionPane.showMessageDialog(parent,
+ "oops - could not show url ('" + url + "'): " + e.toString(),
+ "oops",
+ JOptionPane.ERROR_MESSAGE | JOptionPane.OK_OPTION);
+ }
+ }
+
+ /**
+ * Convenience method to display an url.
+ *
+ * @see #displayUrl(Frame, String)
+ */
+ public static void displayUrl(Component parent, URL url) {
+ displayUrl(parent, url.toString());
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/GCOutputProducer.java b/src/test/java/com/tagtraum/perf/gcviewer/GCOutputProducer.java
index 16f709a6..ddb9ec6a 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/GCOutputProducer.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/GCOutputProducer.java
@@ -1,62 +1,62 @@
-package com.tagtraum.perf.gcviewer;
-
-import java.util.Arrays;
-
-/**
- * Created by IntelliJ IDEA.
- * User: hendrik
- * Date: May 31, 2005
- * Time: 3:41:14 PM
- * To change this template use File | Settings | File Templates.
- */
-public class GCOutputProducer {
-
- // = 64kb for the array and 2kb for each object = 32MB
- private static Object[] longLived = new Object[16 * 1024];
- private static int longLivedPos;
- // = 8kb for the array and 2kb for each object = 4096KB
- private static Object[] shortLived = new Object[2 * 1024];
- private static int shortLivedPos;
- private static final int SHORTLIVED_INTERVAL = shortLived.length/4;
- private static final int LONGLIVED_INTERVAL = longLived.length/512;
-
- public static void main(final String[] args) {
- while (true) {
- allocateShortLived();
- allocateLongLived();
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
-
- private static void allocateLongLived() {
- longLivedPos = longLivedPos % longLived.length;
- for (int i=longLivedPos; iJoerg Wuethrich
- * created on: 25.01.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- ModelPanelTest.class,
- ModelChartImplTest.class,
- TestBuildInfoReader.class,
- TestAllExp.class,
- TestAllImp.class,
- TestAllMath.class,
- TestAllModel.class,
- TestAllUtil.class,
- TestGCViewerArgsParser.class
-})
-public class TestAll {
-}
+package com.tagtraum.perf.gcviewer;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+import com.tagtraum.perf.gcviewer.exp.TestAllExp;
+import com.tagtraum.perf.gcviewer.imp.TestAllImp;
+import com.tagtraum.perf.gcviewer.math.TestAllMath;
+import com.tagtraum.perf.gcviewer.model.TestAllModel;
+import com.tagtraum.perf.gcviewer.util.TestAllUtil;
+
+/**
+ * TestSuite in JUnit 4 style; points to all testcases, that should be run.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.01.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ ModelPanelTest.class,
+ ModelChartImplTest.class,
+ TestBuildInfoReader.class,
+ TestAllExp.class,
+ TestAllImp.class,
+ TestAllMath.class,
+ TestAllModel.class,
+ TestAllUtil.class,
+ TestGCViewerArgsParser.class
+})
+public class TestAll {
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/TestBuildInfoReader.java b/src/test/java/com/tagtraum/perf/gcviewer/TestBuildInfoReader.java
index c1c10848..7e4e9525 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/TestBuildInfoReader.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/TestBuildInfoReader.java
@@ -1,34 +1,34 @@
-package com.tagtraum.perf.gcviewer;
-
-import static org.hamcrest.Matchers.isEmptyOrNullString;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.util.BuildInfoReader;
-
-/**
- * Tests the class {@link BuildInfoReader} - makes sure that the properties from the file
- * can be read.
- *
- * @author Joerg Wuethrich
- * created on: 05.12.2012
- */
-public class TestBuildInfoReader {
-
- @Test
- public void readVersion() {
- String version = BuildInfoReader.getVersion();
- assertThat("version", version, notNullValue());
- assertThat("must not be empty", version, not(isEmptyOrNullString()));
- }
-
- @Test
- public void readBuildDate() {
- String buildDate = BuildInfoReader.getBuildDate();
- assertThat("buildDate", buildDate, notNullValue());
- assertThat("must not be empty", buildDate, not(isEmptyOrNullString()));
- }
-}
+package com.tagtraum.perf.gcviewer;
+
+import static org.hamcrest.Matchers.isEmptyOrNullString;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.util.BuildInfoReader;
+
+/**
+ * Tests the class {@link BuildInfoReader} - makes sure that the properties from the file
+ * can be read.
+ *
+ * @author Joerg Wuethrich
+ * created on: 05.12.2012
+ */
+public class TestBuildInfoReader {
+
+ @Test
+ public void readVersion() {
+ String version = BuildInfoReader.getVersion();
+ assertThat("version", version, notNullValue());
+ assertThat("must not be empty", version, not(isEmptyOrNullString()));
+ }
+
+ @Test
+ public void readBuildDate() {
+ String buildDate = BuildInfoReader.getBuildDate();
+ assertThat("buildDate", buildDate, notNullValue());
+ assertThat("must not be empty", buildDate, not(isEmptyOrNullString()));
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/TestGCViewerArgsParser.java b/src/test/java/com/tagtraum/perf/gcviewer/TestGCViewerArgsParser.java
index e1951fcf..10a5fe6c 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/TestGCViewerArgsParser.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/TestGCViewerArgsParser.java
@@ -1,89 +1,89 @@
-package com.tagtraum.perf.gcviewer;
-
-import static org.hamcrest.Matchers.startsWith;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.exp.DataWriterType;
-
-/**
- * Tests the class {@link com.tagtraum.perf.gcviewer.GCViewerArgsParser}
- * - makes sure that argument inputs parse correctly
- *
- * @author Samuel Mendenhall
- * created on: 06.09.2014
- */
-public class TestGCViewerArgsParser {
-
- @Test
- public void noArguments() throws Exception {
- String[] args = {};
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
-
- assertEquals(gcViewerArgsParser.getArgumentCount(), 0);
- assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
- }
-
- @Test
- public void onlyGCLog() throws Exception {
- String[] args = {"some_gc.log"};
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
-
- assertEquals(gcViewerArgsParser.getArgumentCount(), 1);
- assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
- assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
- }
-
- @Test
- public void gcAndExportFile() throws Exception {
- String[] args = {"some_gc.log", "export_to.csv"};
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
-
- assertEquals(gcViewerArgsParser.getArgumentCount(), 2);
- assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
- assertEquals(gcViewerArgsParser.getSummaryFilePath(), "export_to.csv");
- assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
- }
-
- @Test
- public void onlyType() throws Exception {
- String[] args = {"-t", "CSV_TS"};
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
-
- assertEquals(gcViewerArgsParser.getArgumentCount(), 0);
- assertEquals(gcViewerArgsParser.getType(), DataWriterType.CSV_TS);
- }
-
- @Test
- public void allInitialArgsWithType() throws Exception {
- String[] args = {"some_gc.log", "export_to.csv", "the_chart.png", "-t", "CSV"};
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
-
- assertEquals(gcViewerArgsParser.getArgumentCount(), 3);
- assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
- assertEquals(gcViewerArgsParser.getSummaryFilePath(), "export_to.csv");
- assertEquals(gcViewerArgsParser.getChartFilePath(), "the_chart.png");
- assertEquals(gcViewerArgsParser.getType(), DataWriterType.CSV);
- }
-
- @Test
- public void illegalType() {
- String[] args = {"some_gc.log", "export_to.csv", "the_chart.png", "-t", "ILLEGAL"};
- try {
- GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
- gcViewerArgsParser.parseArguments(args);
- fail("GCVIewerArgsParserException expected");
- }
- catch (GCViewerArgsParserException e) {
- assertThat("exception message", e.getMessage(), startsWith("Illegal type 'ILLEGAL'"));
- }
- }
-}
+package com.tagtraum.perf.gcviewer;
+
+import static org.hamcrest.Matchers.startsWith;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.exp.DataWriterType;
+
+/**
+ * Tests the class {@link com.tagtraum.perf.gcviewer.GCViewerArgsParser}
+ * - makes sure that argument inputs parse correctly
+ *
+ * @author Samuel Mendenhall
+ * created on: 06.09.2014
+ */
+public class TestGCViewerArgsParser {
+
+ @Test
+ public void noArguments() throws Exception {
+ String[] args = {};
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+
+ assertEquals(gcViewerArgsParser.getArgumentCount(), 0);
+ assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
+ }
+
+ @Test
+ public void onlyGCLog() throws Exception {
+ String[] args = {"some_gc.log"};
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+
+ assertEquals(gcViewerArgsParser.getArgumentCount(), 1);
+ assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
+ assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
+ }
+
+ @Test
+ public void gcAndExportFile() throws Exception {
+ String[] args = {"some_gc.log", "export_to.csv"};
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+
+ assertEquals(gcViewerArgsParser.getArgumentCount(), 2);
+ assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
+ assertEquals(gcViewerArgsParser.getSummaryFilePath(), "export_to.csv");
+ assertEquals(gcViewerArgsParser.getType(), DataWriterType.SUMMARY);
+ }
+
+ @Test
+ public void onlyType() throws Exception {
+ String[] args = {"-t", "CSV_TS"};
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+
+ assertEquals(gcViewerArgsParser.getArgumentCount(), 0);
+ assertEquals(gcViewerArgsParser.getType(), DataWriterType.CSV_TS);
+ }
+
+ @Test
+ public void allInitialArgsWithType() throws Exception {
+ String[] args = {"some_gc.log", "export_to.csv", "the_chart.png", "-t", "CSV"};
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+
+ assertEquals(gcViewerArgsParser.getArgumentCount(), 3);
+ assertEquals(gcViewerArgsParser.getGcfile(), "some_gc.log");
+ assertEquals(gcViewerArgsParser.getSummaryFilePath(), "export_to.csv");
+ assertEquals(gcViewerArgsParser.getChartFilePath(), "the_chart.png");
+ assertEquals(gcViewerArgsParser.getType(), DataWriterType.CSV);
+ }
+
+ @Test
+ public void illegalType() {
+ String[] args = {"some_gc.log", "export_to.csv", "the_chart.png", "-t", "ILLEGAL"};
+ try {
+ GCViewerArgsParser gcViewerArgsParser = new GCViewerArgsParser();
+ gcViewerArgsParser.parseArguments(args);
+ fail("GCVIewerArgsParserException expected");
+ }
+ catch (GCViewerArgsParserException e) {
+ assertThat("exception message", e.getMessage(), startsWith("Illegal type 'ILLEGAL'"));
+ }
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/exp/TestAllExp.java b/src/test/java/com/tagtraum/perf/gcviewer/exp/TestAllExp.java
index 870f3217..53e9ba42 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/exp/TestAllExp.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/exp/TestAllExp.java
@@ -1,18 +1,18 @@
-package com.tagtraum.perf.gcviewer.exp;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * TestSuite in JUnit 4 style for all tests of the exp(ort) package.
- *
- * @author Joerg Wuethrich
- * created on: 09.12.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
-SimpleGcWriterTest.class
-})
-public class TestAllExp {
-
-}
+package com.tagtraum.perf.gcviewer.exp;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * TestSuite in JUnit 4 style for all tests of the exp(ort) package.
+ *
+ * @author Joerg Wuethrich
+ * created on: 09.12.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+SimpleGcWriterTest.class
+})
+public class TestAllExp {
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAbstractDataReaderSun.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAbstractDataReaderSun.java
index 9c84816b..6524fadd 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAbstractDataReaderSun.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAbstractDataReaderSun.java
@@ -1,125 +1,125 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-import com.tagtraum.perf.gcviewer.util.ParseInformation;
-
-public class TestAbstractDataReaderSun {
-
- private AbstractDataReaderSunSub dataReader;
-
- @Before
- public void setUp() throws UnsupportedEncodingException {
- dataReader = new AbstractDataReaderSunSub(new ByteArrayInputStream(new byte[0]), GcLogType.SUN1_6);
- }
-
- /**
- * Tests parsing of memory information like 8192K(16M)->7895K(16M)
- */
- @Test
- public void setMemorySimplePreUsed_heap_postUsed_heap() throws ParseException {
- String line = " [Eden: 1000K(2000K)->0B(3000K) Survivors: 1024B->4000K Heap: 5000K(16M)->6000K(16M)]";
-
- ParseInformation pos = new ParseInformation(0);
- pos.setIndex(line.indexOf("Heap:") + "Heap:".length() + 1);
-
- GCEvent event = new GCEvent();
- dataReader.setMemoryExtended(event, line, pos);
-
- assertEquals("heap before", 5000, event.getPreUsed());
- assertEquals("heap after", 6000, event.getPostUsed());
- assertEquals("heap total", 16*1024, event.getTotal());
- }
-
- /**
- * Tests parsing of memory information like 8192K->7895K(16M)
- */
- @Test
- public void setMemorySimplePreUsed_postUsed_heap() throws ParseException {
- String line = " [ 8192K->8128K(64M)]";
-
- ParseInformation pos = new ParseInformation(0);
- pos.setIndex(line.indexOf("[") + 1);
-
- GCEvent event = new GCEvent();
- dataReader.setMemoryExtended(event, line, pos);
-
- assertEquals("heap before", 8192, event.getPreUsed());
- assertEquals("heap after", 8128, event.getPostUsed());
- assertEquals("heap total", 64*1024, event.getTotal());
- }
-
- /**
- * Tests parsing of memory information like 8192K->7895K (usually found in G1 Survivors block)
- */
- @Test
- public void setMemorySimplePreHeap_postHeap() throws ParseException {
- String line = " [Eden: 1000K(2000K)->0B(3000K) Survivors: 1024B->4000K Heap: 5000K(16M)->6000K(16M)]";
-
- ParseInformation pos = new ParseInformation(0);
- pos.setIndex(line.indexOf("Survivors:") + "Survivors:".length() + 1);
-
- GCEvent event = new GCEvent();
- dataReader.setMemoryExtended(event, line, pos);
-
- assertEquals("heap before", 1, event.getPreUsed());
- assertEquals("heap after", 4000, event.getPostUsed());
- }
-
- /**
- * Tests parsing of memory information like "118.5M(118.0M)->128.4K(112.0M)" (notice the dots).
- */
- @Test
- public void setExtendedMemoryFloatingPointPreEden_postEden() throws ParseException {
- String line = " [Eden: 118.5M(118.0M)->128.4K(112.0M) Survivors: 10.0M->16.0M Heap: 548.6M(640.0M)->440.6M(640.0M)]";
-
- ParseInformation pos = new ParseInformation(0);
- pos.setIndex(line.indexOf("Eden:") + "Eden:".length() + 1);
-
- GCEvent event = new GCEvent();
- dataReader.setMemoryExtended(event, line, pos);
-
- assertEquals("heap before", 121344, event.getPreUsed());
- assertEquals("heap after", 128, event.getPostUsed());
- }
-
- /**
- * Subclass of {@link AbstractDataReaderSun} which makes those methods public, I want to test here.
- *
- * @author Joerg Wuethrich
- * created on: 28.02.2012
- */
- private class AbstractDataReaderSunSub extends AbstractDataReaderSun {
-
- public AbstractDataReaderSunSub(InputStream in, GcLogType gcLogType) throws UnsupportedEncodingException {
- super(in, gcLogType);
- }
-
- @Override
- public void setMemoryExtended(GCEvent event, String line, ParseInformation pos) throws ParseException {
- super.setMemoryExtended(event, line, pos);
- }
-
- @Override
- public GCModel read() throws IOException {
- return null;
- }
-
- @Override
- protected AbstractGCEvent> parseLine(String line, ParseInformation pos) throws ParseException {
- return null;
- }
-
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+import com.tagtraum.perf.gcviewer.util.ParseInformation;
+
+public class TestAbstractDataReaderSun {
+
+ private AbstractDataReaderSunSub dataReader;
+
+ @Before
+ public void setUp() throws UnsupportedEncodingException {
+ dataReader = new AbstractDataReaderSunSub(new ByteArrayInputStream(new byte[0]), GcLogType.SUN1_6);
+ }
+
+ /**
+ * Tests parsing of memory information like 8192K(16M)->7895K(16M)
+ */
+ @Test
+ public void setMemorySimplePreUsed_heap_postUsed_heap() throws ParseException {
+ String line = " [Eden: 1000K(2000K)->0B(3000K) Survivors: 1024B->4000K Heap: 5000K(16M)->6000K(16M)]";
+
+ ParseInformation pos = new ParseInformation(0);
+ pos.setIndex(line.indexOf("Heap:") + "Heap:".length() + 1);
+
+ GCEvent event = new GCEvent();
+ dataReader.setMemoryExtended(event, line, pos);
+
+ assertEquals("heap before", 5000, event.getPreUsed());
+ assertEquals("heap after", 6000, event.getPostUsed());
+ assertEquals("heap total", 16*1024, event.getTotal());
+ }
+
+ /**
+ * Tests parsing of memory information like 8192K->7895K(16M)
+ */
+ @Test
+ public void setMemorySimplePreUsed_postUsed_heap() throws ParseException {
+ String line = " [ 8192K->8128K(64M)]";
+
+ ParseInformation pos = new ParseInformation(0);
+ pos.setIndex(line.indexOf("[") + 1);
+
+ GCEvent event = new GCEvent();
+ dataReader.setMemoryExtended(event, line, pos);
+
+ assertEquals("heap before", 8192, event.getPreUsed());
+ assertEquals("heap after", 8128, event.getPostUsed());
+ assertEquals("heap total", 64*1024, event.getTotal());
+ }
+
+ /**
+ * Tests parsing of memory information like 8192K->7895K (usually found in G1 Survivors block)
+ */
+ @Test
+ public void setMemorySimplePreHeap_postHeap() throws ParseException {
+ String line = " [Eden: 1000K(2000K)->0B(3000K) Survivors: 1024B->4000K Heap: 5000K(16M)->6000K(16M)]";
+
+ ParseInformation pos = new ParseInformation(0);
+ pos.setIndex(line.indexOf("Survivors:") + "Survivors:".length() + 1);
+
+ GCEvent event = new GCEvent();
+ dataReader.setMemoryExtended(event, line, pos);
+
+ assertEquals("heap before", 1, event.getPreUsed());
+ assertEquals("heap after", 4000, event.getPostUsed());
+ }
+
+ /**
+ * Tests parsing of memory information like "118.5M(118.0M)->128.4K(112.0M)" (notice the dots).
+ */
+ @Test
+ public void setExtendedMemoryFloatingPointPreEden_postEden() throws ParseException {
+ String line = " [Eden: 118.5M(118.0M)->128.4K(112.0M) Survivors: 10.0M->16.0M Heap: 548.6M(640.0M)->440.6M(640.0M)]";
+
+ ParseInformation pos = new ParseInformation(0);
+ pos.setIndex(line.indexOf("Eden:") + "Eden:".length() + 1);
+
+ GCEvent event = new GCEvent();
+ dataReader.setMemoryExtended(event, line, pos);
+
+ assertEquals("heap before", 121344, event.getPreUsed());
+ assertEquals("heap after", 128, event.getPostUsed());
+ }
+
+ /**
+ * Subclass of {@link AbstractDataReaderSun} which makes those methods public, I want to test here.
+ *
+ * @author Joerg Wuethrich
+ * created on: 28.02.2012
+ */
+ private class AbstractDataReaderSunSub extends AbstractDataReaderSun {
+
+ public AbstractDataReaderSunSub(InputStream in, GcLogType gcLogType) throws UnsupportedEncodingException {
+ super(in, gcLogType);
+ }
+
+ @Override
+ public void setMemoryExtended(GCEvent event, String line, ParseInformation pos) throws ParseException {
+ super.setMemoryExtended(event, line, pos);
+ }
+
+ @Override
+ public GCModel read() throws IOException {
+ return null;
+ }
+
+ @Override
+ protected AbstractGCEvent> parseLine(String line, ParseInformation pos) throws ParseException {
+ return null;
+ }
+
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAllImp.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAllImp.java
index 5e263a80..390711b9 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAllImp.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestAllImp.java
@@ -1,43 +1,43 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * TestSuite in JUnit 4 style; points to all testcases, that should be run.
- *
- * @author Joerg Wuethrich
- * created on: 25.01.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- TestAbstractDataReaderSun.class,
-
- TestDataReaderFacade.class,
- TestDataReaderFactory.class,
- TestDataReaderSun1_2_2.class,
- TestDataReaderSun1_3_1.class,
- // TestDataReaderSun1_3_1_19.class,
- TestDataReaderSun1_4_0.class,
- TestDataReaderSun1_5_0.class,
- TestDataReaderSun1_6_0.class,
- TestDataReaderSun1_6_0G1.class,
- TestDataReaderSun1_7_0.class,
- TestDataReaderSun1_7_0G1.class,
- TestDataReaderSun1_8_0.class,
- TestDataReaderSun1_8_0G1.class,
-
- TestDataReaderIBM1_2_2.class,
- TestDataReaderIBM1_3_1.class,
- TestDataReaderIBMi5OS1_4_2.class,
- TestDataReaderIBMJ9_5_0.class,
-
- TestDataReaderHPUX1_2.class,
- TestDataReaderHPUX1_4_1.class,
-
- TestDataReaderJRockit1_4_2.class,
- TestDataReaderJRockit1_5_0.class,
- TestDataReaderJRockit1_6_0.class,
-})
-public class TestAllImp {
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * TestSuite in JUnit 4 style; points to all testcases, that should be run.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.01.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestAbstractDataReaderSun.class,
+
+ TestDataReaderFacade.class,
+ TestDataReaderFactory.class,
+ TestDataReaderSun1_2_2.class,
+ TestDataReaderSun1_3_1.class,
+ // TestDataReaderSun1_3_1_19.class,
+ TestDataReaderSun1_4_0.class,
+ TestDataReaderSun1_5_0.class,
+ TestDataReaderSun1_6_0.class,
+ TestDataReaderSun1_6_0G1.class,
+ TestDataReaderSun1_7_0.class,
+ TestDataReaderSun1_7_0G1.class,
+ TestDataReaderSun1_8_0.class,
+ TestDataReaderSun1_8_0G1.class,
+
+ TestDataReaderIBM1_2_2.class,
+ TestDataReaderIBM1_3_1.class,
+ TestDataReaderIBMi5OS1_4_2.class,
+ TestDataReaderIBMJ9_5_0.class,
+
+ TestDataReaderHPUX1_2.class,
+ TestDataReaderHPUX1_4_1.class,
+
+ TestDataReaderJRockit1_4_2.class,
+ TestDataReaderJRockit1_5_0.class,
+ TestDataReaderJRockit1_6_0.class,
+})
+public class TestAllImp {
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFacade.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFacade.java
index 52ca8fbc..54b1972a 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFacade.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFacade.java
@@ -1,120 +1,120 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.MalformedURLException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Tests the implementation of {@link DataReaderFacade}.
- *
- * @author Joerg Wuethrich
- * created on: 28.11.2012
- */
-public class TestDataReaderFacade {
-
- private static final String SAMPLE_GCLOG_SUN1_6_0 = "SampleSun1_6_0PrintHeapAtGC.txt";
-
- private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
- private static final String PARENT_PATH = "src/test/resources/" + UnittestHelper.FOLDER_OPENJDK + "/";
-
- private DataReaderFacade dataReaderFacade;
-
- @Before
- public void setUp() throws Exception {
- dataReaderFacade = new DataReaderFacade();
- }
-
- /**
- * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
- * with filename that does exist.
- */
- @Test
- public void loadModelStringFileExistsNoWarnings() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
-
- dataReaderFacade.loadModel(PARENT_PATH + SAMPLE_GCLOG_SUN1_6_0, false, null);
-
- assertEquals("has no errors", 0, handler.getCount());
- }
-
- /**
- * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
- * with a malformed url.
- */
- @Test
- public void loadModelStringMalformedUrl() throws Exception {
-
- try {
- dataReaderFacade.loadModel("httpblabla", false, null);
- }
- catch (DataReaderException e) {
- assertNotNull("cause", e.getCause());
- assertEquals("expected exception in cause",
- MalformedURLException.class.getName(),
- e.getCause().getClass().getName());
- }
- }
-
- /**
- * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
- * with a malformed url.
- */
- @Test
- public void loadModelStringIllegalArgument() throws Exception {
-
- try {
- dataReaderFacade.loadModel("http://", false, null);
- }
- catch (DataReaderException e) {
- assertNotNull("cause", e.getCause());
- assertEquals("expected exception in cause",
- IllegalArgumentException.class.getName(),
- e.getCause().getClass().getName());
- }
- }
-
- /**
- * Tests {@link DataReaderFacade#loadModel(java.net.URL, boolean, java.awt.Component)}
- * with filename that does not exist.
- */
- @Test
- public void loadModelUrlFileDoesntExists() throws Exception {
- try {
- dataReaderFacade.loadModel(new File("dummy.txt").toURI().toURL(), false, null);
- fail("DataReaderException expected");
- }
- catch (DataReaderException e) {
- assertNotNull("cause", e.getCause());
- assertEquals("expected exception in cause",
- FileNotFoundException.class.getName(),
- e.getCause().getClass().getName());
- }
- }
-
- /**
- * Tests {@link DataReaderFacade#loadModel(java.net.URL, boolean, java.awt.Component)}
- * with filename that does exist.
- */
- @Test
- public void loadModelUrlFileExistsNoWarnings() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
-
- dataReaderFacade.loadModel(new File(PARENT_PATH, SAMPLE_GCLOG_SUN1_6_0).toURI().toURL(), false, null);
-
- assertEquals("has no errors", 0, handler.getCount());
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.net.MalformedURLException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests the implementation of {@link DataReaderFacade}.
+ *
+ * @author Joerg Wuethrich
+ * created on: 28.11.2012
+ */
+public class TestDataReaderFacade {
+
+ private static final String SAMPLE_GCLOG_SUN1_6_0 = "SampleSun1_6_0PrintHeapAtGC.txt";
+
+ private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
+ private static final String PARENT_PATH = "src/test/resources/" + UnittestHelper.FOLDER_OPENJDK + "/";
+
+ private DataReaderFacade dataReaderFacade;
+
+ @Before
+ public void setUp() throws Exception {
+ dataReaderFacade = new DataReaderFacade();
+ }
+
+ /**
+ * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
+ * with filename that does exist.
+ */
+ @Test
+ public void loadModelStringFileExistsNoWarnings() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+
+ dataReaderFacade.loadModel(PARENT_PATH + SAMPLE_GCLOG_SUN1_6_0, false, null);
+
+ assertEquals("has no errors", 0, handler.getCount());
+ }
+
+ /**
+ * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
+ * with a malformed url.
+ */
+ @Test
+ public void loadModelStringMalformedUrl() throws Exception {
+
+ try {
+ dataReaderFacade.loadModel("httpblabla", false, null);
+ }
+ catch (DataReaderException e) {
+ assertNotNull("cause", e.getCause());
+ assertEquals("expected exception in cause",
+ MalformedURLException.class.getName(),
+ e.getCause().getClass().getName());
+ }
+ }
+
+ /**
+ * Tests {@link DataReaderFacade#loadModel(String, boolean, java.awt.Component)}
+ * with a malformed url.
+ */
+ @Test
+ public void loadModelStringIllegalArgument() throws Exception {
+
+ try {
+ dataReaderFacade.loadModel("http://", false, null);
+ }
+ catch (DataReaderException e) {
+ assertNotNull("cause", e.getCause());
+ assertEquals("expected exception in cause",
+ IllegalArgumentException.class.getName(),
+ e.getCause().getClass().getName());
+ }
+ }
+
+ /**
+ * Tests {@link DataReaderFacade#loadModel(java.net.URL, boolean, java.awt.Component)}
+ * with filename that does not exist.
+ */
+ @Test
+ public void loadModelUrlFileDoesntExists() throws Exception {
+ try {
+ dataReaderFacade.loadModel(new File("dummy.txt").toURI().toURL(), false, null);
+ fail("DataReaderException expected");
+ }
+ catch (DataReaderException e) {
+ assertNotNull("cause", e.getCause());
+ assertEquals("expected exception in cause",
+ FileNotFoundException.class.getName(),
+ e.getCause().getClass().getName());
+ }
+ }
+
+ /**
+ * Tests {@link DataReaderFacade#loadModel(java.net.URL, boolean, java.awt.Component)}
+ * with filename that does exist.
+ */
+ @Test
+ public void loadModelUrlFileExistsNoWarnings() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+
+ dataReaderFacade.loadModel(new File(PARENT_PATH, SAMPLE_GCLOG_SUN1_6_0).toURI().toURL(), false, null);
+
+ assertEquals("has no errors", 0, handler.getCount());
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFactory.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFactory.java
index 25243024..604a6441 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFactory.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderFactory.java
@@ -1,242 +1,242 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Tests the logic of the {@link DataReaderFactory}
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- * @author Joerg Wuethrich
- */
-public class TestDataReaderFactory {
-
-
- @Rule
- public TestName name = new TestName();
-
- private InputStream getInputStreamJRockit(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
- }
-
- private InputStream getInputStreamOpenJdk(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
- }
-
- private void assertDataReader(
- Class extends DataReader> expected,
- Class extends DataReader> actual) {
-
- assertDataReader(name.getMethodName(), expected, actual);
- }
-
- /**
- * Tests for equality of two {@link DataReader} classes.
- *
- * @param testName name of the test to identify which test failed
- * @param expected expected type of DataReader
- * @param actual actual type of DataReader
- */
- private void assertDataReader(String testName,
- Class extends DataReader> expected,
- Class extends DataReader> actual) {
-
- assertEquals(testName, expected.getCanonicalName(), actual.getCanonicalName());
- }
-
- @Test
- public void testGetDataReaderJDK6GZipped() throws Exception {
- final String sampleGz = "SampleSun1_6_0PrintHeapAtGC.txt.gz";
- try (InputStream in = getInputStreamOpenJdk(sampleGz)) {
-
- final DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader("getDataReader() reading " + sampleGz, DataReaderSun1_6_0.class, reader.getClass());
-
- GCModel model = reader.read();
- assertEquals("# events", 2, model.size());
- }
- }
-
- @Test
- public void testJRockit1_4GcReportGenCon() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gencon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GcReportParallel() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-parallel.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GcReportPrioPauseTime() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gcpriopausetime.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GcReportPrioThroughput() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gcpriothroughput.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GcReportSingleCon() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-singlecon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GenCon() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2gencon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4GenConBig() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2gencon-big.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4Parallel() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2parallel.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_4PrioPauseTime() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2priopausetime.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5GenCon() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gencon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5GenConMemStats() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_20_memstats2.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5GenPar() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_genpar.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5PrioPausetime() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gcpriopausetime.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5PrioThroughput() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gcpriothroughput.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_5SimpleOpts() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12-gcreport-simpleopts-singlecon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_6GenConVerbose() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_verbose_gc_mode_gencon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_6GenParVerbose() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_33_gc_mode_genpar_verbosenursery.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_6ParCon() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_gc_mode_singleparcon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testJRockit1_6ParConVerbose() throws Exception {
- try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_verbose_gc_mode_singleparcon.txt")) {
- DataReader reader = new DataReaderFactory().getDataReader(in);
- assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
- }
- }
-
- @Test
- public void testSun1_3_1() throws Exception {
- DataReaderFactory factory = new DataReaderFactory();
- DataReader dr = factory.getDataReader(new ByteArrayInputStream("[GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
- assertDataReader("Sun1_3_1 GC", DataReaderSun1_3_1.class, dr.getClass());
-
- dr = factory.getDataReader(new ByteArrayInputStream("[Full GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
- assertDataReader("Sun1_3_1 Full GC", DataReaderSun1_3_1.class, dr.getClass());
- }
-
- @Test
- public void testSun1_4_0() throws Exception {
- // although the input is java 1.4 the datareader returned should be 1.6
- // (DataReaderSun1_6_0 handles java 1.4, 1.5, 1.6, 1.7)
- DataReaderFactory factory = new DataReaderFactory();
- DataReader dr = factory.getDataReader(new ByteArrayInputStream("2.23492e-006: [GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
- assertDataReader(DataReaderSun1_6_0.class, dr.getClass());
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestName;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Tests the logic of the {@link DataReaderFactory}
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ * @author Joerg Wuethrich
+ */
+public class TestDataReaderFactory {
+
+
+ @Rule
+ public TestName name = new TestName();
+
+ private InputStream getInputStreamJRockit(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
+ }
+
+ private InputStream getInputStreamOpenJdk(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
+ }
+
+ private void assertDataReader(
+ Class extends DataReader> expected,
+ Class extends DataReader> actual) {
+
+ assertDataReader(name.getMethodName(), expected, actual);
+ }
+
+ /**
+ * Tests for equality of two {@link DataReader} classes.
+ *
+ * @param testName name of the test to identify which test failed
+ * @param expected expected type of DataReader
+ * @param actual actual type of DataReader
+ */
+ private void assertDataReader(String testName,
+ Class extends DataReader> expected,
+ Class extends DataReader> actual) {
+
+ assertEquals(testName, expected.getCanonicalName(), actual.getCanonicalName());
+ }
+
+ @Test
+ public void testGetDataReaderJDK6GZipped() throws Exception {
+ final String sampleGz = "SampleSun1_6_0PrintHeapAtGC.txt.gz";
+ try (InputStream in = getInputStreamOpenJdk(sampleGz)) {
+
+ final DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader("getDataReader() reading " + sampleGz, DataReaderSun1_6_0.class, reader.getClass());
+
+ GCModel model = reader.read();
+ assertEquals("# events", 2, model.size());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GcReportGenCon() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gencon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GcReportParallel() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-parallel.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GcReportPrioPauseTime() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gcpriopausetime.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GcReportPrioThroughput() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-gcpriothroughput.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GcReportSingleCon() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2ts-gcreport-singlecon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_4_2.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GenCon() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2gencon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4GenConBig() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2gencon-big.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4Parallel() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2parallel.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_4PrioPauseTime() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_4_2priopausetime.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5GenCon() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gencon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5GenConMemStats() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_20_memstats2.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5GenPar() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_genpar.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5PrioPausetime() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gcpriopausetime.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5PrioThroughput() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12_gcpriothroughput.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_5SimpleOpts() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_5_12-gcreport-simpleopts-singlecon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_5_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_6GenConVerbose() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_verbose_gc_mode_gencon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_6GenParVerbose() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_33_gc_mode_genpar_verbosenursery.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_6ParCon() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_gc_mode_singleparcon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testJRockit1_6ParConVerbose() throws Exception {
+ try (InputStream in = getInputStreamJRockit("SampleJRockit1_6_verbose_gc_mode_singleparcon.txt")) {
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+ assertDataReader(DataReaderJRockit1_6_0.class, reader.getClass());
+ }
+ }
+
+ @Test
+ public void testSun1_3_1() throws Exception {
+ DataReaderFactory factory = new DataReaderFactory();
+ DataReader dr = factory.getDataReader(new ByteArrayInputStream("[GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
+ assertDataReader("Sun1_3_1 GC", DataReaderSun1_3_1.class, dr.getClass());
+
+ dr = factory.getDataReader(new ByteArrayInputStream("[Full GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
+ assertDataReader("Sun1_3_1 Full GC", DataReaderSun1_3_1.class, dr.getClass());
+ }
+
+ @Test
+ public void testSun1_4_0() throws Exception {
+ // although the input is java 1.4 the datareader returned should be 1.6
+ // (DataReaderSun1_6_0 handles java 1.4, 1.5, 1.6, 1.7)
+ DataReaderFactory factory = new DataReaderFactory();
+ DataReader dr = factory.getDataReader(new ByteArrayInputStream("2.23492e-006: [GC 1087K->462K(16320K), 0.0154134 secs]".getBytes()));
+ assertDataReader(DataReaderSun1_6_0.class, dr.getClass());
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderHPUX1_2.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderHPUX1_2.java
index 901d9383..4e389974 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderHPUX1_2.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderHPUX1_2.java
@@ -1,28 +1,28 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderHPUX1_2 {
-
- @Test
- public void testParse1() throws Exception {
- InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_HP, "SampleHP-UX1_3.txt");
- DataReader reader = new DataReaderHPUX1_2(in);
- GCModel model = reader.read();
-
- assertEquals("number of events", 135, model.size());
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderHPUX1_2 {
+
+ @Test
+ public void testParse1() throws Exception {
+ InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_HP, "SampleHP-UX1_3.txt");
+ DataReader reader = new DataReaderHPUX1_2(in);
+ GCModel model = reader.read();
+
+ assertEquals("number of events", 135, model.size());
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_2_2.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_2_2.java
index ca6cd714..62c523c5 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_2_2.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_2_2.java
@@ -1,27 +1,27 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderIBM1_2_2 {
-
- @Test
- public void testParse1() throws Exception {
- InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBM1_2_2.txt");
- DataReader reader = new DataReaderIBM1_3_0(in);
- GCModel model = reader.read();
-
- assertEquals("number of events", 28, model.size());
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderIBM1_2_2 {
+
+ @Test
+ public void testParse1() throws Exception {
+ InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBM1_2_2.txt");
+ DataReader reader = new DataReaderIBM1_3_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("number of events", 28, model.size());
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_3_1.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_3_1.java
index 743bfba0..b68f7964 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_3_1.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM1_3_1.java
@@ -1,27 +1,27 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderIBM1_3_1 {
-
- @Test
- public void testParse1() throws Exception {
- InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBM1_3_1.txt");
- DataReader reader = new DataReaderIBM1_3_1(in);
- GCModel model = reader.read();
-
- assertEquals("number of events", 21, model.size());
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderIBM1_3_1 {
+
+ @Test
+ public void testParse1() throws Exception {
+ InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBM1_3_1.txt");
+ DataReader reader = new DataReaderIBM1_3_1(in);
+ GCModel model = reader.read();
+
+ assertEquals("number of events", 21, model.size());
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBMJ9_5_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBMJ9_5_0.java
index 6b774746..970903ca 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBMJ9_5_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBMJ9_5_0.java
@@ -1,61 +1,61 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-
-/**
- * Tests the implementation of {@link TestDataReaderIBMJ9_5_0} and {@link IBMJ9SAXHandler}.
- *
- * @author Joerg Wuethrich
- * created on: 18.02.2013
- */
-public class TestDataReaderIBMJ9_5_0 {
-
- private InputStream getInputStream(String filename) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, filename);
- }
-
- @Test
- public void afTenuredGlobal() throws Exception {
- final InputStream in = getInputStream("SampleIBMJ9_5_0af-global-200811_07.txt");
- final DataReader reader = new DataReaderIBM_J9_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 1, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("pause", 0.035912, event.getPause(), 0.0000001);
-
- assertEquals("timestamp", 0, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.FULL_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", (52428800 - 2621440) / 1024, event.getPreUsed());
- assertEquals("after", (52428800 - 40481192) / 1024, event.getPostUsed());
- assertEquals("total", 52428800 / 1024, event.getTotal());
- }
-
- @Test
- public void afTenuredGlobal_20090417_AA() throws Exception {
- final InputStream in = getInputStream("SampleIBMJ9_5_0af-global-20090417_AA.txt");
- final DataReader reader = new DataReaderIBM_J9_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 1, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("pause", 0.837024, event.getPause(), 0.0000001);
-
- assertEquals("timestamp", 0, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.FULL_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", (12884901888L - 4626919608L) / 1024, event.getPreUsed());
- assertEquals("after", (12884901888L - 10933557088L) / 1024, event.getPostUsed());
- assertEquals("total", 12884901888L / 1024, event.getTotal());
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+
+/**
+ * Tests the implementation of {@link TestDataReaderIBMJ9_5_0} and {@link IBMJ9SAXHandler}.
+ *
+ * @author Joerg Wuethrich
+ * created on: 18.02.2013
+ */
+public class TestDataReaderIBMJ9_5_0 {
+
+ private InputStream getInputStream(String filename) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, filename);
+ }
+
+ @Test
+ public void afTenuredGlobal() throws Exception {
+ final InputStream in = getInputStream("SampleIBMJ9_5_0af-global-200811_07.txt");
+ final DataReader reader = new DataReaderIBM_J9_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 1, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("pause", 0.035912, event.getPause(), 0.0000001);
+
+ assertEquals("timestamp", 0, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.FULL_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", (52428800 - 2621440) / 1024, event.getPreUsed());
+ assertEquals("after", (52428800 - 40481192) / 1024, event.getPostUsed());
+ assertEquals("total", 52428800 / 1024, event.getTotal());
+ }
+
+ @Test
+ public void afTenuredGlobal_20090417_AA() throws Exception {
+ final InputStream in = getInputStream("SampleIBMJ9_5_0af-global-20090417_AA.txt");
+ final DataReader reader = new DataReaderIBM_J9_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 1, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("pause", 0.837024, event.getPause(), 0.0000001);
+
+ assertEquals("timestamp", 0, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.FULL_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", (12884901888L - 4626919608L) / 1024, event.getPreUsed());
+ assertEquals("after", (12884901888L - 10933557088L) / 1024, event.getPostUsed());
+ assertEquals("total", 12884901888L / 1024, event.getTotal());
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_4_2.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_4_2.java
index 61408b33..932185fe 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_4_2.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_4_2.java
@@ -1,185 +1,185 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderJRockit1_4_2 {
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
- }
-
- @Test
- public void testParseGenCon() throws Exception {
- // TODO refactor JRockit DataReader
- InputStream in = getInputStream("SampleJRockit1_4_2gencon.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 123, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 77.737, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 630435, event.getPreUsed());
- assertEquals("after", 183741, event.getPostUsed());
- assertEquals("total", 1048576, event.getTotal());
- assertEquals("pause", 0.566158, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseGenConBig() throws Exception {
- // TODO refactor JRockit DataReader
- InputStream in = getInputStream("SampleJRockit1_4_2gencon-big.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 32420, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 9.385, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 123930, event.getPreUsed());
- assertEquals("after", 27087, event.getPostUsed());
- assertEquals("total", 1048576, event.getTotal());
- assertEquals("pause", 0.053417, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseParallel() throws Exception {
- // TODO refactor JRockit DataReader
- InputStream in = getInputStream("SampleJRockit1_4_2parallel.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 92, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 226.002, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 1048576, event.getPreUsed());
- assertEquals("after", 133204, event.getPostUsed());
- assertEquals("total", 1048576, event.getTotal());
- assertEquals("pause", 0.544511, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParsePrioPauseTime() throws Exception {
- // TODO refactor JRockit DataReader
- InputStream in = getInputStream("SampleJRockit1_4_2priopausetime.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 1867, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 12.622, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 320728, event.getPreUsed());
- assertEquals("after", 130908, event.getPostUsed());
- assertEquals("total", 358400, event.getTotal());
- assertEquals("pause", 0.025921, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseTsGCReportGencon() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gencon.txt");
- DataReader reader = new DataReaderJRockit1_4_2(in);
- GCModel model = reader.read();
-
- assertEquals("count", 63, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 13.594, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 13824, event.getPreUsed());
- assertEquals("after", 4553, event.getPostUsed());
- assertEquals("total", 32768, event.getTotal());
- assertEquals("pause", 0.028308, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseTsGCReportParallel() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-parallel.txt");
- DataReader reader = new DataReaderJRockit1_4_2(in);
- GCModel model = reader.read();
-
- assertEquals("count", 31, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 20.547, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 32768, event.getPreUsed());
- assertEquals("after", 5552, event.getPostUsed());
- assertEquals("total", 32768, event.getTotal());
- assertEquals("pause", 0.072, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseTsGCReportPrioPauseTime() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gcpriopausetime.txt");
- DataReader reader = new DataReaderFactory().getDataReader(in);
-
- assertTrue("should be DataReaderJRockit1_4_2 (but was " + reader.toString() + ")", reader instanceof DataReaderJRockit1_4_2);
-
- GCModel model = reader.read();
-
- assertEquals("count", 64, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 18.785, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 32260, event.getPreUsed());
- assertEquals("after", 4028, event.getPostUsed());
- assertEquals("total", 32768, event.getTotal());
- assertEquals("pause", 0.024491, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseTsGCReportPrioThroughput() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gcpriothroughput.txt");
- DataReader reader = new DataReaderJRockit1_4_2(in);
- GCModel model = reader.read();
-
- assertEquals("count", 70, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 20.021, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 32768, event.getPreUsed());
- assertEquals("after", 5561, event.getPostUsed());
- assertEquals("total", 32768, event.getTotal());
- assertEquals("pause", 0.061, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testParseTsGCReportSinglecon() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-singlecon.txt");
- DataReader reader = new DataReaderJRockit1_4_2(in);
- GCModel model = reader.read();
-
- assertEquals("count", 41, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 18.906, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 32260, event.getPreUsed());
- assertEquals("after", 3997, event.getPostUsed());
- assertEquals("total", 32768, event.getTotal());
- assertEquals("pause", 0.020149, event.getPause(), 0.0000001);
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderJRockit1_4_2 {
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
+ }
+
+ @Test
+ public void testParseGenCon() throws Exception {
+ // TODO refactor JRockit DataReader
+ InputStream in = getInputStream("SampleJRockit1_4_2gencon.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 123, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 77.737, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 630435, event.getPreUsed());
+ assertEquals("after", 183741, event.getPostUsed());
+ assertEquals("total", 1048576, event.getTotal());
+ assertEquals("pause", 0.566158, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseGenConBig() throws Exception {
+ // TODO refactor JRockit DataReader
+ InputStream in = getInputStream("SampleJRockit1_4_2gencon-big.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 32420, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 9.385, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 123930, event.getPreUsed());
+ assertEquals("after", 27087, event.getPostUsed());
+ assertEquals("total", 1048576, event.getTotal());
+ assertEquals("pause", 0.053417, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseParallel() throws Exception {
+ // TODO refactor JRockit DataReader
+ InputStream in = getInputStream("SampleJRockit1_4_2parallel.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 92, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 226.002, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 1048576, event.getPreUsed());
+ assertEquals("after", 133204, event.getPostUsed());
+ assertEquals("total", 1048576, event.getTotal());
+ assertEquals("pause", 0.544511, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParsePrioPauseTime() throws Exception {
+ // TODO refactor JRockit DataReader
+ InputStream in = getInputStream("SampleJRockit1_4_2priopausetime.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 1867, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 12.622, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 320728, event.getPreUsed());
+ assertEquals("after", 130908, event.getPostUsed());
+ assertEquals("total", 358400, event.getTotal());
+ assertEquals("pause", 0.025921, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseTsGCReportGencon() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gencon.txt");
+ DataReader reader = new DataReaderJRockit1_4_2(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 63, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 13.594, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_NURSERY_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 13824, event.getPreUsed());
+ assertEquals("after", 4553, event.getPostUsed());
+ assertEquals("total", 32768, event.getTotal());
+ assertEquals("pause", 0.028308, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseTsGCReportParallel() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-parallel.txt");
+ DataReader reader = new DataReaderJRockit1_4_2(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 31, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 20.547, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 32768, event.getPreUsed());
+ assertEquals("after", 5552, event.getPostUsed());
+ assertEquals("total", 32768, event.getTotal());
+ assertEquals("pause", 0.072, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseTsGCReportPrioPauseTime() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gcpriopausetime.txt");
+ DataReader reader = new DataReaderFactory().getDataReader(in);
+
+ assertTrue("should be DataReaderJRockit1_4_2 (but was " + reader.toString() + ")", reader instanceof DataReaderJRockit1_4_2);
+
+ GCModel model = reader.read();
+
+ assertEquals("count", 64, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 18.785, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 32260, event.getPreUsed());
+ assertEquals("after", 4028, event.getPostUsed());
+ assertEquals("total", 32768, event.getTotal());
+ assertEquals("pause", 0.024491, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseTsGCReportPrioThroughput() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-gcpriothroughput.txt");
+ DataReader reader = new DataReaderJRockit1_4_2(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 70, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 20.021, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 32768, event.getPreUsed());
+ assertEquals("after", 5561, event.getPostUsed());
+ assertEquals("total", 32768, event.getTotal());
+ assertEquals("pause", 0.061, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testParseTsGCReportSinglecon() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_4_2ts-gcreport-singlecon.txt");
+ DataReader reader = new DataReaderJRockit1_4_2(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 41, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 18.906, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 32260, event.getPreUsed());
+ assertEquals("after", 3997, event.getPostUsed());
+ assertEquals("total", 32768, event.getTotal());
+ assertEquals("pause", 0.020149, event.getPause(), 0.0000001);
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_5_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_5_0.java
index 2f4ae5b6..6d0541d0 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_5_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_5_0.java
@@ -1,175 +1,175 @@
-/*
- * =================================================
- * Copyright 2006 tagtraum industries incorporated
- * All rights reserved.
- * =================================================
- */
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.math.DoubleData;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Test DataReaderJRockit1_5_0 implementation.
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderJRockit1_5_0 {
- private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
- private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
- }
-
- @Test
- public void testGcPrioPausetime() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- InputStream in = getInputStream("SampleJRockit1_5_12_gcpriopausetime.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 10, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 6.290, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 3128161, event.getPreUsed());
- assertEquals("after", 296406, event.getPostUsed());
- assertEquals("total", 3145728, event.getTotal());
- assertEquals("pause", 0.059084, event.getPause(), 0.0000001);
-
- assertEquals("number of warnings", 6, handler.getCount());
- }
-
- @Test
- public void testGcPrioThroughput() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_5_12_gcpriothroughput.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 8, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 4.817, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 1641728, event.getPreUsed());
- assertEquals("after", 148365, event.getPostUsed());
- assertEquals("total", 3145728, event.getTotal());
- assertEquals("pause", 0.039959, event.getPause(), 0.0000001);
- }
-
- @Test
- public void testGenCon() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_5_12_gencon.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 8, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 6.038, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 3089328, event.getPreUsed());
- assertEquals("after", 352551, event.getPostUsed());
- assertEquals("total", 3145728, event.getTotal());
- assertEquals("pause", 0.1186, event.getPause(), 0.0000001);
- }
-
- /**
- * This log file sample contains much more information about concurrent events
- * than is currently parsed. Still the parser must be able to extract the information
- * it can parse.
- */
- @Test
- public void testGenConMemstats() throws Exception {
- // allthough this log file was written with JRockit 1.5 VM, it has the same structure
- // as a JRockit 1.6 gc log file.
- // TODO refactor JRockit DataReader
- InputStream in = getInputStream("SampleJRockit1_5_20_memstats2.txt");
- DataReader reader = new DataReaderJRockit1_6_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 11, model.size());
- }
-
- @Test
- public void testGenPar() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_5_12_genpar.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 17, model.size());
-
- // 2 types of events excpected: "GC" and "parallel nursery GC"
- Map gcEventPauses = model.getGcEventPauses();
- assertEquals("2 types of events found", 2, gcEventPauses.entrySet().size());
- }
-
- /**
- * Test parsing of a malformed type. The test just expects an INFO to be logged - nothing else.
- */
- @Test
- public void testMalformedType() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.INFO);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- ByteArrayInputStream in = new ByteArrayInputStream(
- ("[memory ][Thu Feb 21 15:06:38 2013][11844] 6.290-6.424: GC-malformed 3128161K->296406K (3145728K), sum of pauses 59.084 ms")
- .getBytes());
-
- DataReader reader = new DataReaderJRockit1_5_0(in);
- reader.read();
-
- // 3 INFO events:
- // Reading JRockit ... format
- // Failed to determine type ...
- // Reading done.
- assertEquals("number of infos", 3, handler.getCount());
-
- List logRecords = handler.getLogRecords();
- assertEquals("should start with 'Failed to determine type'", 0, logRecords.get(1).getMessage().indexOf("Failed to determine type"));
- }
-
- @Test
- public void testSimpleOpts() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_5_12-gcreport-simpleopts-singlecon.txt");
- DataReader reader = new DataReaderJRockit1_5_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 5, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 6.771, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 3145728, event.getPreUsed());
- assertEquals("after", 296406, event.getPostUsed());
- assertEquals("total", 3145728, event.getTotal());
- assertEquals("pause", 0.066, event.getPause(), 0.0000001);
-
- }
-
-}
+/*
+ * =================================================
+ * Copyright 2006 tagtraum industries incorporated
+ * All rights reserved.
+ * =================================================
+ */
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.math.DoubleData;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Test DataReaderJRockit1_5_0 implementation.
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderJRockit1_5_0 {
+ private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
+ private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
+ }
+
+ @Test
+ public void testGcPrioPausetime() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ InputStream in = getInputStream("SampleJRockit1_5_12_gcpriopausetime.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 10, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 6.290, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 3128161, event.getPreUsed());
+ assertEquals("after", 296406, event.getPostUsed());
+ assertEquals("total", 3145728, event.getTotal());
+ assertEquals("pause", 0.059084, event.getPause(), 0.0000001);
+
+ assertEquals("number of warnings", 6, handler.getCount());
+ }
+
+ @Test
+ public void testGcPrioThroughput() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_5_12_gcpriothroughput.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 8, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 4.817, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 1641728, event.getPreUsed());
+ assertEquals("after", 148365, event.getPostUsed());
+ assertEquals("total", 3145728, event.getTotal());
+ assertEquals("pause", 0.039959, event.getPause(), 0.0000001);
+ }
+
+ @Test
+ public void testGenCon() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_5_12_gencon.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 8, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 6.038, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 3089328, event.getPreUsed());
+ assertEquals("after", 352551, event.getPostUsed());
+ assertEquals("total", 3145728, event.getTotal());
+ assertEquals("pause", 0.1186, event.getPause(), 0.0000001);
+ }
+
+ /**
+ * This log file sample contains much more information about concurrent events
+ * than is currently parsed. Still the parser must be able to extract the information
+ * it can parse.
+ */
+ @Test
+ public void testGenConMemstats() throws Exception {
+ // allthough this log file was written with JRockit 1.5 VM, it has the same structure
+ // as a JRockit 1.6 gc log file.
+ // TODO refactor JRockit DataReader
+ InputStream in = getInputStream("SampleJRockit1_5_20_memstats2.txt");
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 11, model.size());
+ }
+
+ @Test
+ public void testGenPar() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_5_12_genpar.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 17, model.size());
+
+ // 2 types of events excpected: "GC" and "parallel nursery GC"
+ Map gcEventPauses = model.getGcEventPauses();
+ assertEquals("2 types of events found", 2, gcEventPauses.entrySet().size());
+ }
+
+ /**
+ * Test parsing of a malformed type. The test just expects an INFO to be logged - nothing else.
+ */
+ @Test
+ public void testMalformedType() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.INFO);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ ByteArrayInputStream in = new ByteArrayInputStream(
+ ("[memory ][Thu Feb 21 15:06:38 2013][11844] 6.290-6.424: GC-malformed 3128161K->296406K (3145728K), sum of pauses 59.084 ms")
+ .getBytes());
+
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ reader.read();
+
+ // 3 INFO events:
+ // Reading JRockit ... format
+ // Failed to determine type ...
+ // Reading done.
+ assertEquals("number of infos", 3, handler.getCount());
+
+ List logRecords = handler.getLogRecords();
+ assertEquals("should start with 'Failed to determine type'", 0, logRecords.get(1).getMessage().indexOf("Failed to determine type"));
+ }
+
+ @Test
+ public void testSimpleOpts() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_5_12-gcreport-simpleopts-singlecon.txt");
+ DataReader reader = new DataReaderJRockit1_5_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 5, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 6.771, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 3145728, event.getPreUsed());
+ assertEquals("after", 296406, event.getPostUsed());
+ assertEquals("total", 3145728, event.getTotal());
+ assertEquals("pause", 0.066, event.getPause(), 0.0000001);
+
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_6_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_6_0.java
index 6d87b277..8933e77a 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_6_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderJRockit1_6_0.java
@@ -1,188 +1,188 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-
-/**
- * Tests for logs generated by JRockit 1.6 vm.
- *
- * @author Joerg Wuethrich
- * created on: 06.02.2013
- */
-public class TestDataReaderJRockit1_6_0 {
- private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
- private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
- }
-
- @Test
- public void testGcPrioPauseSingleParCon() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- InputStream in = getInputStream("SampleJRockit1_6_gc_mode_singleparcon.txt");
- DataReader reader = new DataReaderJRockit1_6_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 42, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 24.930, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 464309, event.getPreUsed());
- assertEquals("after", 282831, event.getPostUsed());
- assertEquals("total", 524288, event.getTotal());
- assertEquals("pause", 0.020957, event.getPause(), 0.0000001);
-
- assertEquals("number of warnings", 5, handler.getCount());
- }
-
- @Test
- public void testGcPrioPauseSingleParConVerbose() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- InputStream in = getInputStream("SampleJRockit1_6_verbose_gc_mode_singleparcon.txt");
- DataReader reader = new DataReaderJRockit1_6_0(in);
-
- assertTrue("should be DataReaderJRockit1_6_0 (but was " + reader.toString() + ")", reader instanceof DataReaderJRockit1_6_0);
-
- GCModel model = reader.read();
-
- assertEquals("count", 52, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 26.242, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 270909, event.getPreUsed());
- assertEquals("after", 210916, event.getPostUsed());
- assertEquals("total", 524288, event.getTotal());
- assertEquals("pause", 0.032087, event.getPause(), 0.0000001);
-
- assertEquals("number of warnings", 5, handler.getCount());
- }
-
- /**
- * This log file sample contains much more information about concurrent events
- * than is currently parsed. Still the parser must be able to extract the information
- * it can parse.
- */
- @Test
- public void testGenConVerbose() throws Exception {
- InputStream in = getInputStream("SampleJRockit1_6_verbose_gc_mode_gencon.txt");
- DataReader reader = new DataReaderJRockit1_6_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 15, model.size());
- }
-
- @Test
- public void testGenParVerboseNursery() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- InputStream in = getInputStream("SampleJRockit1_6_33_gc_mode_genpar_verbosenursery.txt");
- DataReader reader = new DataReaderJRockit1_6_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 3, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 124.644, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_16_YOUNG_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 453996, event.getPreUsed());
- assertEquals("after", 188846, event.getPostUsed());
- assertEquals("total", 786432, event.getTotal());
- assertEquals("pause", 0.055369, event.getPause(), 0.0000001);
-
- // generational algorithms have information about the generation sizing in the introduction of the gc log
- // -> check that it is present in the event
- event = event.getYoung();
- assertEquals("total", 393216, event.getTotal());
-
- event = (GCEvent) model.get(2);
- assertEquals("timestamp", 148.254, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 691255, event.getPreUsed());
- assertEquals("after", 279876, event.getPostUsed());
- assertEquals("total", 786432, event.getTotal());
- assertEquals("pause", 0.086713, event.getPause(), 0.0000001);
-
- // generational algorithms have information about the generation sizing in the introduction of the gc log
- // -> check that it is present in the event
- GCEvent eventTenured = event.getTenured();
- assertEquals("total", 786432 - 393216, eventTenured.getTotal());
-
- GCEvent eventYoung = event.getYoung();
- assertEquals("total", 393216, eventYoung.getTotal());
-
- assertEquals("number of warnings", 0, handler.getCount());
- }
-
- @Test
- public void testMalformedType() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.INFO);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- ByteArrayInputStream in = new ByteArrayInputStream(
- ("[INFO ][memory ] [YC#1] 9.743-9.793: YC-malformed 294974KB->122557KB (524288KB), 0.050 s, sum of pauses 49.692 ms, longest pause 49.692 ms.")
- .getBytes());
-
- DataReader reader = new DataReaderJRockit1_6_0(in);
- reader.read();
-
- // 3 INFO events:
- // Reading JRockit ... format
- // Failed to determine type ...
- // Reading done.
- assertEquals("number of infos", 3, handler.getCount());
-
- List logRecords = handler.getLogRecords();
- assertEquals("should start with 'Failed to determine type'", 0, logRecords.get(1).getMessage().indexOf("Failed to determine type"));
- }
-
- @Test
- public void testStandardLine() throws Exception {
- final ByteArrayInputStream in = new ByteArrayInputStream(
- ("[INFO ][memory ] [YC#1] 9.743-9.793: YC 294974KB->122557KB (524288KB), 0.050 s, sum of pauses 49.692 ms, longest pause 49.692 ms.")
- .getBytes());
-
- DataReader reader = new DataReaderJRockit1_6_0(in);
- GCModel model = reader.read();
-
- assertEquals("count", 1, model.size());
-
- GCEvent event = (GCEvent) model.get(0);
- assertEquals("timestamp", 9.743, event.getTimestamp(), 0.000001);
- assertEquals("name", Type.JROCKIT_16_YOUNG_GC.getName(), event.getExtendedType().getName());
- assertEquals("before", 294974, event.getPreUsed());
- assertEquals("after", 122557, event.getPostUsed());
- assertEquals("total", 524288, event.getTotal());
- assertEquals("pause", 0.049692, event.getPause(), 0.0000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+
+/**
+ * Tests for logs generated by JRockit 1.6 vm.
+ *
+ * @author Joerg Wuethrich
+ * created on: 06.02.2013
+ */
+public class TestDataReaderJRockit1_6_0 {
+ private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
+ private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_JROCKIT, fileName);
+ }
+
+ @Test
+ public void testGcPrioPauseSingleParCon() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ InputStream in = getInputStream("SampleJRockit1_6_gc_mode_singleparcon.txt");
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 42, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 24.930, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 464309, event.getPreUsed());
+ assertEquals("after", 282831, event.getPostUsed());
+ assertEquals("total", 524288, event.getTotal());
+ assertEquals("pause", 0.020957, event.getPause(), 0.0000001);
+
+ assertEquals("number of warnings", 5, handler.getCount());
+ }
+
+ @Test
+ public void testGcPrioPauseSingleParConVerbose() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ InputStream in = getInputStream("SampleJRockit1_6_verbose_gc_mode_singleparcon.txt");
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+
+ assertTrue("should be DataReaderJRockit1_6_0 (but was " + reader.toString() + ")", reader instanceof DataReaderJRockit1_6_0);
+
+ GCModel model = reader.read();
+
+ assertEquals("count", 52, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 26.242, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 270909, event.getPreUsed());
+ assertEquals("after", 210916, event.getPostUsed());
+ assertEquals("total", 524288, event.getTotal());
+ assertEquals("pause", 0.032087, event.getPause(), 0.0000001);
+
+ assertEquals("number of warnings", 5, handler.getCount());
+ }
+
+ /**
+ * This log file sample contains much more information about concurrent events
+ * than is currently parsed. Still the parser must be able to extract the information
+ * it can parse.
+ */
+ @Test
+ public void testGenConVerbose() throws Exception {
+ InputStream in = getInputStream("SampleJRockit1_6_verbose_gc_mode_gencon.txt");
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 15, model.size());
+ }
+
+ @Test
+ public void testGenParVerboseNursery() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ InputStream in = getInputStream("SampleJRockit1_6_33_gc_mode_genpar_verbosenursery.txt");
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 3, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 124.644, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_16_YOUNG_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 453996, event.getPreUsed());
+ assertEquals("after", 188846, event.getPostUsed());
+ assertEquals("total", 786432, event.getTotal());
+ assertEquals("pause", 0.055369, event.getPause(), 0.0000001);
+
+ // generational algorithms have information about the generation sizing in the introduction of the gc log
+ // -> check that it is present in the event
+ event = event.getYoung();
+ assertEquals("total", 393216, event.getTotal());
+
+ event = (GCEvent) model.get(2);
+ assertEquals("timestamp", 148.254, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_16_OLD_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 691255, event.getPreUsed());
+ assertEquals("after", 279876, event.getPostUsed());
+ assertEquals("total", 786432, event.getTotal());
+ assertEquals("pause", 0.086713, event.getPause(), 0.0000001);
+
+ // generational algorithms have information about the generation sizing in the introduction of the gc log
+ // -> check that it is present in the event
+ GCEvent eventTenured = event.getTenured();
+ assertEquals("total", 786432 - 393216, eventTenured.getTotal());
+
+ GCEvent eventYoung = event.getYoung();
+ assertEquals("total", 393216, eventYoung.getTotal());
+
+ assertEquals("number of warnings", 0, handler.getCount());
+ }
+
+ @Test
+ public void testMalformedType() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.INFO);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ ByteArrayInputStream in = new ByteArrayInputStream(
+ ("[INFO ][memory ] [YC#1] 9.743-9.793: YC-malformed 294974KB->122557KB (524288KB), 0.050 s, sum of pauses 49.692 ms, longest pause 49.692 ms.")
+ .getBytes());
+
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ reader.read();
+
+ // 3 INFO events:
+ // Reading JRockit ... format
+ // Failed to determine type ...
+ // Reading done.
+ assertEquals("number of infos", 3, handler.getCount());
+
+ List logRecords = handler.getLogRecords();
+ assertEquals("should start with 'Failed to determine type'", 0, logRecords.get(1).getMessage().indexOf("Failed to determine type"));
+ }
+
+ @Test
+ public void testStandardLine() throws Exception {
+ final ByteArrayInputStream in = new ByteArrayInputStream(
+ ("[INFO ][memory ] [YC#1] 9.743-9.793: YC 294974KB->122557KB (524288KB), 0.050 s, sum of pauses 49.692 ms, longest pause 49.692 ms.")
+ .getBytes());
+
+ DataReader reader = new DataReaderJRockit1_6_0(in);
+ GCModel model = reader.read();
+
+ assertEquals("count", 1, model.size());
+
+ GCEvent event = (GCEvent) model.get(0);
+ assertEquals("timestamp", 9.743, event.getTimestamp(), 0.000001);
+ assertEquals("name", Type.JROCKIT_16_YOUNG_GC.getName(), event.getExtendedType().getName());
+ assertEquals("before", 294974, event.getPreUsed());
+ assertEquals("after", 122557, event.getPostUsed());
+ assertEquals("total", 524288, event.getTotal());
+ assertEquals("pause", 0.049692, event.getPause(), 0.0000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_2_2.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_2_2.java
index 70511337..a494acf7 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_2_2.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_2_2.java
@@ -1,53 +1,53 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.util.Iterator;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderSun1_2_2 {
-
- @Test
- public void testParse1() throws Exception {
- AbstractGCEvent event1 = new GCEvent(0, 817, 187, 819, 0.008, AbstractGCEvent.Type.GC);
- AbstractGCEvent event2 = new GCEvent(0.02, 775, 188, 819, 0.005, AbstractGCEvent.Type.GC);
- AbstractGCEvent event3 = new GCEvent(0.741, 1213, 1213, 1639, 0.0, AbstractGCEvent.Type.GC);
- ByteArrayInputStream in = new ByteArrayInputStream(("\n" +
- "\n" +
- " \n" +
- " \n" +
- " \n" +
- " = 32), weak 0, final 2, phantom 0>\n" +
- "\n" +
- "\n" +
- "\n" +
- "\n" +
- "\n").getBytes());
- DataReader reader = new DataReaderSun1_2_2(in);
- GCModel model = reader.read();
- assertEquals(3, model.size());
- Iterator i = model.getGCEvents();
- GCEvent event = i.next();
- System.err.println(event.toString());
- assertEquals(event1, event);
- event = i.next();
- System.err.println(event.toString());
- assertEquals(event2, event);
- event = i.next();
- System.err.println(event.toString());
- assertEquals(event3, event);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.util.Iterator;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderSun1_2_2 {
+
+ @Test
+ public void testParse1() throws Exception {
+ AbstractGCEvent event1 = new GCEvent(0, 817, 187, 819, 0.008, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event2 = new GCEvent(0.02, 775, 188, 819, 0.005, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event3 = new GCEvent(0.741, 1213, 1213, 1639, 0.0, AbstractGCEvent.Type.GC);
+ ByteArrayInputStream in = new ByteArrayInputStream(("\n" +
+ "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " = 32), weak 0, final 2, phantom 0>\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n").getBytes());
+ DataReader reader = new DataReaderSun1_2_2(in);
+ GCModel model = reader.read();
+ assertEquals(3, model.size());
+ Iterator i = model.getGCEvents();
+ GCEvent event = i.next();
+ System.err.println(event.toString());
+ assertEquals(event1, event);
+ event = i.next();
+ System.err.println(event.toString());
+ assertEquals(event2, event);
+ event = i.next();
+ System.err.println(event.toString());
+ assertEquals(event3, event);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1.java
index 174e1d6b..71603f3c 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1.java
@@ -1,46 +1,46 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.util.Iterator;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderSun1_3_1 {
-
- @Test
- public void testParse1() throws Exception {
- AbstractGCEvent event1 = new GCEvent(0, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event2 = new GCEvent(1, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event3 = new GCEvent(2, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event4 = new GCEvent(3, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.FULL_GC);
- ByteArrayInputStream in = new ByteArrayInputStream("[GC 8968K->8230K(10912K), 0.0037192 secs]\r\n[GC 8968K->8230K(10[GC 8968K->8230K(10912K), 0.0037192 secs]912K), 0.0037192 secs]\r\n[Full GC 10753K->6046K(10912K), 0.3146707 secs]".getBytes());
- DataReader reader = new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
- GCModel model = reader.read();
- assertTrue(model.size() == 4);
- Iterator> i = model.getStopTheWorldEvents();
- AbstractGCEvent> event = i.next();
- assertEquals(event, event1);
- event = i.next();
- assertEquals(event, event2);
- event = i.next();
- assertEquals(event, event3);
- event = i.next();
- assertEquals(event, event4);
-
- assertEquals("throughput", 90.17011554119, model.getThroughput(), 0.00000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.util.Iterator;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderSun1_3_1 {
+
+ @Test
+ public void testParse1() throws Exception {
+ AbstractGCEvent event1 = new GCEvent(0, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event2 = new GCEvent(1, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event3 = new GCEvent(2, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event4 = new GCEvent(3, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.FULL_GC);
+ ByteArrayInputStream in = new ByteArrayInputStream("[GC 8968K->8230K(10912K), 0.0037192 secs]\r\n[GC 8968K->8230K(10[GC 8968K->8230K(10912K), 0.0037192 secs]912K), 0.0037192 secs]\r\n[Full GC 10753K->6046K(10912K), 0.3146707 secs]".getBytes());
+ DataReader reader = new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
+ GCModel model = reader.read();
+ assertTrue(model.size() == 4);
+ Iterator> i = model.getStopTheWorldEvents();
+ AbstractGCEvent> event = i.next();
+ assertEquals(event, event1);
+ event = i.next();
+ assertEquals(event, event2);
+ event = i.next();
+ assertEquals(event, event3);
+ event = i.next();
+ assertEquals(event, event4);
+
+ assertEquals("throughput", 90.17011554119, model.getThroughput(), 0.00000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1_19.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1_19.java
index e84eae91..c739aeba 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1_19.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_3_1_19.java
@@ -1,30 +1,30 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderSun1_3_1_19 {
-
- @Test
- public void testCMSPrintGCDetails() throws Exception {
- // does not seem to be implemented at all
-
- final InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, "SampleSun1_3_1_19SunOS.txt");
- final DataReader reader = new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
- GCModel model = reader.read();
-
- assertEquals("throughput", 95.21, model.getThroughput(), 0.01);
- }
-
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderSun1_3_1_19 {
+
+ @Test
+ public void testCMSPrintGCDetails() throws Exception {
+ // does not seem to be implemented at all
+
+ final InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, "SampleSun1_3_1_19SunOS.txt");
+ final DataReader reader = new DataReaderSun1_3_1(in, GcLogType.SUN1_3_1);
+ GCModel model = reader.read();
+
+ assertEquals("throughput", 95.21, model.getThroughput(), 0.01);
+ }
+
}
\ No newline at end of file
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_4_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_4_0.java
index cfaf9929..6d16e3a9 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_4_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_4_0.java
@@ -1,173 +1,173 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
-import com.tagtraum.perf.gcviewer.model.GCEvent;
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Tests some cases for java 1.4 (using DataReaderSun1_6_0).
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderSun1_4_0 {
- private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
- }
-
- /**
- * Test output for -XX:+PrintAdaptiveSizePolicy
- */
- @Test
- public void testAdaptiveSizePolicy() throws Exception {
- InputStream in = getInputStream("SampleSun1_4_0AdaptiveSizePolicy.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- GCModel model = reader.read();
-
- assertEquals("number of events", 9, model.getPause().getN());
- assertEquals("number of full gcs", 3, model.getFullGCPause().getN());
- assertEquals("number of gcs", 6, model.getGCPause().getN());
- assertEquals("total pause", 0.1978746, model.getPause().getSum(), 0.000001);
- assertEquals("full gc pause", 0.026889, model.getFullGCPause().getSum(), 0.000001);
- assertEquals("gc pause", 0.1709856, model.getGCPause().getSum(), 0.000001);
- }
-
- @Test
- public void testParse1() throws Exception {
- // original testcase was written with timestamp "2.23492e-006d" as first timestamp
- // I have never seen a timestamp writte in scientific format in the logfiles, so
- // I assume, that was some experiment here in the unittest
- AbstractGCEvent event1 = new GCEvent(0, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event2 = new GCEvent(1, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event3 = new GCEvent(2, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event4 = new GCEvent(3, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.FULL_GC);
- AbstractGCEvent event5 = new GCEvent(4, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.INC_GC);
- AbstractGCEvent event6 = new GCEvent(5, 52471, 22991, 75776, 1.0754938d, AbstractGCEvent.Type.GC);
- ByteArrayInputStream in = new ByteArrayInputStream("0.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n1.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n2.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n3.0: [Full GC 10753K->6046K(10912K), 0.3146707 secs]\r\n4.0: [Inc GC 10753K->6046K(10912K), 0.3146707 secs]\r\n5.0: [GC Desired survivor size 3342336 bytes, new threshold 1 (max 32) - age 1: 6684672 bytes, 6684672 total 52471K->22991K(75776K), 1.0754938 secs]".getBytes());
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- GCModel model = reader.read();
- assertEquals("model size", 6, model.size());
- Iterator> i = model.getStopTheWorldEvents();
- AbstractGCEvent> event = i.next();
- assertEquals("event 1", event, event1);
- event = i.next();
- assertEquals("event 2", event, event2);
- event = i.next();
- assertEquals("event 3", event, event3);
- event = i.next();
- assertEquals("event 4", event, event4);
- event = i.next();
- assertEquals("event 5", event, event5);
- event = i.next();
- assertEquals("event 6", event, event6);
-
- assertEquals("running time", 5 + 1.0754938, model.getRunningTime(), 0.0001);
- assertEquals("throughput", 71.75550076275, model.getThroughput(), 0.0000001);
- }
-
- @Test
- public void testNoFullGC() throws Exception {
- InputStream in = getInputStream("SampleSun1_4_2NoFullGC.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- GCModel model = reader.read();
- // we just look at the first six...
- /*
- 0.000: [GC 511K->180K(1984K), 0.0095672 secs]
- 0.691: [GC 433K->233K(1984K), 0.0056869 secs]
- 1.030: [GC 745K->242K(1984K), 0.0043429 secs]
- 1.378: [GC 753K->452K(1984K), 0.0094429 secs]
- 2.499: [GC 964K->690K(1984K), 0.0108058 secs]
- 2.831: [GC 1202K->856K(1984K), 0.0122599 secs]
- */
- AbstractGCEvent event1 = new GCEvent(0.0d, 511, 180, 1984, 0.0095672d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event2 = new GCEvent(0.691d, 433, 233, 1984, 0.0056869d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event3 = new GCEvent(1.030d, 745, 242, 1984, 0.0043429d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event4 = new GCEvent(1.378d, 753, 452, 1984, 0.0094429d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event5 = new GCEvent(2.499d, 964, 690, 1984, 0.0108058d, AbstractGCEvent.Type.GC);
- AbstractGCEvent event6 = new GCEvent(2.831d, 1202, 856, 1984, 0.0122599d, AbstractGCEvent.Type.GC);
-
- assertEquals("model size", 12, model.size());
- Iterator i = model.getGCEvents();
- AbstractGCEvent event = i.next();
- assertEquals("event 1", event, event1);
- event = i.next();
- assertEquals("event 2", event, event2);
- event = i.next();
- assertEquals("event 3", event, event3);
- event = i.next();
- assertEquals("event 4", event, event4);
- event = i.next();
- assertEquals("event 5", event, event5);
- event = i.next();
- assertEquals("event 6", event, event6);
-
- assertEquals("throughput", 98.928592417159, model.getThroughput(), 0.00000000001);
- }
-
- @Test
- public void testPrintGCDetails() throws Exception {
- InputStream in = getInputStream("SampleSun1_4_2PrintGCDetails.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- GCModel model = reader.read();
- /*
- 0.000: [GC 0.000: [DefNew: 1534K->128K(1664K), 0.0082759 secs] 1534K->276K(16256K), 0.0084272 secs]
- 11.653: [Full GC 11.653: [Tenured: 5634K->5492K(14592K), 0.2856516 secs] 6560K->5492K(16256K), 0.2858561 secs]
- 22.879: [GC 22.879: [DefNew: 1855K->125K(1856K), 0.0099038 secs]22.889: [Tenured: 14638K->9916K(14720K), 0.8038262 secs] 16358K->9916K(16576K), 0.8142078 secs]
- 31.788: [Full GC 31.788: [Tenured: 16141K->13914K(16528K), 0.8032950 secs] 17881K->13914K(18640K), 0.8036514 secs]
- */
- AbstractGCEvent event1 = new GCEvent(0.0d, 1534, 276, 16256, 0.0084272d, AbstractGCEvent.Type.GC);
- event1.add(new GCEvent(0.0d, 1534, 128, 1664, 0.0082759d, AbstractGCEvent.Type.DEF_NEW));
- AbstractGCEvent event2 = new GCEvent(11.653d, 6560, 5492, 16256, 0.2858561d, AbstractGCEvent.Type.FULL_GC);
- event2.add(new GCEvent(11.653d, 5634, 5492, 14592, 0.2856516d, AbstractGCEvent.Type.TENURED));
- AbstractGCEvent event3 = new GCEvent(22.879d, 16358, 9916, 16576, 0.8142078d, AbstractGCEvent.Type.GC);
- event3.add(new GCEvent(22.879d, 1855, 125, 1856, 0.0099038d, AbstractGCEvent.Type.DEF_NEW));
- event3.add(new GCEvent(22.889d, 14638, 9916, 14720, 0.8038262d, AbstractGCEvent.Type.TENURED));
- AbstractGCEvent event4 = new GCEvent(31.788d, 17881, 13914, 18640, 0.8036514d, AbstractGCEvent.Type.FULL_GC);
- event4.add(new GCEvent(31.788d, 16141, 13914, 16528, 0.8032950d, AbstractGCEvent.Type.TENURED));
-
- assertEquals("model.size()", 4, model.size());
- Iterator> i = model.getStopTheWorldEvents();
- AbstractGCEvent> event = i.next();
- assertEquals("event 1", event1, event);
- event = i.next();
- assertEquals("event 2", event2, event);
- event = i.next();
- assertEquals("event 3", event3, event);
- event = i.next();
- assertEquals("event 4", event4, event);
-
- assertEquals("throughput", 94.133029724, model.getThroughput(), 0.000001);
- }
-
- @Test
- public void testPrintHeapAtGC() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
-
- InputStream in = getInputStream("SampleSun1_4_0PSPrintHeapAtGC.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
- GCModel model = reader.read();
-
- assertEquals("GC count", 2, model.size());
- assertEquals("GC pause", 0.0083579, model.getGCPause().getMax(), 0.00000001);
- assertEquals("Full GC pause", 0.0299536, model.getFullGCPause().getMax(), 0.00000001);
- assertEquals("number of errors", 0, handler.getCount());
- }
-
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent;
+import com.tagtraum.perf.gcviewer.model.GCEvent;
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Tests some cases for java 1.4 (using DataReaderSun1_6_0).
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderSun1_4_0 {
+ private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
+ }
+
+ /**
+ * Test output for -XX:+PrintAdaptiveSizePolicy
+ */
+ @Test
+ public void testAdaptiveSizePolicy() throws Exception {
+ InputStream in = getInputStream("SampleSun1_4_0AdaptiveSizePolicy.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ GCModel model = reader.read();
+
+ assertEquals("number of events", 9, model.getPause().getN());
+ assertEquals("number of full gcs", 3, model.getFullGCPause().getN());
+ assertEquals("number of gcs", 6, model.getGCPause().getN());
+ assertEquals("total pause", 0.1978746, model.getPause().getSum(), 0.000001);
+ assertEquals("full gc pause", 0.026889, model.getFullGCPause().getSum(), 0.000001);
+ assertEquals("gc pause", 0.1709856, model.getGCPause().getSum(), 0.000001);
+ }
+
+ @Test
+ public void testParse1() throws Exception {
+ // original testcase was written with timestamp "2.23492e-006d" as first timestamp
+ // I have never seen a timestamp writte in scientific format in the logfiles, so
+ // I assume, that was some experiment here in the unittest
+ AbstractGCEvent event1 = new GCEvent(0, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event2 = new GCEvent(1, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event3 = new GCEvent(2, 8968, 8230, 10912, 0.0037192d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event4 = new GCEvent(3, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.FULL_GC);
+ AbstractGCEvent event5 = new GCEvent(4, 10753, 6046, 10912, 0.3146707d, AbstractGCEvent.Type.INC_GC);
+ AbstractGCEvent event6 = new GCEvent(5, 52471, 22991, 75776, 1.0754938d, AbstractGCEvent.Type.GC);
+ ByteArrayInputStream in = new ByteArrayInputStream("0.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n1.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n2.0: [GC 8968K->8230K(10912K), 0.0037192 secs]\r\n3.0: [Full GC 10753K->6046K(10912K), 0.3146707 secs]\r\n4.0: [Inc GC 10753K->6046K(10912K), 0.3146707 secs]\r\n5.0: [GC Desired survivor size 3342336 bytes, new threshold 1 (max 32) - age 1: 6684672 bytes, 6684672 total 52471K->22991K(75776K), 1.0754938 secs]".getBytes());
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ GCModel model = reader.read();
+ assertEquals("model size", 6, model.size());
+ Iterator> i = model.getStopTheWorldEvents();
+ AbstractGCEvent> event = i.next();
+ assertEquals("event 1", event, event1);
+ event = i.next();
+ assertEquals("event 2", event, event2);
+ event = i.next();
+ assertEquals("event 3", event, event3);
+ event = i.next();
+ assertEquals("event 4", event, event4);
+ event = i.next();
+ assertEquals("event 5", event, event5);
+ event = i.next();
+ assertEquals("event 6", event, event6);
+
+ assertEquals("running time", 5 + 1.0754938, model.getRunningTime(), 0.0001);
+ assertEquals("throughput", 71.75550076275, model.getThroughput(), 0.0000001);
+ }
+
+ @Test
+ public void testNoFullGC() throws Exception {
+ InputStream in = getInputStream("SampleSun1_4_2NoFullGC.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ GCModel model = reader.read();
+ // we just look at the first six...
+ /*
+ 0.000: [GC 511K->180K(1984K), 0.0095672 secs]
+ 0.691: [GC 433K->233K(1984K), 0.0056869 secs]
+ 1.030: [GC 745K->242K(1984K), 0.0043429 secs]
+ 1.378: [GC 753K->452K(1984K), 0.0094429 secs]
+ 2.499: [GC 964K->690K(1984K), 0.0108058 secs]
+ 2.831: [GC 1202K->856K(1984K), 0.0122599 secs]
+ */
+ AbstractGCEvent event1 = new GCEvent(0.0d, 511, 180, 1984, 0.0095672d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event2 = new GCEvent(0.691d, 433, 233, 1984, 0.0056869d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event3 = new GCEvent(1.030d, 745, 242, 1984, 0.0043429d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event4 = new GCEvent(1.378d, 753, 452, 1984, 0.0094429d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event5 = new GCEvent(2.499d, 964, 690, 1984, 0.0108058d, AbstractGCEvent.Type.GC);
+ AbstractGCEvent event6 = new GCEvent(2.831d, 1202, 856, 1984, 0.0122599d, AbstractGCEvent.Type.GC);
+
+ assertEquals("model size", 12, model.size());
+ Iterator i = model.getGCEvents();
+ AbstractGCEvent event = i.next();
+ assertEquals("event 1", event, event1);
+ event = i.next();
+ assertEquals("event 2", event, event2);
+ event = i.next();
+ assertEquals("event 3", event, event3);
+ event = i.next();
+ assertEquals("event 4", event, event4);
+ event = i.next();
+ assertEquals("event 5", event, event5);
+ event = i.next();
+ assertEquals("event 6", event, event6);
+
+ assertEquals("throughput", 98.928592417159, model.getThroughput(), 0.00000000001);
+ }
+
+ @Test
+ public void testPrintGCDetails() throws Exception {
+ InputStream in = getInputStream("SampleSun1_4_2PrintGCDetails.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ GCModel model = reader.read();
+ /*
+ 0.000: [GC 0.000: [DefNew: 1534K->128K(1664K), 0.0082759 secs] 1534K->276K(16256K), 0.0084272 secs]
+ 11.653: [Full GC 11.653: [Tenured: 5634K->5492K(14592K), 0.2856516 secs] 6560K->5492K(16256K), 0.2858561 secs]
+ 22.879: [GC 22.879: [DefNew: 1855K->125K(1856K), 0.0099038 secs]22.889: [Tenured: 14638K->9916K(14720K), 0.8038262 secs] 16358K->9916K(16576K), 0.8142078 secs]
+ 31.788: [Full GC 31.788: [Tenured: 16141K->13914K(16528K), 0.8032950 secs] 17881K->13914K(18640K), 0.8036514 secs]
+ */
+ AbstractGCEvent event1 = new GCEvent(0.0d, 1534, 276, 16256, 0.0084272d, AbstractGCEvent.Type.GC);
+ event1.add(new GCEvent(0.0d, 1534, 128, 1664, 0.0082759d, AbstractGCEvent.Type.DEF_NEW));
+ AbstractGCEvent event2 = new GCEvent(11.653d, 6560, 5492, 16256, 0.2858561d, AbstractGCEvent.Type.FULL_GC);
+ event2.add(new GCEvent(11.653d, 5634, 5492, 14592, 0.2856516d, AbstractGCEvent.Type.TENURED));
+ AbstractGCEvent event3 = new GCEvent(22.879d, 16358, 9916, 16576, 0.8142078d, AbstractGCEvent.Type.GC);
+ event3.add(new GCEvent(22.879d, 1855, 125, 1856, 0.0099038d, AbstractGCEvent.Type.DEF_NEW));
+ event3.add(new GCEvent(22.889d, 14638, 9916, 14720, 0.8038262d, AbstractGCEvent.Type.TENURED));
+ AbstractGCEvent event4 = new GCEvent(31.788d, 17881, 13914, 18640, 0.8036514d, AbstractGCEvent.Type.FULL_GC);
+ event4.add(new GCEvent(31.788d, 16141, 13914, 16528, 0.8032950d, AbstractGCEvent.Type.TENURED));
+
+ assertEquals("model.size()", 4, model.size());
+ Iterator> i = model.getStopTheWorldEvents();
+ AbstractGCEvent> event = i.next();
+ assertEquals("event 1", event1, event);
+ event = i.next();
+ assertEquals("event 2", event2, event);
+ event = i.next();
+ assertEquals("event 3", event3, event);
+ event = i.next();
+ assertEquals("event 4", event4, event);
+
+ assertEquals("throughput", 94.133029724, model.getThroughput(), 0.000001);
+ }
+
+ @Test
+ public void testPrintHeapAtGC() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+
+ InputStream in = getInputStream("SampleSun1_4_0PSPrintHeapAtGC.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_4);
+ GCModel model = reader.read();
+
+ assertEquals("GC count", 2, model.size());
+ assertEquals("GC pause", 0.0083579, model.getGCPause().getMax(), 0.00000001);
+ assertEquals("Full GC pause", 0.0299536, model.getFullGCPause().getMax(), 0.00000001);
+ assertEquals("number of errors", 0, handler.getCount());
+ }
+
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_5_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_5_0.java
index 421e04ca..3f161ca8 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_5_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_5_0.java
@@ -1,117 +1,117 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Tests some cases for java 1.5 (using DataReaderSun1_6_0).
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDataReaderSun1_5_0 {
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
- }
-
- /**
- * Test output for -XX:+PrintAdaptiveSizePolicy
- */
- @Test
- public void testAdaptiveSizePolicy() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0AdaptiveSizePolicy.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("number of events", 6, model.getPause().getN());
- assertEquals("number of full gcs", 1, model.getFullGCPause().getN());
- assertEquals("number of gcs", 5, model.getGCPause().getN());
- assertEquals("total pause", 0.1024222, model.getPause().getSum(), 0.000001);
- assertEquals("full gc pause", 0.0583435, model.getFullGCPause().getSum(), 0.000001);
- assertEquals("gc pause", 0.0440787, model.getGCPause().getSum(), 0.000001);
- }
-
- @Test
- public void testCMSPrintGCDetails() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0CMS_PrintGCDetails.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("size", 515, model.size());
- assertEquals("throughput", 88.2823289184, model.getThroughput(), 0.00000001);
- assertEquals("sum of pauses", model.getPause().getSum(), model.getFullGCPause().getSum() + model.getGCPause().getSum(), 0.0000001);
- assertEquals("total pause", 9.1337492, model.getPause().getSum(), 0.0000001);
- assertEquals("full gc pause", 7.4672903, model.getFullGCPause().getSum(), 0.00000001);
- }
-
- @Test
- public void testParallelOldGC() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0ParallelOldGC.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("size", 1, model.size());
- assertEquals("gc pause", 27.0696262, model.getFullGCPause().getMax(), 0.000001);
- }
-
- @Test
- public void testCMSIncrementalPacing() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0CMS_IncrementalPacing.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("size", 810, model.size());
- assertEquals("throughput", 94.181240109114, model.getThroughput(), 0.00000001);
- assertEquals("total gc pause", 2.3410947, model.getPause().getSum(), 0.000000001);
- assertEquals("gc pause", 2.3410947, model.getGCPause().getSum(), 0.000000001);
- assertEquals("full gc paus", 0.0, model.getFullGCPause().getSum(), 0.01);
- }
-
- @Test
- public void testPromotionFailure() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0PromotionFailure.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("size", 6, model.size());
- assertEquals("throughput", 98.0937624615, model.getThroughput(), 0.00000001);
- assertEquals("gc pause", 8.413616, model.getPause().getSum(), 0.000001);
- }
-
- @Test
- public void testCMSConcurrentModeFailure() throws Exception {
- final InputStream in = getInputStream("SampleSun1_5_0ConcurrentModeFailure.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("size", 3417, model.size());
- assertEquals("throughput", 78.558339113, model.getThroughput(), 0.00000001);
- assertEquals("gc pause", 181.8116798, model.getPause().getSum(), 0.000000001);
- }
-
- @Test
- public void testCmsScavengeBeforeRemark() throws Exception {
- final ByteArrayInputStream in = new ByteArrayInputStream(
- ("0.871: [GC[YG occupancy: 16241 K (16320 K)]0.871: [Scavenge-Before-Remark0.871: [Full GC 0.871: [ParNew: 16241K->0K(16320K), 0.0311294 secs] 374465K->374455K(524224K), 0.0312110 secs]" +
- "\n, 0.0312323 secs]" +
- "\n0.902: [Rescan (parallel) , 0.0310561 secs]0.933: [weak refs processing, 0.0000152 secs] [1 CMS-remark: 374455K(507904K)] 374455K(524224K), 0.0624207 secs]")
- .getBytes());
-
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
- GCModel model = reader.read();
-
- assertEquals("gc count", 2, model.size());
- assertEquals("full gc pause", 0.0312110, model.getFullGCPause().getMax(), 0.000001);
- assertEquals("remark pause", 0.0624207 - 0.0312110, model.getGCPause().getMax(), 0.000000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Tests some cases for java 1.5 (using DataReaderSun1_6_0).
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDataReaderSun1_5_0 {
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
+ }
+
+ /**
+ * Test output for -XX:+PrintAdaptiveSizePolicy
+ */
+ @Test
+ public void testAdaptiveSizePolicy() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0AdaptiveSizePolicy.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("number of events", 6, model.getPause().getN());
+ assertEquals("number of full gcs", 1, model.getFullGCPause().getN());
+ assertEquals("number of gcs", 5, model.getGCPause().getN());
+ assertEquals("total pause", 0.1024222, model.getPause().getSum(), 0.000001);
+ assertEquals("full gc pause", 0.0583435, model.getFullGCPause().getSum(), 0.000001);
+ assertEquals("gc pause", 0.0440787, model.getGCPause().getSum(), 0.000001);
+ }
+
+ @Test
+ public void testCMSPrintGCDetails() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0CMS_PrintGCDetails.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("size", 515, model.size());
+ assertEquals("throughput", 88.2823289184, model.getThroughput(), 0.00000001);
+ assertEquals("sum of pauses", model.getPause().getSum(), model.getFullGCPause().getSum() + model.getGCPause().getSum(), 0.0000001);
+ assertEquals("total pause", 9.1337492, model.getPause().getSum(), 0.0000001);
+ assertEquals("full gc pause", 7.4672903, model.getFullGCPause().getSum(), 0.00000001);
+ }
+
+ @Test
+ public void testParallelOldGC() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0ParallelOldGC.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("size", 1, model.size());
+ assertEquals("gc pause", 27.0696262, model.getFullGCPause().getMax(), 0.000001);
+ }
+
+ @Test
+ public void testCMSIncrementalPacing() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0CMS_IncrementalPacing.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("size", 810, model.size());
+ assertEquals("throughput", 94.181240109114, model.getThroughput(), 0.00000001);
+ assertEquals("total gc pause", 2.3410947, model.getPause().getSum(), 0.000000001);
+ assertEquals("gc pause", 2.3410947, model.getGCPause().getSum(), 0.000000001);
+ assertEquals("full gc paus", 0.0, model.getFullGCPause().getSum(), 0.01);
+ }
+
+ @Test
+ public void testPromotionFailure() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0PromotionFailure.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("size", 6, model.size());
+ assertEquals("throughput", 98.0937624615, model.getThroughput(), 0.00000001);
+ assertEquals("gc pause", 8.413616, model.getPause().getSum(), 0.000001);
+ }
+
+ @Test
+ public void testCMSConcurrentModeFailure() throws Exception {
+ final InputStream in = getInputStream("SampleSun1_5_0ConcurrentModeFailure.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("size", 3417, model.size());
+ assertEquals("throughput", 78.558339113, model.getThroughput(), 0.00000001);
+ assertEquals("gc pause", 181.8116798, model.getPause().getSum(), 0.000000001);
+ }
+
+ @Test
+ public void testCmsScavengeBeforeRemark() throws Exception {
+ final ByteArrayInputStream in = new ByteArrayInputStream(
+ ("0.871: [GC[YG occupancy: 16241 K (16320 K)]0.871: [Scavenge-Before-Remark0.871: [Full GC 0.871: [ParNew: 16241K->0K(16320K), 0.0311294 secs] 374465K->374455K(524224K), 0.0312110 secs]" +
+ "\n, 0.0312323 secs]" +
+ "\n0.902: [Rescan (parallel) , 0.0310561 secs]0.933: [weak refs processing, 0.0000152 secs] [1 CMS-remark: 374455K(507904K)] 374455K(524224K), 0.0624207 secs]")
+ .getBytes());
+
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_5);
+ GCModel model = reader.read();
+
+ assertEquals("gc count", 2, model.size());
+ assertEquals("full gc pause", 0.0312110, model.getFullGCPause().getMax(), 0.000001);
+ assertEquals("remark pause", 0.0624207 - 0.0312110, model.getGCPause().getMax(), 0.000000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_8_0.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_8_0.java
index 4b25eeca..5f4eb34b 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_8_0.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderSun1_8_0.java
@@ -1,43 +1,43 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.GCModel;
-
-/**
- * Test logs generated specifically by java 1.8.
- *
- * @author Joerg Wuethrich
- * created on: 25.09.2013
- */
-public class TestDataReaderSun1_8_0 {
- private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
- private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
-
- private InputStream getInputStream(String fileName) throws IOException {
- return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
- }
-
- @Test
- public void parallelPrintHeapAtGC() throws Exception {
- TestLogHandler handler = new TestLogHandler();
- handler.setLevel(Level.WARNING);
- IMP_LOGGER.addHandler(handler);
- DATA_READER_FACTORY_LOGGER.addHandler(handler);
-
- final InputStream in = getInputStream("SampleSun1_8_0ParallelPrintHeapAtGC.txt");
- final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_8);
- GCModel model = reader.read();
-
- assertEquals("gc pause sum", 0.0103603, model.getPause().getSum(), 0.000000001);
-
- assertEquals("number of errors", 0, handler.getCount());
- }
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.GCModel;
+
+/**
+ * Test logs generated specifically by java 1.8.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.09.2013
+ */
+public class TestDataReaderSun1_8_0 {
+ private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
+ private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
+
+ private InputStream getInputStream(String fileName) throws IOException {
+ return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_OPENJDK, fileName);
+ }
+
+ @Test
+ public void parallelPrintHeapAtGC() throws Exception {
+ TestLogHandler handler = new TestLogHandler();
+ handler.setLevel(Level.WARNING);
+ IMP_LOGGER.addHandler(handler);
+ DATA_READER_FACTORY_LOGGER.addHandler(handler);
+
+ final InputStream in = getInputStream("SampleSun1_8_0ParallelPrintHeapAtGC.txt");
+ final DataReader reader = new DataReaderSun1_6_0(in, GcLogType.SUN1_8);
+ GCModel model = reader.read();
+
+ assertEquals("gc pause sum", 0.0103603, model.getPause().getSum(), 0.000000001);
+
+ assertEquals("number of errors", 0, handler.getCount());
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestLogHandler.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestLogHandler.java
index e1ddc112..3b080a01 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/TestLogHandler.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/TestLogHandler.java
@@ -1,44 +1,44 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.logging.Handler;
-import java.util.logging.LogRecord;
-
-/**
- * Simple implementation of a handler for java.util.logging to support checks of logging
- * in unittests.
- *
- * @author Joerg Wuethrich
- * created on: 08.03.2013
- */
-public class TestLogHandler extends Handler {
-
- private List recordList = new LinkedList();
-
- public int getCount() {
- return recordList.size();
- }
-
- public List getLogRecords() {
- return recordList;
- }
-
- @Override
- public void publish(LogRecord record) {
- if (isLoggable(record)) {
- recordList.add(record);
- }
- }
-
- @Override
- public void flush() {
- // nothing to do
- }
-
- @Override
- public void close() throws SecurityException {
- // nothing to do
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.logging.Handler;
+import java.util.logging.LogRecord;
+
+/**
+ * Simple implementation of a handler for java.util.logging to support checks of logging
+ * in unittests.
+ *
+ * @author Joerg Wuethrich
+ * created on: 08.03.2013
+ */
+public class TestLogHandler extends Handler {
+
+ private List recordList = new LinkedList();
+
+ public int getCount() {
+ return recordList.size();
+ }
+
+ public List getLogRecords() {
+ return recordList;
+ }
+
+ @Override
+ public void publish(LogRecord record) {
+ if (isLoggable(record)) {
+ recordList.add(record);
+ }
+ }
+
+ @Override
+ public void flush() {
+ // nothing to do
+ }
+
+ @Override
+ public void close() throws SecurityException {
+ // nothing to do
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/imp/UnittestHelper.java b/src/test/java/com/tagtraum/perf/gcviewer/imp/UnittestHelper.java
index 3792843c..365b497b 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/imp/UnittestHelper.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/imp/UnittestHelper.java
@@ -1,70 +1,70 @@
-package com.tagtraum.perf.gcviewer.imp;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-/**
- * Helper class to support the unittests.
- *
- * @author Joerg Wuethrich
- * created on: 22.05.2013
- */
-public class UnittestHelper {
-
- public static final String FOLDER_HP = "hp";
- public static final String FOLDER_IBM = "ibm";
- public static final String FOLDER_JROCKIT = "jrockit";
- public static final String FOLDER_OPENJDK = "openjdk";
- public static final String FOLDER_HTTP = "http";
-
- /**
- * Load resource as stream if it is present somewhere in the classpath.
- * @param name Name of the resource
- * @return instance of an input stream or null
if the resource couldn't be found
- * @throws IOException if resource can't be found
- */
- public static InputStream getResourceAsStream(String name) throws IOException {
- InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
- if (in == null) {
- throw new IOException("could not find " + name + " in classpath");
- }
-
- return in;
- }
-
- /**
- * Load a resource as stream from a given folder
.
- *
- * @see #getResourceAsStream(String)
- */
- public static InputStream getResourceAsStream(String folder, String name) throws IOException {
- return getResourceAsStream(folder + File.separator + name);
- }
-
- /**
- * Load resource as stream if it is present somewhere in the classpath.
- * @param name Name of the resource
- * @return instance of an input stream or null
if the resource couldn't be found
- * @throws IOException if resource can't be found
- */
- public static URL getResource(String name) throws IOException {
- URL url = Thread.currentThread().getContextClassLoader().getResource(name);
- if (url == null) {
- throw new IOException("could not find " + name + " in classpath");
- }
-
- return url;
- }
-
- /**
- * Get URL of a resource from a given folder
.
- *
- * @see #getResource(String)
- */
- public static URL getResource(String folder, String name) throws IOException {
- return getResource(folder + File.separator + name);
- }
-
-}
+package com.tagtraum.perf.gcviewer.imp;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+/**
+ * Helper class to support the unittests.
+ *
+ * @author Joerg Wuethrich
+ * created on: 22.05.2013
+ */
+public class UnittestHelper {
+
+ public static final String FOLDER_HP = "hp";
+ public static final String FOLDER_IBM = "ibm";
+ public static final String FOLDER_JROCKIT = "jrockit";
+ public static final String FOLDER_OPENJDK = "openjdk";
+ public static final String FOLDER_HTTP = "http";
+
+ /**
+ * Load resource as stream if it is present somewhere in the classpath.
+ * @param name Name of the resource
+ * @return instance of an input stream or null
if the resource couldn't be found
+ * @throws IOException if resource can't be found
+ */
+ public static InputStream getResourceAsStream(String name) throws IOException {
+ InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
+ if (in == null) {
+ throw new IOException("could not find " + name + " in classpath");
+ }
+
+ return in;
+ }
+
+ /**
+ * Load a resource as stream from a given folder
.
+ *
+ * @see #getResourceAsStream(String)
+ */
+ public static InputStream getResourceAsStream(String folder, String name) throws IOException {
+ return getResourceAsStream(folder + File.separator + name);
+ }
+
+ /**
+ * Load resource as stream if it is present somewhere in the classpath.
+ * @param name Name of the resource
+ * @return instance of an input stream or null
if the resource couldn't be found
+ * @throws IOException if resource can't be found
+ */
+ public static URL getResource(String name) throws IOException {
+ URL url = Thread.currentThread().getContextClassLoader().getResource(name);
+ if (url == null) {
+ throw new IOException("could not find " + name + " in classpath");
+ }
+
+ return url;
+ }
+
+ /**
+ * Get URL of a resource from a given folder
.
+ *
+ * @see #getResource(String)
+ */
+ public static URL getResource(String folder, String name) throws IOException {
+ return getResource(folder + File.separator + name);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/math/TestAllMath.java b/src/test/java/com/tagtraum/perf/gcviewer/math/TestAllMath.java
index 8ee1d4cb..e53c0d73 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/math/TestAllMath.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/math/TestAllMath.java
@@ -1,19 +1,19 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * TestSuite in JUnit 4 style; points to all testcases, that should be run.
- *
- * @author Joerg Wuethrich
- * created on: 25.01.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- TestRegressionLine.class,
- TestDoubleData.class,
- TestIntData.class
-})
-public class TestAllMath {
-}
+package com.tagtraum.perf.gcviewer.math;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * TestSuite in JUnit 4 style; points to all testcases, that should be run.
+ *
+ * @author Joerg Wuethrich
+ * created on: 25.01.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestRegressionLine.class,
+ TestDoubleData.class,
+ TestIntData.class
+})
+public class TestAllMath {
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/math/TestDoubleData.java b/src/test/java/com/tagtraum/perf/gcviewer/math/TestDoubleData.java
index 73e2c475..4da30334 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/math/TestDoubleData.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/math/TestDoubleData.java
@@ -1,31 +1,31 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestDoubleData {
-
- @Test
- public void testSimpleAverage() throws Exception {
- double[] x = {1.0, 2.0};
- assertEquals("Simple average", 1.5, DoubleData.average(x), 0.0);
- }
-
- public void testSimpleStandardDeviation() throws Exception {
- DoubleData doubleData = new DoubleData();
- doubleData.add(1);
- doubleData.add(1);
- doubleData.add(-1);
- doubleData.add(-1);
-
- assertEquals("Simple std deviation", 1.1547005383792515, doubleData.standardDeviation(), 0.0000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.math;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestDoubleData {
+
+ @Test
+ public void testSimpleAverage() throws Exception {
+ double[] x = {1.0, 2.0};
+ assertEquals("Simple average", 1.5, DoubleData.average(x), 0.0);
+ }
+
+ public void testSimpleStandardDeviation() throws Exception {
+ DoubleData doubleData = new DoubleData();
+ doubleData.add(1);
+ doubleData.add(1);
+ doubleData.add(-1);
+ doubleData.add(-1);
+
+ assertEquals("Simple std deviation", 1.1547005383792515, doubleData.standardDeviation(), 0.0000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/math/TestIntData.java b/src/test/java/com/tagtraum/perf/gcviewer/math/TestIntData.java
index a44ed4f2..e4bbfc52 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/math/TestIntData.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/math/TestIntData.java
@@ -1,34 +1,34 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestIntData {
-
- @Test
- public void testSimpleAverage() throws Exception {
- IntData intData = new IntData();
- intData.add(1);
- intData.add(2);
-
- assertEquals("Simple average", 1.5, intData.average(), 0.0);
- }
-
- public void testSimpleStandardDeviation() throws Exception {
- IntData intData = new IntData();
- intData.add(1);
- intData.add(1);
- intData.add(-1);
- intData.add(-1);
-
- assertEquals("Simple std deviation", 1.1547005383792515, intData.standardDeviation(), 0.0000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.math;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestIntData {
+
+ @Test
+ public void testSimpleAverage() throws Exception {
+ IntData intData = new IntData();
+ intData.add(1);
+ intData.add(2);
+
+ assertEquals("Simple average", 1.5, intData.average(), 0.0);
+ }
+
+ public void testSimpleStandardDeviation() throws Exception {
+ IntData intData = new IntData();
+ intData.add(1);
+ intData.add(1);
+ intData.add(-1);
+ intData.add(-1);
+
+ assertEquals("Simple std deviation", 1.1547005383792515, intData.standardDeviation(), 0.0000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/math/TestRegressionLine.java b/src/test/java/com/tagtraum/perf/gcviewer/math/TestRegressionLine.java
index fdc61d2d..966d0845 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/math/TestRegressionLine.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/math/TestRegressionLine.java
@@ -1,23 +1,23 @@
-package com.tagtraum.perf.gcviewer.math;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-/**
- *
- * Date: Jan 30, 2002
- * Time: 5:53:55 PM
- * @author Hendrik Schreiber
- */
-public class TestRegressionLine {
-
- @Test
- public void testSimpleSlope() throws Exception {
- double[] x = {0.0, 1.0, 2.0, 3.0};
- double[] y = {0.0, 1.0, 2.0, 3.0};
-
- assertEquals("Simple regression line slope test", 1.0, RegressionLine.slope(x, y), 0.0);
- }
-
-}
+package com.tagtraum.perf.gcviewer.math;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ *
+ * Date: Jan 30, 2002
+ * Time: 5:53:55 PM
+ * @author Hendrik Schreiber
+ */
+public class TestRegressionLine {
+
+ @Test
+ public void testSimpleSlope() throws Exception {
+ double[] x = {0.0, 1.0, 2.0, 3.0};
+ double[] y = {0.0, 1.0, 2.0, 3.0};
+
+ assertEquals("Simple regression line slope test", 1.0, RegressionLine.slope(x, y), 0.0);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/model/TestAbstractGCEvent.java b/src/test/java/com/tagtraum/perf/gcviewer/model/TestAbstractGCEvent.java
index a719c170..29e47221 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/model/TestAbstractGCEvent.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/model/TestAbstractGCEvent.java
@@ -1,104 +1,104 @@
-package com.tagtraum.perf.gcviewer.model;
-
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.ExtendedType;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Generation;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-
-/**
- * Tests for methods written in {@link AbstractGCEvent}.
- *
- * @author Joerg Wuethrich
- * created on: 30.09.2012
- */
-public class TestAbstractGCEvent {
-
- @Test
- public void getGenerationParNew() {
- // 6.727: [GC 6.727: [ParNew: 1610619K->7990K(22649280K), 0.0379110 secs] 1610619K->7990K(47815104K), 0.0380570 secs] [Times: user=0.59 sys=0.04, real=0.04 secs]
- GCEvent event = new GCEvent();
- event.setType(Type.GC);
-
- GCEvent parNewEvent = new GCEvent();
- parNewEvent.setType(Type.PAR_NEW);
-
- event.add(parNewEvent);
-
- assertEquals("generation", Generation.YOUNG, event.getGeneration());
- }
-
- @Test
- public void getGenerationCmsInitialMark() {
- // 6.765: [GC [1 CMS-initial-mark: 0K(25165824K)] 410644K(47815104K), 0.0100670 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
- GCEvent event = new GCEvent();
- event.setType(Type.GC);
-
- GCEvent CmsInitialMarkEvent = new GCEvent();
- CmsInitialMarkEvent.setType(Type.CMS_INITIAL_MARK);
-
- event.add(CmsInitialMarkEvent);
-
- assertEquals("generation", Generation.TENURED, event.getGeneration());
- }
-
- @Test
- public void getGenerationCmsRemark() {
- // 12.203: [GC[YG occupancy: 11281900 K (22649280 K)]12.203: [Rescan (parallel) , 0.3773770 secs]12.580: [weak refs processing, 0.0000310 secs]12.580: [class unloading, 0.0055480 secs]12.586: [scrub symbol & string tables, 0.0041920 secs] [1 CMS-remark: 0K(25165824K)] 11281900K(47815104K), 0.3881550 secs] [Times: user=17.73 sys=0.04, real=0.39 secs]
- GCEvent event = new GCEvent();
- event.setType(Type.GC);
-
- GCEvent CmsRemarkEvent = new GCEvent();
- CmsRemarkEvent.setType(Type.CMS_REMARK);
-
- event.add(CmsRemarkEvent);
-
- assertEquals("generation", Generation.TENURED, event.getGeneration());
- }
-
- @Test
- public void getGenerationConcurrentMarkStart() {
- // 3749.995: [CMS-concurrent-mark-start]
- ConcurrentGCEvent event = new ConcurrentGCEvent();
- event.setType(Type.CMS_CONCURRENT_MARK_START);
-
- assertEquals("generation", Generation.TENURED, event.getGeneration());
- }
-
- @Test
- public void getGenerationFullGc() {
- // 2012-04-07T01:14:29.222+0000: 37571.083: [Full GC [PSYoungGen: 21088K->0K(603712K)] [PSOldGen: 1398086K->214954K(1398144K)] 1419174K->214954K(2001856K) [PSPermGen: 33726K->33726K(131072K)], 0.4952250 secs] [Times: user=0.49 sys=0.00, real=0.49 secs]
- GCEvent event = new GCEvent();
- event.setType(Type.FULL_GC);
-
- GCEvent detailedEvent = new GCEvent();
- detailedEvent.setType(Type.PS_YOUNG_GEN);
- event.add(detailedEvent);
-
- detailedEvent = new GCEvent();
- detailedEvent.setType(Type.PS_OLD_GEN);
- event.add(detailedEvent);
-
- detailedEvent = new GCEvent();
- detailedEvent.setType(Type.PS_PERM_GEN);
- event.add(detailedEvent);
-
- assertEquals("generation", Generation.ALL, event.getGeneration());
- }
-
- @Test
- public void addExtendedTypePrintGcCause() {
- // 2013-05-25T17:02:46.238+0200: 0.194: [GC (Allocation Failure) [PSYoungGen: 16430K->2657K(19136K)] 16430K->15759K(62848K), 0.0109373 secs] [Times: user=0.05 sys=0.02, real=0.02 secs]
- GCEvent event = new GCEvent();
- event.setExtendedType(ExtendedType.lookup(Type.GC, "GC (Allocation Failure)"));
-
- GCEvent detailedEvent = new GCEvent();
- detailedEvent.setType(Type.PS_YOUNG_GEN);
-
- event.add(detailedEvent);
-
- assertEquals("typeAsString", "GC (Allocation Failure); PSYoungGen", event.getTypeAsString());
- }
-}
+package com.tagtraum.perf.gcviewer.model;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.ExtendedType;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Generation;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+
+/**
+ * Tests for methods written in {@link AbstractGCEvent}.
+ *
+ * @author Joerg Wuethrich
+ * created on: 30.09.2012
+ */
+public class TestAbstractGCEvent {
+
+ @Test
+ public void getGenerationParNew() {
+ // 6.727: [GC 6.727: [ParNew: 1610619K->7990K(22649280K), 0.0379110 secs] 1610619K->7990K(47815104K), 0.0380570 secs] [Times: user=0.59 sys=0.04, real=0.04 secs]
+ GCEvent event = new GCEvent();
+ event.setType(Type.GC);
+
+ GCEvent parNewEvent = new GCEvent();
+ parNewEvent.setType(Type.PAR_NEW);
+
+ event.add(parNewEvent);
+
+ assertEquals("generation", Generation.YOUNG, event.getGeneration());
+ }
+
+ @Test
+ public void getGenerationCmsInitialMark() {
+ // 6.765: [GC [1 CMS-initial-mark: 0K(25165824K)] 410644K(47815104K), 0.0100670 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
+ GCEvent event = new GCEvent();
+ event.setType(Type.GC);
+
+ GCEvent CmsInitialMarkEvent = new GCEvent();
+ CmsInitialMarkEvent.setType(Type.CMS_INITIAL_MARK);
+
+ event.add(CmsInitialMarkEvent);
+
+ assertEquals("generation", Generation.TENURED, event.getGeneration());
+ }
+
+ @Test
+ public void getGenerationCmsRemark() {
+ // 12.203: [GC[YG occupancy: 11281900 K (22649280 K)]12.203: [Rescan (parallel) , 0.3773770 secs]12.580: [weak refs processing, 0.0000310 secs]12.580: [class unloading, 0.0055480 secs]12.586: [scrub symbol & string tables, 0.0041920 secs] [1 CMS-remark: 0K(25165824K)] 11281900K(47815104K), 0.3881550 secs] [Times: user=17.73 sys=0.04, real=0.39 secs]
+ GCEvent event = new GCEvent();
+ event.setType(Type.GC);
+
+ GCEvent CmsRemarkEvent = new GCEvent();
+ CmsRemarkEvent.setType(Type.CMS_REMARK);
+
+ event.add(CmsRemarkEvent);
+
+ assertEquals("generation", Generation.TENURED, event.getGeneration());
+ }
+
+ @Test
+ public void getGenerationConcurrentMarkStart() {
+ // 3749.995: [CMS-concurrent-mark-start]
+ ConcurrentGCEvent event = new ConcurrentGCEvent();
+ event.setType(Type.CMS_CONCURRENT_MARK_START);
+
+ assertEquals("generation", Generation.TENURED, event.getGeneration());
+ }
+
+ @Test
+ public void getGenerationFullGc() {
+ // 2012-04-07T01:14:29.222+0000: 37571.083: [Full GC [PSYoungGen: 21088K->0K(603712K)] [PSOldGen: 1398086K->214954K(1398144K)] 1419174K->214954K(2001856K) [PSPermGen: 33726K->33726K(131072K)], 0.4952250 secs] [Times: user=0.49 sys=0.00, real=0.49 secs]
+ GCEvent event = new GCEvent();
+ event.setType(Type.FULL_GC);
+
+ GCEvent detailedEvent = new GCEvent();
+ detailedEvent.setType(Type.PS_YOUNG_GEN);
+ event.add(detailedEvent);
+
+ detailedEvent = new GCEvent();
+ detailedEvent.setType(Type.PS_OLD_GEN);
+ event.add(detailedEvent);
+
+ detailedEvent = new GCEvent();
+ detailedEvent.setType(Type.PS_PERM_GEN);
+ event.add(detailedEvent);
+
+ assertEquals("generation", Generation.ALL, event.getGeneration());
+ }
+
+ @Test
+ public void addExtendedTypePrintGcCause() {
+ // 2013-05-25T17:02:46.238+0200: 0.194: [GC (Allocation Failure) [PSYoungGen: 16430K->2657K(19136K)] 16430K->15759K(62848K), 0.0109373 secs] [Times: user=0.05 sys=0.02, real=0.02 secs]
+ GCEvent event = new GCEvent();
+ event.setExtendedType(ExtendedType.lookup(Type.GC, "GC (Allocation Failure)"));
+
+ GCEvent detailedEvent = new GCEvent();
+ detailedEvent.setType(Type.PS_YOUNG_GEN);
+
+ event.add(detailedEvent);
+
+ assertEquals("typeAsString", "GC (Allocation Failure); PSYoungGen", event.getTypeAsString());
+ }
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/model/TestAllModel.java b/src/test/java/com/tagtraum/perf/gcviewer/model/TestAllModel.java
index c0d0ccc2..e8de9b2c 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/model/TestAllModel.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/model/TestAllModel.java
@@ -1,18 +1,18 @@
-package com.tagtraum.perf.gcviewer.model;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * TestSuite in JUnit 4 style; points to all testcases, that should be run.
- *
- * @author Joerg Wuethrich
- * created on: 04.02.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- TestGcEvent.class,
- TestAbstractGCEvent.class
-})
-public class TestAllModel {
-}
+package com.tagtraum.perf.gcviewer.model;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * TestSuite in JUnit 4 style; points to all testcases, that should be run.
+ *
+ * @author Joerg Wuethrich
+ * created on: 04.02.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestGcEvent.class,
+ TestAbstractGCEvent.class
+})
+public class TestAllModel {
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/model/TestGcEvent.java b/src/test/java/com/tagtraum/perf/gcviewer/model/TestGcEvent.java
index bfdc424e..6ccb8cfe 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/model/TestGcEvent.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/model/TestGcEvent.java
@@ -1,87 +1,87 @@
-package com.tagtraum.perf.gcviewer.model;
-
-import static org.junit.Assert.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.ExtendedType;
-import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
-
-/**
- * Tests for class {@link GCEvent}.
- *
- * @author Joerg Wuethrich
- * created on: 04.02.2012
- */
-public class TestGcEvent {
-
- private GCEvent gcEvent;
- private GCEvent fullGcEvent;
-
- @Before
- public void setUp() {
- // 87.707: [GC 87.707: [DefNew: 139904K->5655K(157376K), 0.0543079 secs] 194540K->60292K(506944K), 0.0544020 secs] [Times: user=0.03 sys=0.02, real=0.06 secs]
- gcEvent = new GCEvent(87.707, 194540, 60292, 506944, 0.0544020, Type.GC);
- GCEvent defNewEvent = new GCEvent(87.707, 139904, 5655, 157376, 0.0543079, Type.DEF_NEW);
- gcEvent.add(defNewEvent);
-
- // 83.403: [Full GC 83.403: [Tenured: 38156K->54636K(349568K), 0.6013150 secs] 141564K->54636K(506944K), [Perm : 73727K->73727K(73728K)], 0.6014256 secs] [Times: user=0.58 sys=0.00, real=0.59 secs]
- fullGcEvent = new GCEvent(83.403, 141564, 54636, 506944, 0.6014256, Type.FULL_GC);
- GCEvent tenured = new GCEvent(83.403, 38156, 54636, 349568, 0.6013150, Type.TENURED);
- GCEvent perm = new GCEvent(83.403, 73727, 73727, 73728, 0.6014256, Type.PERM);
- fullGcEvent.add(tenured);
- fullGcEvent.add(perm);
- }
-
- @Test
- public void testAddGc() {
- // when GC was parsed, only "young" information really is present; "tenured" must be inferred
- assertEquals("number of details", 1, gcEvent.details.size());
-
- GCEvent defNewEvent = gcEvent.details().next();
- assertEquals("type", Type.DEF_NEW.getName(), defNewEvent.getExtendedType().getName());
- assertEquals("getYoung", defNewEvent, gcEvent.getYoung());
-
- GCEvent tenured = gcEvent.getTenured();
- assertNotNull("tenured", tenured);
- }
-
- @Test
- public void testAddFullGc() {
- // when Full GC was parsed, "young" information was deferred, other were parsed.
- assertEquals("number of details", 2, fullGcEvent.details.size());
-
- GCEvent tenured = fullGcEvent.details.get(0);
- assertEquals("type", Type.TENURED.getName(), tenured.getExtendedType().getName());
- assertEquals("getTenured", tenured, fullGcEvent.getTenured());
-
- GCEvent perm = fullGcEvent.details.get(1);
- assertEquals("type", Type.PERM.getName(), perm.getExtendedType().getName());
- assertEquals("getPerm", perm, fullGcEvent.getPerm());
-
- GCEvent young = fullGcEvent.getYoung();
- assertNotNull("young", young);
- }
-
- @Test
- public void testGetInferredYoungFullGcEvent() {
- GCEvent young = fullGcEvent.getYoung();
- assertEquals("type", ExtendedType.UNDEFINED, young.getExtendedType());
- assertEquals("preused", 141564 - 38156, young.getPreUsed());
- assertEquals("postused", 54636 - 54636, young.getPostUsed());
- assertEquals("total", 506944 - 349568, young.getTotal());
- assertEquals("pause", 0.6013150, young.getPause(), 0.00000001);
- }
-
- @Test
- public void testGetInferredTenuredGcEvent() {
- GCEvent tenured = gcEvent.getTenured();
- assertEquals("tenured type", ExtendedType.UNDEFINED, tenured.getExtendedType());
- assertEquals("preused", 194540 - 139904, tenured.getPreUsed());
- assertEquals("postused", 60292 - 5655, tenured.getPostUsed());
- assertEquals("total tenured", 506944 - 157376, tenured.getTotal());
- assertEquals("pause", 0.0543079, tenured.getPause(), 0.000001);
- }
-
-}
+package com.tagtraum.perf.gcviewer.model;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.ExtendedType;
+import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
+
+/**
+ * Tests for class {@link GCEvent}.
+ *
+ * @author Joerg Wuethrich
+ * created on: 04.02.2012
+ */
+public class TestGcEvent {
+
+ private GCEvent gcEvent;
+ private GCEvent fullGcEvent;
+
+ @Before
+ public void setUp() {
+ // 87.707: [GC 87.707: [DefNew: 139904K->5655K(157376K), 0.0543079 secs] 194540K->60292K(506944K), 0.0544020 secs] [Times: user=0.03 sys=0.02, real=0.06 secs]
+ gcEvent = new GCEvent(87.707, 194540, 60292, 506944, 0.0544020, Type.GC);
+ GCEvent defNewEvent = new GCEvent(87.707, 139904, 5655, 157376, 0.0543079, Type.DEF_NEW);
+ gcEvent.add(defNewEvent);
+
+ // 83.403: [Full GC 83.403: [Tenured: 38156K->54636K(349568K), 0.6013150 secs] 141564K->54636K(506944K), [Perm : 73727K->73727K(73728K)], 0.6014256 secs] [Times: user=0.58 sys=0.00, real=0.59 secs]
+ fullGcEvent = new GCEvent(83.403, 141564, 54636, 506944, 0.6014256, Type.FULL_GC);
+ GCEvent tenured = new GCEvent(83.403, 38156, 54636, 349568, 0.6013150, Type.TENURED);
+ GCEvent perm = new GCEvent(83.403, 73727, 73727, 73728, 0.6014256, Type.PERM);
+ fullGcEvent.add(tenured);
+ fullGcEvent.add(perm);
+ }
+
+ @Test
+ public void testAddGc() {
+ // when GC was parsed, only "young" information really is present; "tenured" must be inferred
+ assertEquals("number of details", 1, gcEvent.details.size());
+
+ GCEvent defNewEvent = gcEvent.details().next();
+ assertEquals("type", Type.DEF_NEW.getName(), defNewEvent.getExtendedType().getName());
+ assertEquals("getYoung", defNewEvent, gcEvent.getYoung());
+
+ GCEvent tenured = gcEvent.getTenured();
+ assertNotNull("tenured", tenured);
+ }
+
+ @Test
+ public void testAddFullGc() {
+ // when Full GC was parsed, "young" information was deferred, other were parsed.
+ assertEquals("number of details", 2, fullGcEvent.details.size());
+
+ GCEvent tenured = fullGcEvent.details.get(0);
+ assertEquals("type", Type.TENURED.getName(), tenured.getExtendedType().getName());
+ assertEquals("getTenured", tenured, fullGcEvent.getTenured());
+
+ GCEvent perm = fullGcEvent.details.get(1);
+ assertEquals("type", Type.PERM.getName(), perm.getExtendedType().getName());
+ assertEquals("getPerm", perm, fullGcEvent.getPerm());
+
+ GCEvent young = fullGcEvent.getYoung();
+ assertNotNull("young", young);
+ }
+
+ @Test
+ public void testGetInferredYoungFullGcEvent() {
+ GCEvent young = fullGcEvent.getYoung();
+ assertEquals("type", ExtendedType.UNDEFINED, young.getExtendedType());
+ assertEquals("preused", 141564 - 38156, young.getPreUsed());
+ assertEquals("postused", 54636 - 54636, young.getPostUsed());
+ assertEquals("total", 506944 - 349568, young.getTotal());
+ assertEquals("pause", 0.6013150, young.getPause(), 0.00000001);
+ }
+
+ @Test
+ public void testGetInferredTenuredGcEvent() {
+ GCEvent tenured = gcEvent.getTenured();
+ assertEquals("tenured type", ExtendedType.UNDEFINED, tenured.getExtendedType());
+ assertEquals("preused", 194540 - 139904, tenured.getPreUsed());
+ assertEquals("postused", 60292 - 5655, tenured.getPostUsed());
+ assertEquals("total tenured", 506944 - 157376, tenured.getTotal());
+ assertEquals("pause", 0.0543079, tenured.getPause(), 0.000001);
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/util/TestAllUtil.java b/src/test/java/com/tagtraum/perf/gcviewer/util/TestAllUtil.java
index 851b9b6c..7b01a3be 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/util/TestAllUtil.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/util/TestAllUtil.java
@@ -1,18 +1,18 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * TestSuite in JUnit 4 style; points to all testcases, that should be run.
- *
- * @author Joerg Wuethrich
- * created on: 04.02.2012
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- TestLocalisationHelper.class,
- TestHttpUrlConnectionHelper.class,
-})
-public class TestAllUtil {
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/**
+ * TestSuite in JUnit 4 style; points to all testcases, that should be run.
+ *
+ * @author Joerg Wuethrich
+ * created on: 04.02.2012
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ TestLocalisationHelper.class,
+ TestHttpUrlConnectionHelper.class,
+})
+public class TestAllUtil {
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/util/TestHttpUrlConnectionHelper.java b/src/test/java/com/tagtraum/perf/gcviewer/util/TestHttpUrlConnectionHelper.java
index 6369517c..b31f745b 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/util/TestHttpUrlConnectionHelper.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/util/TestHttpUrlConnectionHelper.java
@@ -1,204 +1,204 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.ByteBuffer;
-import java.nio.channels.Channels;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardOpenOption;
-
-import org.junit.Test;
-
-import com.tagtraum.perf.gcviewer.imp.UnittestHelper;
-
-public class TestHttpUrlConnectionHelper {
-
- private static final String SAMPLE_GCLOG_SUN1_6_0 = "SampleSun1_6_0PrintHeapAtGC.txt";
- private static final String SAMPLE_GCLOG_SUN1_6_0_GZ = SAMPLE_GCLOG_SUN1_6_0 + ".gz";
-
- private static final String PARENT_PATH = "src/test/resources/" + UnittestHelper.FOLDER_OPENJDK + "/";
- private static final Charset UTF8 = StandardCharsets.UTF_8;
-
- private ByteArrayInputStream create404InputStream() {
- StringBuilder sb = new StringBuilder();
- sb.append("");
- sb.append("\n");
- sb.append("\n404 Not Found");
- sb.append("\n");
- sb.append("\nNot Found
");
- sb.append("\nThe requested URL /unknown.txt was not found on this server.
");
- sb.append("\n
");
- sb.append("\nApache/2.2.22 (Debian) Server at 192.168.10.10 Port 80");
- sb.append("\n");
-
- return new ByteArrayInputStream(sb.toString().getBytes());
- }
-
- @Test
- public void openInputStream404GzipEncoding() throws Exception {
- final String filename = SAMPLE_GCLOG_SUN1_6_0 + "xx";
- final File file = new File(PARENT_PATH, filename);
- final String contentType = null;
- final String contentEncoding = HttpUrlConnectionHelper.GZIP;
-
- testOpenInputStreamNotOk(file, contentEncoding, contentType, null, filename);
- }
-
- @Test
- public void openInputStream404NoEncoding() throws Exception {
- final String filename = SAMPLE_GCLOG_SUN1_6_0 + "xx";
- final File file = new File(PARENT_PATH, filename);
- final String contentEncoding = null;
- final String contentType = null;
-
- testOpenInputStreamNotOk(file, contentEncoding, contentType, null, filename);
- }
-
- @Test
- public void openInputStreamGZipOk() throws Exception {
- final String filename = SAMPLE_GCLOG_SUN1_6_0_GZ;
- final File file = new File(PARENT_PATH, filename);
- final String contentEncoding = HttpUrlConnectionHelper.GZIP;
-
- testOpenInputStreamOk(file, contentEncoding, contentEncoding, SAMPLE_GCLOG_SUN1_6_0);
- }
-
- @Test
- public void openInputStreamOk() throws Exception {
- final String filename = SAMPLE_GCLOG_SUN1_6_0;
- final File file = new File(PARENT_PATH, filename);
- final String contentEncoding = null;
-
- testOpenInputStreamOk(file, contentEncoding, null, filename);
- }
-
- private void testOpenInputStreamNotOk(final File file,
- final String contentEncoding,
- final String contentType,
- final String acceptEncoding,
- final String expectedFile)
- throws IOException {
-
- final URL url = new URL("http://localhost/gclog.txt");
- final HttpURLConnection conn = mock(HttpURLConnection.class);
- final long fileSize = file.length();
- final ByteArrayInputStream bis = create404InputStream();
-
- when(conn.getContentEncoding()).thenReturn(contentEncoding);
- when(conn.getContentType()).thenReturn("text/html; charset=".concat(UTF8.name()));
- when(conn.getContentLength()).thenReturn((int)fileSize);
- when(conn.getContentLengthLong()).thenReturn(fileSize);
- when(conn.getLastModified()).thenReturn(file.lastModified());
- when(conn.getURL()).thenReturn(url);
- when(conn.getResponseCode()).thenReturn(404);
- when(conn.getResponseMessage()).thenReturn("Not found");
- when(conn.getErrorStream()).thenReturn(bis);
-
- try {
- HttpUrlConnectionHelper.openInputStream(conn, acceptEncoding);
- fail("IOException expected");
- }
- catch (IOException e) {
- verify(conn, atLeastOnce()).getResponseMessage();
- verify(conn, atLeastOnce()).getErrorStream();
- }
-
- }
-
- private void testOpenInputStreamOk(final File file,
- final String contentEncoding,
- final String acceptEncoding,
- final String expectedFile)
- throws IOException {
-
- final URL url = new URL("http://localhost/gclog.txt");
- final HttpURLConnection conn = mock(HttpURLConnection.class);
- final long fileSize = file.length();
-
- try (FileInputStream fis = new FileInputStream(file)) {
- when(conn.getContentEncoding()).thenReturn(contentEncoding);
- when(conn.getContentType()).thenReturn("text/plain");
- when(conn.getContentLength()).thenReturn((int)fileSize);
- when(conn.getContentLengthLong()).thenReturn(fileSize);
- when(conn.getLastModified()).thenReturn(file.lastModified());
- when(conn.getURL()).thenReturn(url);
- when(conn.getResponseCode()).thenReturn(200);
- when(conn.getResponseMessage()).thenReturn("OK");
- when(conn.getInputStream()).thenReturn(fis);
-
- final InputStream in = HttpUrlConnectionHelper.openInputStream(conn, acceptEncoding);
-
- verify(conn, atLeastOnce()).setRequestProperty("Accept-Encoding", acceptEncoding);
- verify(conn, atLeastOnce()).setUseCaches(false);
- verify(conn, atLeastOnce()).connect();
-
- if (acceptEncoding == null) {
- assertEquals("openInputStream(conn, null) returns non-encoded stream", fis, in);
- }
- else {
- verifyInputStreamWithFile("openInputStream(conn," + acceptEncoding + ")", expectedFile, in);
- }
- }
- }
-
- /**
- * Compares the content of InputStream "in" with the specified file's content.
- *
- * @param msg Prefix for all assert messages
- * @param file The file to check against
- * @param in The input stream to check (closed on exit)
- */
- private void verifyInputStreamWithFile(final String msg, final String file, final InputStream in) throws IOException {
- final Path path = Paths.get(PARENT_PATH, file);
- final ByteBuffer bFile = ByteBuffer.allocate(0x4000);
- final ByteBuffer bIn = ByteBuffer.allocate(0x4000);
- long checked = 0;
-
- try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ);
- ReadableByteChannel inChannel = Channels.newChannel(in)) {
-
- final long size = fileChannel.size();
-
- // check "size" bytes (invariant: all bytes < "checked" are equal)
- while (checked < size) {
- final int nRead1 = fileChannel.read(bFile);
- final int nRead2 = inChannel.read(bIn);
- assertEquals(msg + ": # bytes read at position " + checked, nRead1, nRead2);
- bFile.flip();
- bIn.flip();
-
- if (!bFile.equals(bIn)) {
- // find first failing byte
- for (int index = 0; index < nRead1; index++) {
- final byte b1 = bFile.get(index);
- final byte b2 = bIn.get(index);
- assertEquals(msg + ": Compare byte " + (checked + index), b1, b2);
- }
- }
- checked += nRead1;
- bFile.compact();
- bIn.compact();
- }
- assertEquals(msg + ": Compared all bytes", size, checked);
- assertEquals(msg + ": InputStream must be at EOF", -1, inChannel.read(bIn));
- }
- }
-
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+
+import org.junit.Test;
+
+import com.tagtraum.perf.gcviewer.imp.UnittestHelper;
+
+public class TestHttpUrlConnectionHelper {
+
+ private static final String SAMPLE_GCLOG_SUN1_6_0 = "SampleSun1_6_0PrintHeapAtGC.txt";
+ private static final String SAMPLE_GCLOG_SUN1_6_0_GZ = SAMPLE_GCLOG_SUN1_6_0 + ".gz";
+
+ private static final String PARENT_PATH = "src/test/resources/" + UnittestHelper.FOLDER_OPENJDK + "/";
+ private static final Charset UTF8 = StandardCharsets.UTF_8;
+
+ private ByteArrayInputStream create404InputStream() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("");
+ sb.append("\n");
+ sb.append("\n404 Not Found");
+ sb.append("\n");
+ sb.append("\nNot Found
");
+ sb.append("\nThe requested URL /unknown.txt was not found on this server.
");
+ sb.append("\n
");
+ sb.append("\nApache/2.2.22 (Debian) Server at 192.168.10.10 Port 80");
+ sb.append("\n");
+
+ return new ByteArrayInputStream(sb.toString().getBytes());
+ }
+
+ @Test
+ public void openInputStream404GzipEncoding() throws Exception {
+ final String filename = SAMPLE_GCLOG_SUN1_6_0 + "xx";
+ final File file = new File(PARENT_PATH, filename);
+ final String contentType = null;
+ final String contentEncoding = HttpUrlConnectionHelper.GZIP;
+
+ testOpenInputStreamNotOk(file, contentEncoding, contentType, null, filename);
+ }
+
+ @Test
+ public void openInputStream404NoEncoding() throws Exception {
+ final String filename = SAMPLE_GCLOG_SUN1_6_0 + "xx";
+ final File file = new File(PARENT_PATH, filename);
+ final String contentEncoding = null;
+ final String contentType = null;
+
+ testOpenInputStreamNotOk(file, contentEncoding, contentType, null, filename);
+ }
+
+ @Test
+ public void openInputStreamGZipOk() throws Exception {
+ final String filename = SAMPLE_GCLOG_SUN1_6_0_GZ;
+ final File file = new File(PARENT_PATH, filename);
+ final String contentEncoding = HttpUrlConnectionHelper.GZIP;
+
+ testOpenInputStreamOk(file, contentEncoding, contentEncoding, SAMPLE_GCLOG_SUN1_6_0);
+ }
+
+ @Test
+ public void openInputStreamOk() throws Exception {
+ final String filename = SAMPLE_GCLOG_SUN1_6_0;
+ final File file = new File(PARENT_PATH, filename);
+ final String contentEncoding = null;
+
+ testOpenInputStreamOk(file, contentEncoding, null, filename);
+ }
+
+ private void testOpenInputStreamNotOk(final File file,
+ final String contentEncoding,
+ final String contentType,
+ final String acceptEncoding,
+ final String expectedFile)
+ throws IOException {
+
+ final URL url = new URL("http://localhost/gclog.txt");
+ final HttpURLConnection conn = mock(HttpURLConnection.class);
+ final long fileSize = file.length();
+ final ByteArrayInputStream bis = create404InputStream();
+
+ when(conn.getContentEncoding()).thenReturn(contentEncoding);
+ when(conn.getContentType()).thenReturn("text/html; charset=".concat(UTF8.name()));
+ when(conn.getContentLength()).thenReturn((int)fileSize);
+ when(conn.getContentLengthLong()).thenReturn(fileSize);
+ when(conn.getLastModified()).thenReturn(file.lastModified());
+ when(conn.getURL()).thenReturn(url);
+ when(conn.getResponseCode()).thenReturn(404);
+ when(conn.getResponseMessage()).thenReturn("Not found");
+ when(conn.getErrorStream()).thenReturn(bis);
+
+ try {
+ HttpUrlConnectionHelper.openInputStream(conn, acceptEncoding);
+ fail("IOException expected");
+ }
+ catch (IOException e) {
+ verify(conn, atLeastOnce()).getResponseMessage();
+ verify(conn, atLeastOnce()).getErrorStream();
+ }
+
+ }
+
+ private void testOpenInputStreamOk(final File file,
+ final String contentEncoding,
+ final String acceptEncoding,
+ final String expectedFile)
+ throws IOException {
+
+ final URL url = new URL("http://localhost/gclog.txt");
+ final HttpURLConnection conn = mock(HttpURLConnection.class);
+ final long fileSize = file.length();
+
+ try (FileInputStream fis = new FileInputStream(file)) {
+ when(conn.getContentEncoding()).thenReturn(contentEncoding);
+ when(conn.getContentType()).thenReturn("text/plain");
+ when(conn.getContentLength()).thenReturn((int)fileSize);
+ when(conn.getContentLengthLong()).thenReturn(fileSize);
+ when(conn.getLastModified()).thenReturn(file.lastModified());
+ when(conn.getURL()).thenReturn(url);
+ when(conn.getResponseCode()).thenReturn(200);
+ when(conn.getResponseMessage()).thenReturn("OK");
+ when(conn.getInputStream()).thenReturn(fis);
+
+ final InputStream in = HttpUrlConnectionHelper.openInputStream(conn, acceptEncoding);
+
+ verify(conn, atLeastOnce()).setRequestProperty("Accept-Encoding", acceptEncoding);
+ verify(conn, atLeastOnce()).setUseCaches(false);
+ verify(conn, atLeastOnce()).connect();
+
+ if (acceptEncoding == null) {
+ assertEquals("openInputStream(conn, null) returns non-encoded stream", fis, in);
+ }
+ else {
+ verifyInputStreamWithFile("openInputStream(conn," + acceptEncoding + ")", expectedFile, in);
+ }
+ }
+ }
+
+ /**
+ * Compares the content of InputStream "in" with the specified file's content.
+ *
+ * @param msg Prefix for all assert messages
+ * @param file The file to check against
+ * @param in The input stream to check (closed on exit)
+ */
+ private void verifyInputStreamWithFile(final String msg, final String file, final InputStream in) throws IOException {
+ final Path path = Paths.get(PARENT_PATH, file);
+ final ByteBuffer bFile = ByteBuffer.allocate(0x4000);
+ final ByteBuffer bIn = ByteBuffer.allocate(0x4000);
+ long checked = 0;
+
+ try (FileChannel fileChannel = FileChannel.open(path, StandardOpenOption.READ);
+ ReadableByteChannel inChannel = Channels.newChannel(in)) {
+
+ final long size = fileChannel.size();
+
+ // check "size" bytes (invariant: all bytes < "checked" are equal)
+ while (checked < size) {
+ final int nRead1 = fileChannel.read(bFile);
+ final int nRead2 = inChannel.read(bIn);
+ assertEquals(msg + ": # bytes read at position " + checked, nRead1, nRead2);
+ bFile.flip();
+ bIn.flip();
+
+ if (!bFile.equals(bIn)) {
+ // find first failing byte
+ for (int index = 0; index < nRead1; index++) {
+ final byte b1 = bFile.get(index);
+ final byte b2 = bIn.get(index);
+ assertEquals(msg + ": Compare byte " + (checked + index), b1, b2);
+ }
+ }
+ checked += nRead1;
+ bFile.compact();
+ bIn.compact();
+ }
+ assertEquals(msg + ": Compared all bytes", size, checked);
+ assertEquals(msg + ": InputStream must be at EOF", -1, inChannel.read(bIn));
+ }
+ }
+
+}
diff --git a/src/test/java/com/tagtraum/perf/gcviewer/util/TestLocalisationHelper.java b/src/test/java/com/tagtraum/perf/gcviewer/util/TestLocalisationHelper.java
index 02b555be..c56fc013 100644
--- a/src/test/java/com/tagtraum/perf/gcviewer/util/TestLocalisationHelper.java
+++ b/src/test/java/com/tagtraum/perf/gcviewer/util/TestLocalisationHelper.java
@@ -1,33 +1,33 @@
-package com.tagtraum.perf.gcviewer.util;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-/**
- * Tests for class {@link LocalisationHelper}.
- *
- * @author Joerg Wuethrich
- * created on: 13.09.2013
- */
-public class TestLocalisationHelper {
-
- @Test
- public void getStringWithoutParams() {
- String stringWithPlaceholders = LocalisationHelper.getString("datareader_parseerror_dialog_message");
-
- assertTrue("{0} is not present in string", stringWithPlaceholders.indexOf("{0}") >= 0);
- assertTrue("{1} is not present in string", stringWithPlaceholders.indexOf("{1}") >= 0);
- }
-
- @Test
- public void getStringWithParams() {
- String stringWithoutPlaceholders = LocalisationHelper.getString("datareader_parseerror_dialog_message", "#1", "#2");
-
- assertFalse("{0} should not be present in string", stringWithoutPlaceholders.indexOf("{0}") >= 0);
- assertFalse("{1} should not be present in string", stringWithoutPlaceholders.indexOf("{1}") >= 0);
- assertTrue("#1 is not present in string", stringWithoutPlaceholders.indexOf("#1") >= 0);
- assertTrue("#2 is not present in string", stringWithoutPlaceholders.indexOf("#2") >= 0);
- }
-}
+package com.tagtraum.perf.gcviewer.util;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Tests for class {@link LocalisationHelper}.
+ *
+ * @author Joerg Wuethrich
+ * created on: 13.09.2013
+ */
+public class TestLocalisationHelper {
+
+ @Test
+ public void getStringWithoutParams() {
+ String stringWithPlaceholders = LocalisationHelper.getString("datareader_parseerror_dialog_message");
+
+ assertTrue("{0} is not present in string", stringWithPlaceholders.indexOf("{0}") >= 0);
+ assertTrue("{1} is not present in string", stringWithPlaceholders.indexOf("{1}") >= 0);
+ }
+
+ @Test
+ public void getStringWithParams() {
+ String stringWithoutPlaceholders = LocalisationHelper.getString("datareader_parseerror_dialog_message", "#1", "#2");
+
+ assertFalse("{0} should not be present in string", stringWithoutPlaceholders.indexOf("{0}") >= 0);
+ assertFalse("{1} should not be present in string", stringWithoutPlaceholders.indexOf("{1}") >= 0);
+ assertTrue("#1 is not present in string", stringWithoutPlaceholders.indexOf("#1") >= 0);
+ assertTrue("#2 is not present in string", stringWithoutPlaceholders.indexOf("#2") >= 0);
+ }
+}
diff --git a/src/test/resources/hp/SampleHP-UX1_3.txt b/src/test/resources/hp/SampleHP-UX1_3.txt
index 8a321760..954881ab 100644
--- a/src/test/resources/hp/SampleHP-UX1_3.txt
+++ b/src/test/resources/hp/SampleHP-UX1_3.txt
@@ -1,135 +1,135 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-