package com.frogermcs.androiddevmetrics.internal.metrics.model;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* Created by Miroslaw Stanek on 23.01.2016.
*/
public class InitMetric {
public Class<?> cls;
public long initTimeMillis = 0;
public int instanceNo = 0;
public String threadName = "";
public Set<InitMetric> args = new HashSet<>();
public StackTraceElement[] traceElements;
public long getTotalInitTime() {
long total = initTimeMillis;
for (InitMetric initMetric : args) {
total += initMetric.getTotalInitTime();
}
return total;
}
public long getInitTimeWithoutArgs() {
return initTimeMillis;
}
public String getSimpleClassName() {
String className;
if (Proxy.isProxyClass(cls)) {
final Class<?>[] interfaces = cls.getInterfaces();
if (interfaces.length == 1) {
className = interfaces[0].getName();
} else {
className = Arrays.asList(interfaces).toString();
}
} else {
className = cls.getName();
}
int dot = className.lastIndexOf('.');
if (dot != -1) {
className = className.substring(dot + 1);
}
if (instanceNo > 0) {
return className + "#" + Integer.toString(instanceNo);
}
return className;
}
public String getThreadName() {
return threadName;
}
@Override
public String toString() {
if (Proxy.isProxyClass(cls)) {
return "InitMetric{" +
"initTimeMillis=" + initTimeMillis +
", cls=" + Arrays.asList(cls.getInterfaces()) +
", args=" + args +
'}';
} else {
return "InitMetric{" +
"initTimeMillis=" + initTimeMillis +
", cls=" + cls.getName() +
", args=" + args +
'}';
}
}
}