/*
* 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.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.adoptopenjdk.jitwatch.model.MemberSignatureParts;
import org.adoptopenjdk.jitwatch.parser.j9.J9Line;
import org.adoptopenjdk.jitwatch.parser.j9.J9Util;
import org.junit.Test;
public class TestJ9Parser
{
@Test
public void testParseLine() throws Exception
{
String line = "+ (cold) java/lang/Double.longBitsToDouble(J)D @ 00007F0AAA60003C-00007F0AAA60005E OrdinaryMethod Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000001E31FE0 bcsz=3 JNI compThread=0 CpuLoad=8%(4%avg) JvmCpu=0%";
J9Line j9Line = J9Util.parseLine(line);
assertEquals(J9Line.TEMPERATURE_COLD, j9Line.getTemperature());
assertEquals("java/lang/Double.longBitsToDouble(J)D", j9Line.getSignature());
assertEquals("java/lang/Double longBitsToDouble (J)D", J9Util.convertJ9SigToLogCompilationSignature(j9Line.getSignature()));
MemberSignatureParts msp = j9Line.getMemberSignatureParts();
assertEquals("java.lang.Double", msp.getFullyQualifiedClassName());
assertEquals("longBitsToDouble", msp.getMemberName());
assertEquals("double", msp.getReturnType());
assertEquals(1, msp.getParamTypes().size());
assertEquals("long", msp.getParamTypes().get(0));
assertEquals("00007F0AAA60003C", j9Line.getRangeStart());
assertEquals("00007F0AAA60005E", j9Line.getRangeEnd());
assertEquals(0x22, j9Line.getNativeSize());
assertTrue(j9Line.hasFeature("OrdinaryMethod"));
assertEquals(3, j9Line.getBytecodeSize());
}
@Test
public void testParseLineWiothObjectReturn() throws Exception
{
String line = "+ (cold) java/lang/System.getEncoding(I)Ljava/lang/String; @ 00007F0AAA60007C-00007F0AAA6001C9 OrdinaryMethod Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000001E1F440 bcsz=3 JNI compThread=0 CpuLoad=8%(4%avg) JvmCpu=0%";
J9Line j9Line = J9Util.parseLine(line);
assertEquals(J9Line.TEMPERATURE_COLD, j9Line.getTemperature());
assertEquals("java/lang/System.getEncoding(I)Ljava/lang/String;", j9Line.getSignature());
assertEquals("java/lang/System getEncoding (I)Ljava/lang/String;", J9Util.convertJ9SigToLogCompilationSignature(j9Line.getSignature()));
MemberSignatureParts msp = j9Line.getMemberSignatureParts();
assertEquals("java.lang.System", msp.getFullyQualifiedClassName());
assertEquals("getEncoding", msp.getMemberName());
assertEquals("java.lang.String", msp.getReturnType());
assertEquals(1, msp.getParamTypes().size());
assertEquals("int", msp.getParamTypes().get(0));
assertEquals("00007F0AAA60007C", j9Line.getRangeStart());
assertEquals("00007F0AAA6001C9", j9Line.getRangeEnd());
assertEquals(0x14D, j9Line.getNativeSize());
assertTrue(j9Line.hasFeature("OrdinaryMethod"));
assertEquals(3, j9Line.getBytecodeSize());
}
@Test
public void testParseLineWithComplexTemperature() throws Exception
{
String line = "+ (profiled very-hot) java/util/ComparableTimSort.mergeLo(IIII)V @ 00007F0AAA62BBA0-00007F0AAA633020 OrdinaryMethod 16.40% T Q_SZ=0 Q_SZI=0 QW=100 j9m=000000000204A130 bcsz=656 compThread=0 CpuLoad=100%(50%avg) JvmCpu=100%";
J9Line j9Line = J9Util.parseLine(line);
assertEquals(J9Line.TEMPERATURE_PROFILED_VERY_HOT, j9Line.getTemperature());
assertEquals("java/util/ComparableTimSort.mergeLo(IIII)V", j9Line.getSignature());
assertEquals("java/util/ComparableTimSort mergeLo (IIII)V", J9Util.convertJ9SigToLogCompilationSignature(j9Line.getSignature()));
MemberSignatureParts msp = j9Line.getMemberSignatureParts();
assertEquals("java.util.ComparableTimSort", msp.getFullyQualifiedClassName());
assertEquals("mergeLo", msp.getMemberName());
assertEquals("void", msp.getReturnType());
assertEquals(4, msp.getParamTypes().size());
assertEquals("int", msp.getParamTypes().get(0));
assertEquals("int", msp.getParamTypes().get(1));
assertEquals("int", msp.getParamTypes().get(2));
assertEquals("int", msp.getParamTypes().get(3));
assertEquals("00007F0AAA62BBA0", j9Line.getRangeStart());
assertEquals("00007F0AAA633020", j9Line.getRangeEnd());
assertTrue(j9Line.hasFeature("OrdinaryMethod"));
assertEquals(656, j9Line.getBytecodeSize());
}
}