From a7b5e9040c518e32fc9218e8d8ecdffb9e2ad810 Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Thu, 15 Sep 2016 20:02:09 +0300 Subject: [PATCH] [Freeze Logger] send ThreadInfo objects instead of string --- .../com/intellij/reporting/FreezeLoggerImpl.java | 13 ++++++++----- .../src/com/intellij/diagnostic/ThreadDumper.java | 14 +++++++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/reporting/FreezeLoggerImpl.java b/platform/platform-impl/src/com/intellij/reporting/FreezeLoggerImpl.java index 2c9214a6d238..901f8e78ee27 100644 --- a/platform/platform-impl/src/com/intellij/reporting/FreezeLoggerImpl.java +++ b/platform/platform-impl/src/com/intellij/reporting/FreezeLoggerImpl.java @@ -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(); diff --git a/platform/util/src/com/intellij/diagnostic/ThreadDumper.java b/platform/util/src/com/intellij/diagnostic/ThreadDumper.java index 12b3e7e09535..f5eaeb502dbf 100644 --- a/platform/util/src/com/intellij/diagnostic/ThreadDumper.java +++ b/platform/util/src/com/intellij/diagnostic/ThreadDumper.java @@ -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();