package org.sef4j.callstack.dummy;
import org.sef4j.callstack.CallStackElt.StackPopper;
import org.sef4j.callstack.LocalCallStack;
import org.sef4j.callstack.ThreadCpuTstUtils;
public class InstrumentedRecurseCallStackFoo {
private static final String CNAME = InstrumentedRecurseCallStackFoo.class.getName();
public int repeatFooCount = 1;
public long fooThreadSleep = 0;
public long fooThreadCpuLoop = 0;
public int recurseBarLevel = 1;
public int repeatBarRecurseCount = 1;
public int repeatBazCount = 1;
public long bazThreadSleep = 0;
public long bazThreadCpuLoop = 0;
public void fooBar() {
StackPopper toPop = LocalCallStack.meth(CNAME, "foo").push();
try {
bar();
} finally {
toPop.close();
}
}
public void bar() {
StackPopper toPop = LocalCallStack.meth(CNAME, "bar").push();
try {
} finally {
toPop.close();
}
}
public void fooProgress(int progressCount) {
StackPopper toPop = LocalCallStack.meth(CNAME, "foo")
.withProgressExpectedCount(progressCount)
.push();
try {
for (int i = 0; i < progressCount; i++) {
toPop.progressStep(1, null);
}
} finally {
toPop.close();
}
}
public void fooRecurseBarBaz() {
for(int i = 0; i < repeatFooCount; i++) {
StackPopper toPop = LocalCallStack.meth(CNAME, "foo").push();
try {
ThreadCpuTstUtils.sleepAndCpu(fooThreadSleep, fooThreadCpuLoop);
for (int j = 0; j < repeatBarRecurseCount; j++) {
recurseBar(recurseBarLevel);
}
} finally {
toPop.close();
}
}
}
public void recurseBar(int recurse) {
StackPopper toPop = LocalCallStack.meth(CNAME, "recurseBar").push();
try {
if (recurse > 0) {
// *** recurse ***
recurseBar(recurse - 1);
} else {
barBaz();
}
} finally {
toPop.close();
}
}
public void barBaz() {
StackPopper toPop = LocalCallStack.meth(CNAME, "bar").push();
try {
for(int i = 0; i < repeatBazCount; i++) {
baz();
}
} finally {
toPop.close();
}
}
private void baz() {
StackPopper toPop = LocalCallStack.meth(CNAME, "baz").push();
try {
ThreadCpuTstUtils.sleepAndCpu(bazThreadSleep, bazThreadCpuLoop);
} finally {
toPop.close();
}
}
}