[Freeze Logger] send ThreadInfo objects instead of string

This commit is contained in:
Yaroslav Lepenkin
2016-09-15 20:05:49 +03:00
parent 480212e306
commit a7b5e9040c
2 changed files with 17 additions and 10 deletions
@@ -27,6 +27,8 @@ import com.intellij.util.Alarm;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.lang.management.ThreadInfo;
public class FreezeLoggerImpl extends FreezeLogger {
private static final Logger LOG = Logger.getInstance(FreezeLoggerImpl.class);
@@ -57,7 +59,8 @@ public class FreezeLoggerImpl extends FreezeLogger {
return;
}
final String edtTrace = ThreadDumper.dumpEdtStackTrace();
final ThreadInfo[] infos = ThreadDumper.getThreadInfos();
final String edtTrace = ThreadDumper.dumpEdtStackTrace(infos);
if (edtTrace.contains("java.lang.ClassLoader.loadClass")) {
return;
}
@@ -69,7 +72,7 @@ public class FreezeLoggerImpl extends FreezeLogger {
+ "\n\n\n";
if (Registry.is("typing.freeze.report.dumps")) {
ThreadDumpInfo info = new ThreadDumpInfo(dumps, isInDumbMode);
ThreadDumpInfo info = new ThreadDumpInfo(infos, isInDumbMode);
String report = ReporterKt.createReportLine("typing-freeze-dumps", info);
if (!StatsSender.INSTANCE.send(report, true)) {
LOG.debug("Error while reporting thread dump");
@@ -83,15 +86,15 @@ public class FreezeLoggerImpl extends FreezeLogger {
}
class ThreadDumpInfo {
public final String dump;
public final ThreadInfo[] threadInfos;
public final String version;
public final String product;
public final String buildNumber;
public final boolean isEAP;
public final boolean isInDumbMode;
public ThreadDumpInfo(String dump, boolean isInDumbMode) {
this.dump = dump;
public ThreadDumpInfo(ThreadInfo[] threadInfos, boolean isInDumbMode) {
this.threadInfos = threadInfos;
this.product = ApplicationInfo.getInstance().getVersionName();
this.version = ApplicationInfo.getInstance().getFullVersion();
this.buildNumber = ApplicationInfo.getInstance().getBuild().toString();
@@ -43,17 +43,21 @@ public class ThreadDumper {
}
@NotNull
public static String dumpEdtStackTrace() {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
ThreadInfo[] threads = sort(threadMXBean.dumpAllThreads(false, false));
public static String dumpEdtStackTrace(ThreadInfo[] threadInfos) {
StringWriter writer = new StringWriter();
if (threads.length > 0) {
StackTraceElement[] trace = threads[0].getStackTrace();
if (threadInfos.length > 0) {
StackTraceElement[] trace = threadInfos[0].getStackTrace();
printStackTrace(writer, trace);
}
return writer.toString();
}
@NotNull
public static ThreadInfo[] getThreadInfos() {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
return sort(threadMXBean.dumpAllThreads(false, false));
}
@NotNull
public static ThreadDump getThreadDumpInfo(@NotNull final ThreadMXBean threadMXBean) {
StringWriter writer = new StringWriter();