Skip to content

Commit

Permalink
Now parses bytecode InnerClasses section - precursor to inner class s…
Browse files Browse the repository at this point in the history
…upport in TriView
  • Loading branch information
chriswhocodes committed Jan 19, 2015
1 parent a72690a commit c14cf51
Show file tree
Hide file tree
Showing 8 changed files with 264 additions and 114 deletions.
Expand Up @@ -29,7 +29,6 @@ private JITWatchConstants()
public static final boolean DEBUG_LOGGING_TRIVIEW = false;
public static final boolean DEBUG_LOGGING_TAGPROCESSOR = false;


public static final boolean DEBUG_MEMBER_CREATION = false;

public static final int DEFAULT_FREQ_INLINE_SIZE = 35;
Expand All @@ -43,14 +42,14 @@ private JITWatchConstants()
public static final String TAG_COMPILATION_LOG_CLOSE = "</compilation_log>";
public static final String TAG_HOTSPOT_LOG = "<hotspot_log ";
public static final String TAG_HOTSPOT_LOG_CLOSE = "</hotspot_log>";

public static final String S_FRAGMENT = "fragment";
public static final String TAG_OPEN_FRAGMENT = "<fragment>";
public static final String TAG_CLOSE_FRAGMENT = "</fragment>";
public static final String TAG_OPEN_CDATA = "<![CDATA[";
public static final String TAG_CLOSE_CDATA = "]]>";
public static final String TAG_OPEN_CLOSE_CDATA = TAG_CLOSE_CDATA + TAG_OPEN_CDATA;

public static final Set<String> SKIP_HEADER_TAGS = new HashSet<>(Arrays.asList(new String[] { TAG_XML, TAG_HOTSPOT_LOG }));

public static final Set<String> SKIP_BODY_TAGS = new HashSet<>(Arrays.asList(new String[] { TAG_TTY_CLOSE, TAG_COMPILATION_LOG,
Expand Down Expand Up @@ -256,6 +255,7 @@ public static final Set<String> getAutoGeneratedClassPrefixes()
public static final String S_BYTECODE_LINENUMBERTABLE = "LineNumberTable:";
public static final String S_BYTECODE_LOCALVARIABLETABLE = "LocalVariableTable:";
public static final String S_BYTECODE_STACKMAPTABLE = "StackMapTable:";
public static final String S_BYTECODE_INNERCLASSES = "InnerClasses:";

public static final String S_CONSTRUCTOR_INIT = "<init>";
public static final String S_STATIC_INIT = "<clinit>";
Expand Down
26 changes: 21 additions & 5 deletions src/main/java/org/adoptopenjdk/jitwatch/core/TagProcessor.java
Expand Up @@ -5,17 +5,24 @@
*/
package org.adoptopenjdk.jitwatch.core;

import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_CLOSE_ANGLE;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_OPEN_ANGLE;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_SLASH;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_SPACE;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.DEBUG_LOGGING;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.DEBUG_LOGGING_TAGPROCESSOR;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_FRAGMENT;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.TAG_OPEN_FRAGMENT;

import java.util.Map;

import org.adoptopenjdk.jitwatch.model.CompilerName;
import org.adoptopenjdk.jitwatch.model.Tag;
import org.adoptopenjdk.jitwatch.model.Task;
import org.adoptopenjdk.jitwatch.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;

import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.*;

public class TagProcessor
{
private static final Logger logger = LoggerFactory.getLogger(TagProcessor.class);
Expand All @@ -24,6 +31,7 @@ public class TagProcessor
private Tag currentTag;
private Tag topTag = null;
private CompilerName currentCompiler;
private boolean fragmentSeen;

// TODO write own mini XPath?

Expand Down Expand Up @@ -85,6 +93,11 @@ else if (currentTag != null)
return result;
}

public boolean wasFragmentSeen()
{
return fragmentSeen;
}

private void resetState()
{
currentTag = null;
Expand Down Expand Up @@ -197,9 +210,12 @@ private Tag processValidLine(String line, int indexEndName, boolean selfClosing)
{
if (name.equals(S_FRAGMENT))
{
logger.warn(
logger.debug(
"Found a {} in the HotSpot log. The VM exited before the hotspot log was fully written. JIT information may have been lost.",
TAG_OPEN_FRAGMENT);

fragmentSeen = true;

return null;
}
else
Expand Down
21 changes: 8 additions & 13 deletions src/main/java/org/adoptopenjdk/jitwatch/launch/LaunchHeadless.java
Expand Up @@ -5,6 +5,9 @@
*/
package org.adoptopenjdk.jitwatch.launch;

import java.io.File;
import java.io.IOException;

import org.adoptopenjdk.jitwatch.core.HotSpotLogParser;
import org.adoptopenjdk.jitwatch.core.IJITListener;
import org.adoptopenjdk.jitwatch.core.ILogParseErrorListener;
Expand All @@ -13,9 +16,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;

public class LaunchHeadless implements IJITListener, ILogParseErrorListener
{
private boolean showErrors;
Expand All @@ -36,7 +36,7 @@ public LaunchHeadless(String filename, boolean showErrors) throws IOException
@Override
public void handleLogEntry(String entry)
{
logger.error(entry);
logger.info(entry);
}

@Override
Expand All @@ -58,23 +58,18 @@ public static void main(String[] args) throws IOException
{
if (args.length < 1)
{
logger.error("Usage: LaunchHeadless <hotspot log file> [logErrors (true|false)]");
System.err.println("Usage: LaunchHeadless <hotspot log file> [logErrors (true|false)]");
System.exit(-1);
}

final boolean showErrors = twoParametersArePassedIn(args) && firstParameterIsABooleanExpression(args[1]);
final boolean showErrors = showErrors(args);

new LaunchHeadless(args[0], showErrors);
}

private static boolean firstParameterIsABooleanExpression(String arg)
{
return Boolean.valueOf(arg);
}

private static boolean twoParametersArePassedIn(String[] args)
private static boolean showErrors(String[] args)
{
return args.length == 2;
return args.length == 2 && Boolean.valueOf(args[1]);
}

@Override
Expand Down

0 comments on commit c14cf51

Please sign in to comment.