/* * Copyright (c) 2017 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.parser.j9; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.DEBUG_LOGGING; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.TAG_NMETHOD; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.TAG_TASK; import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.TAG_TASK_QUEUED; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.adoptopenjdk.jitwatch.core.IJITListener; import org.adoptopenjdk.jitwatch.model.NumberedLine; import org.adoptopenjdk.jitwatch.model.Tag; import org.adoptopenjdk.jitwatch.model.Task; import org.adoptopenjdk.jitwatch.parser.AbstractLogParser; public class J9LogParser extends AbstractLogParser { private int compileID = 1; private long timestampMillis = 0; public J9LogParser(IJITListener jitListener) { super(jitListener); } @Override protected void parseLogFile() { for (NumberedLine numberedLine : splitLog.getCompilationLines()) { processLineNumber = numberedLine.getLineNumber(); J9Line j9Line = J9Util.parseLine(numberedLine.getLine()); if (DEBUG_LOGGING) { logger.debug("J9 log line parsed\n{}", j9Line); } Tag tagQueued = j9Line.toTagQueued(compileID, timestampMillis); Tag tagNMethod = j9Line.toTagNMethod(compileID, timestampMillis); Tag tagTask = j9Line.toTagTask(compileID, timestampMillis); compileID++; timestampMillis++; if (tagQueued != null) { handleTag(tagQueued); } if (tagNMethod != null) { handleTag(tagNMethod); } if (tagTask != null) { handleTag(tagTask); } } } @Override protected void handleTag(Tag tag) { String tagName = tag.getName(); if (DEBUG_LOGGING) { logger.debug("handling {}", tagName); } switch (tagName) { case TAG_TASK_QUEUED: handleTagQueued(tag); break; case TAG_NMETHOD: handleTagNMethod(tag); break; case TAG_TASK: handleTagTask((Task) tag); break; default: break; } } @Override protected void splitLogFile(File logFile) { reading = true; try (BufferedReader reader = new BufferedReader(new FileReader(logFile), 65536)) { String currentLine = reader.readLine(); while (reading && currentLine != null) { try { String trimmedLine = currentLine.trim(); if (trimmedLine.length() > 0) { char firstChar = trimmedLine.charAt(0); if (firstChar == '+') { NumberedLine numberedLine = new NumberedLine(parseLineNumber++, trimmedLine); splitLog.addCompilationLine(numberedLine); } } } catch (Exception ex) { logger.error("Exception handling: '{}'", currentLine, ex); } currentLine = reader.readLine(); } } catch (IOException ioe) { logger.error("Exception while splitting log file", ioe); } } }