mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[TypedAction] on type freeze show EDT stack trace in exception message, decreased allowed max time to 500ms
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user