Skip to content

Commit 1e295d7

Browse files
author
kristofer.karlsson
committed
added aggregated profiler
1 parent faf9d20 commit 1e295d7

File tree

4 files changed

+88
-3
lines changed

4 files changed

+88
-3
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package se.krka.kahlua.profiler;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public class AggregatingProfiler implements Profiler {
7+
private final StacktraceCounter root = new StacktraceCounter();
8+
9+
public AggregatingProfiler() {
10+
}
11+
12+
public synchronized void getSample(List<StacktraceElement> list, long time) {
13+
root.addTime(time);
14+
15+
StacktraceCounter counter = root;
16+
int n = list.size() - 1;
17+
while (n > 0) {
18+
StacktraceElement childElement = list.get(n);
19+
StacktraceCounter childCounter = counter.getOrCreateChild(childElement);
20+
21+
childCounter.addTime(time);
22+
23+
counter = childCounter;
24+
n--;
25+
}
26+
}
27+
28+
public void prettyPrint() {
29+
root.prettyPrint("Total", "");
30+
}
31+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package se.krka.kahlua.profiler;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class StacktraceCounter {
7+
private final Map<StacktraceElement, StacktraceCounter> children = new HashMap<StacktraceElement, StacktraceCounter>();
8+
private long time = 0;
9+
10+
public void addTime(long time) {
11+
this.time += time;
12+
}
13+
14+
public StacktraceCounter getOrCreateChild(StacktraceElement childElement) {
15+
StacktraceCounter stacktraceCounter = children.get(childElement);
16+
if (stacktraceCounter == null) {
17+
stacktraceCounter = new StacktraceCounter();
18+
children.put(childElement, stacktraceCounter);
19+
}
20+
return stacktraceCounter;
21+
}
22+
23+
public void prettyPrint(String name, String indent) {
24+
System.out.println(indent + name + ": " + time);
25+
for (Map.Entry<StacktraceElement, StacktraceCounter> entry : children.entrySet()) {
26+
entry.getValue().prettyPrint(entry.getKey().toString(), indent + " ");
27+
}
28+
}
29+
}

contrib/j2se-util/src/se/krka/kahlua/profiler/StacktraceElement.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,29 @@ public int getLine() {
2121
public String getSource() {
2222
return prototype.name;
2323
}
24+
25+
@Override
26+
public boolean equals(Object o) {
27+
if (this == o) return true;
28+
if (!(o instanceof StacktraceElement)) return false;
29+
30+
StacktraceElement that = (StacktraceElement) o;
31+
32+
if (pc != that.pc) return false;
33+
if (!prototype.equals(that.prototype)) return false;
34+
35+
return true;
36+
}
37+
38+
@Override
39+
public int hashCode() {
40+
int result = pc;
41+
result = 31 * result + prototype.hashCode();
42+
return result;
43+
}
44+
45+
@Override
46+
public String toString() {
47+
return getSource() + ":" + getLine();
48+
}
2449
}

contrib/j2se-util/test/se/krka/kahlua/profiler/DumpProfilerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public void simpleTest() throws IOException {
2424
"foo()",
2525
"test.lua",
2626
state.getEnvironment());
27-
StringWriter writer = new StringWriter();
28-
Sampler sampler = new Sampler(state, 1, new DumpProfiler(writer));
27+
AggregatingProfiler profiler = new AggregatingProfiler();
28+
Sampler sampler = new Sampler(state, 1, profiler);
2929
sampler.start();
3030
state.pcall(fun);
3131
sampler.stop();
32-
System.out.println(writer.getBuffer().toString());
32+
profiler.prettyPrint();
3333
}
3434
}

0 commit comments

Comments
 (0)