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
Branches unavailable Tags unavailable
No related merge requests found
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