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_TRIVIEW = false;
public static final boolean DEBUG_LOGGING_TAGPROCESSOR = false; public static final boolean DEBUG_LOGGING_TAGPROCESSOR = false;



public static final boolean DEBUG_MEMBER_CREATION = false; public static final boolean DEBUG_MEMBER_CREATION = false;


public static final int DEFAULT_FREQ_INLINE_SIZE = 35; 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_COMPILATION_LOG_CLOSE = "</compilation_log>";
public static final String TAG_HOTSPOT_LOG = "<hotspot_log "; public static final String TAG_HOTSPOT_LOG = "<hotspot_log ";
public static final String TAG_HOTSPOT_LOG_CLOSE = "</hotspot_log>"; public static final String TAG_HOTSPOT_LOG_CLOSE = "</hotspot_log>";

public static final String S_FRAGMENT = "fragment"; public static final String S_FRAGMENT = "fragment";
public static final String TAG_OPEN_FRAGMENT = "<fragment>"; public static final String TAG_OPEN_FRAGMENT = "<fragment>";
public static final String TAG_CLOSE_FRAGMENT = "</fragment>"; public static final String TAG_CLOSE_FRAGMENT = "</fragment>";
public static final String TAG_OPEN_CDATA = "<![CDATA["; public static final String TAG_OPEN_CDATA = "<![CDATA[";
public static final String TAG_CLOSE_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 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_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, 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_LINENUMBERTABLE = "LineNumberTable:";
public static final String S_BYTECODE_LOCALVARIABLETABLE = "LocalVariableTable:"; public static final String S_BYTECODE_LOCALVARIABLETABLE = "LocalVariableTable:";
public static final String S_BYTECODE_STACKMAPTABLE = "StackMapTable:"; 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_CONSTRUCTOR_INIT = "<init>";
public static final String S_STATIC_INIT = "<clinit>"; 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; 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.CompilerName;
import org.adoptopenjdk.jitwatch.model.Tag; import org.adoptopenjdk.jitwatch.model.Tag;
import org.adoptopenjdk.jitwatch.model.Task; import org.adoptopenjdk.jitwatch.model.Task;
import org.adoptopenjdk.jitwatch.util.StringUtil; import org.adoptopenjdk.jitwatch.util.StringUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import java.util.Map;

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

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


// TODO write own mini XPath? // TODO write own mini XPath?


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


public boolean wasFragmentSeen()
{
return fragmentSeen;
}

private void resetState() private void resetState()
{ {
currentTag = null; currentTag = null;
Expand Down Expand Up @@ -197,9 +210,12 @@ private Tag processValidLine(String line, int indexEndName, boolean selfClosing)
{ {
if (name.equals(S_FRAGMENT)) 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.", "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); TAG_OPEN_FRAGMENT);

fragmentSeen = true;

return null; return null;
} }
else 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; package org.adoptopenjdk.jitwatch.launch;


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

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


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

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


@Override @Override
Expand All @@ -58,23 +58,18 @@ public static void main(String[] args) throws IOException
{ {
if (args.length < 1) 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); System.exit(-1);
} }


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


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


private static boolean firstParameterIsABooleanExpression(String arg) private static boolean showErrors(String[] args)
{
return Boolean.valueOf(arg);
}

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


@Override @Override
Expand Down

0 comments on commit c14cf51

Please sign in to comment.