-
-
Notifications
You must be signed in to change notification settings - Fork 430
/
FreqInlineCounter.java
61 lines (47 loc) · 1.75 KB
/
FreqInlineCounter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package org.adoptopenjdk.jitwatch.jarscan;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_COMMA;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.C_DOUBLE_QUOTE;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_STATIC_INIT;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.S_NEWLINE;
import java.util.List;
import org.adoptopenjdk.jitwatch.model.MemberSignatureParts;
import org.adoptopenjdk.jitwatch.model.bytecode.BytecodeInstruction;
import org.adoptopenjdk.jitwatch.model.bytecode.MemberBytecode;
public class FreqInlineCounter implements IJarScanOperation
{
private int freqInlineSize;
private StringBuilder builder = new StringBuilder();
public FreqInlineCounter(int freqInlineSize)
{
this.freqInlineSize = freqInlineSize;
}
public String getReport()
{
return builder.toString();
}
@Override
public void processInstructions(String className, MemberBytecode memberBytecode)
{
List<BytecodeInstruction> instructions = memberBytecode.getInstructions();
if (instructions != null && instructions.size() > 0)
{
BytecodeInstruction lastInstruction = instructions.get(instructions.size() - 1);
// final instruction is a return for 1 byte
int bcSize = 1 + lastInstruction.getOffset();
MemberSignatureParts msp = memberBytecode.getMemberSignatureParts();
if (bcSize >= freqInlineSize && !S_STATIC_INIT.equals(msp.getMemberName()))
{
builder.append(C_DOUBLE_QUOTE);
builder.append(className);
builder.append(C_DOUBLE_QUOTE);
builder.append(C_COMMA);
builder.append(C_DOUBLE_QUOTE);
builder.append(msp.getMemberName());
builder.append(C_DOUBLE_QUOTE);
builder.append(C_COMMA);
builder.append(bcSize);
builder.append(S_NEWLINE);
}
}
}
}