corda/sgx-jvm/avian/test/Trace.java
Andras Slemmer 9bb3d6b972 Add 'sgx-jvm/avian/' from commit '09e4fe60d01f4f4bfb6b2976973bb4913ef61edc'
git-subtree-dir: sgx-jvm/avian
git-subtree-mainline: f978eab8d1
git-subtree-split: 09e4fe60d0
2017-03-13 12:18:24 +00:00

114 lines
2.2 KiB
Java

public class Trace implements Runnable {
private volatile boolean alive = true;
private static void throwSomething() {
throw new RuntimeException();
}
private void bar(Object o) {
o.toString();
}
private void foo() {
{ long a = 42;
long b = 25;
long c = a / b;
}
try {
long a = 42;
long b = 0;
long c = a / b;
} catch (Exception e) { }
try {
throw new Exception();
} catch (Exception e) { }
try {
throwSomething();
} catch (Exception e) { }
try {
Trace.class.getMethod("bar", Object.class).invoke(this, this);
} catch (Exception e) { }
}
private static void dummy() {
byte[] a = new byte[10];
byte[] b = new byte[10];
System.arraycopy(a, 0, b, 0, 10);
}
private static void tail1(int a, int b, int c, int d, int e, int f) {
dummy();
}
private static void tail2() {
tail1(1, 2, 3, 4, 5, 6);
tail1(1, 2, 3, 4, 5, 6);
}
private static void test(Trace trace) {
tail1(1, 2, 3, 4, 5, 6);
tail2();
trace.foo();
}
public void run() {
synchronized (this) {
notifyAll();
}
try {
for (int i = 0; i < 10000; ++i) {
test(this);
if (i % 100 == 0) {
System.out.print("r");
System.out.flush();
synchronized (this) {
notifyAll();
}
}
}
} finally {
synchronized (this) {
alive = false;
notifyAll();
}
}
}
public static void main(String[] args) throws Exception {
if ("true".equals(System.getenv("TRAVIS"))) {
// This test fails randomly on Travis-CI, though we've never
// been able to reproduce the failure elsewhere. So we disable
// it if we know we're running on Travis.
return;
}
Trace trace = new Trace();
Thread thread = new Thread(trace);
synchronized (trace) {
thread.start();
trace.wait();
int count = 0;
while (trace.alive) {
thread.getStackTrace();
++ count;
if (count % 100 == 0) {
trace.wait();
System.out.print("t");
System.out.flush();
}
}
System.out.println("\ngot " + count + " traces");
}
}
}