Commit 997d4b15 authored by Yaroslav Lepenkin's avatar Yaroslav Lepenkin
Browse files

[TypedAction] on type freeze show EDT stack trace in exception message,...

[TypedAction] on type freeze show EDT stack trace in exception message, decreased allowed max time to 500ms
parent c29efb5a
Showing with 29 additions and 3 deletions
+29 -3
......@@ -172,7 +172,7 @@ class FreezeLogger {
private static final Logger LOG = Logger.getInstance(FreezeLogger.class);
private static final Alarm ALARM = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, Disposer.newDisposable());
private static final int MAX_ALLOWED_TIME = 1000;
private static final int MAX_ALLOWED_TIME = 500;
public static void runUnderPerformanceMonitor(Runnable action) {
ALARM.cancelAllRequests();
......@@ -187,7 +187,12 @@ class FreezeLogger {
}
private static void dumpThreads() {
LOG.error("Slow typing report, thread dumps attached", ThreadDumper.dumpThreadsToString());
String dumps = ThreadDumper.dumpThreadsToString();
String msg = "Typing freeze report, thread dumps attached. EDT stacktrace:\n"
+ ThreadDumper.dumpEdtStackTrace()
+ "\n\n\n";
LOG.error(msg, dumps);
}
}
\ No newline at end of file
......@@ -41,6 +41,18 @@ public class ThreadDumper {
dumpThreadsToFile(ManagementFactory.getThreadMXBean(), writer);
return writer.toString();
}
@NotNull
public static String dumpEdtStackTrace() {
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
ThreadInfo[] threads = sort(threadMXBean.dumpAllThreads(false, false));
StringWriter writer = new StringWriter();
if (threads.length > 0) {
StackTraceElement[] trace = threads[0].getStackTrace();
printStackTrace(writer, trace);
}
return writer.toString();
}
@NotNull
public static ThreadDump getThreadDumpInfo(@NotNull final ThreadMXBean threadMXBean) {
......@@ -128,10 +140,19 @@ public class ThreadDumper {
}
f.write(sb + "\n");
printStackTrace(f, stackTraceElements);
f.write("\n");
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
private static void printStackTrace(@NotNull Writer f, @NotNull StackTraceElement[] stackTraceElements) {
try {
for (StackTraceElement element : stackTraceElements) {
f.write("\tat " + element.toString() + "\n");
}
f.write("\n");
}
catch (IOException e) {
throw new RuntimeException(e);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment