| 13 | import test.smoke.Cpu; |
| 14 | |
| 15 | public class CstackTests { |
| 16 | private static final String PROFILE_COMMAND = "-e cpu -i 10ms -d 1 -o collapsed -a "; |
| 17 | |
| 18 | @Test(mainClass = LongInitializer.class) |
| 19 | public void asyncGetCallTrace(TestProcess p) throws Exception { |
| 20 | Output out = p.profile(PROFILE_COMMAND + "--cstack no"); |
| 21 | assert !out.contains(";readBytes") : out; |
| 22 | assert out.contains("LongInitializer.main_\\[j]") : out; |
| 23 | |
| 24 | out = p.profile(PROFILE_COMMAND + "--cstack fp"); |
| 25 | assert out.contains(";readBytes") : out; |
| 26 | assert out.contains("LongInitializer.main_\\[j]") : out; |
| 27 | } |
| 28 | |
| 29 | @Test(mainClass = LongInitializer.class, jvm = Jvm.HOTSPOT, os = Os.LINUX) |
| 30 | public void vmStructs(TestProcess p) throws Exception { |
| 31 | Output out = p.profile(PROFILE_COMMAND + "--cstack vm"); |
| 32 | assert out.contains(";readBytes"); |
| 33 | assert out.contains("LongInitializer.main_\\[0]"); |
| 34 | assert !out.contains("InstanceKlass::initialize"); |
| 35 | assert !out.contains("call_stub"); |
| 36 | assert !out.contains("JavaMain"); |
| 37 | |
| 38 | out = p.profile(PROFILE_COMMAND + "--cstack vmx"); |
| 39 | assert out.contains(";readBytes"); |
| 40 | assert out.contains("LongInitializer.main_\\[0]"); |
| 41 | assert out.contains("InstanceKlass::initialize"); |
| 42 | assert out.contains("call_stub"); |
| 43 | assert out.contains("JavaMain"); |
| 44 | } |
| 45 | |
| 46 | @Test(mainClass = Cpu.class, jvm = Jvm.HOTSPOT, agentArgs = "start,event=cpu,interval=1ms") |
| 47 | public void saneNativeStack(TestProcess p) throws Exception { |
| 48 | Thread.sleep(2000); |
| 49 | Output out = p.profile("stop -o flamegraph").convertFlameToCollapsed(); |
| 50 | |
| 51 | assert out.contains("^test/smoke/Cpu.main"); |
| 52 | assert out.contains("CompileBroker::"); |
| 53 | assert out.contains("Java_java_io_"); |
| 54 | |
| 55 | // No JVM frames before start_thread |
| 56 | assert !out.contains("CompileBroker::.*;start_thread"); |
| 57 | |
| 58 | // No duplicated native frames |
| 59 | assert !out.contains("Java_java_io_.*;Java_java_io_"); |
| 60 | } |
| 61 | } |
nothing calls this directly
no outgoing calls
no test coverage detected