Chentai-Kao / call-graph-plugin

Code Graph Intellij Plugin
82 stars 29 forks source link

UI blocking #1

Open krasa opened 5 years ago

krasa commented 5 years ago

even though it runs on background, a read action blocks. You can reproduce it on https://github.com/JetBrains/intellij-community

http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/general_threading_rules.html#preventing-ui-freezes

"AWT-EventQueue-0 2019.1.1#IC-191.6707.61 IDEA, eap:false, os:Windows 10 10.0, java-version:JetBrains s.r.o 1.8.0_202-release-1483-b44" prio=0 tid=0x0 nid=0x0 waiting on condition
     java.lang.Thread.State: TIMED_WAITING
 on com.intellij.openapi.application.impl.ReadMostlyRWLock@5c687910
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at com.intellij.openapi.application.impl.ReadMostlyRWLock.writeLock(ReadMostlyRWLock.java:216)
    at com.intellij.openapi.application.impl.ApplicationImpl.startWrite(ApplicationImpl.java:1229)
    at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1052)
    at com.intellij.openapi.application.async.AppUIExecutorImpl$inWriteAction$1.schedule(AppUIExecutorImpl.kt:116)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$SimpleConstraintDispatcher.dispatch(BaseAsyncExecutionSupport.kt:99)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher.dispatch(BaseAsyncExecutionSupport.kt:76)
    at com.intellij.openapi.application.async.RescheduleAttemptLimitAwareDispatcher.retryDispatch(RescheduleAttemptLimitAwareDispatcher.kt:29)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher$dispatch$$inlined$Runnable$1.run(Runnable.kt:19)
    at com.intellij.openapi.command.impl.CoreCommandProcessor.runUndoTransparentAction(CoreCommandProcessor.java:377)
    at com.intellij.openapi.application.async.AppUIExecutorImpl$inUndoTransparentAction$1.schedule(AppUIExecutorImpl.kt:103)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$SimpleConstraintDispatcher.dispatch(BaseAsyncExecutionSupport.kt:99)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher.dispatch(BaseAsyncExecutionSupport.kt:76)
    at com.intellij.openapi.application.async.RescheduleAttemptLimitAwareDispatcher.retryDispatch(RescheduleAttemptLimitAwareDispatcher.kt:29)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher$dispatch$$inlined$Runnable$1.run(Runnable.kt:19)
    at com.intellij.openapi.application.TransactionGuardImpl.runSyncTransaction(TransactionGuardImpl.java:88)
    at com.intellij.openapi.application.TransactionGuardImpl.lambda$submitTransaction$1(TransactionGuardImpl.java:111)
    at com.intellij.openapi.application.TransactionGuardImpl$$Lambda$493/954162291.run(Unknown Source)
    at com.intellij.openapi.application.TransactionGuardImpl.submitTransaction(TransactionGuardImpl.java:120)
    at com.intellij.openapi.application.async.AppUIExecutorImpl$inTransaction$1.schedule(AppUIExecutorImpl.kt:90)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$SimpleConstraintDispatcher.dispatch(BaseAsyncExecutionSupport.kt:99)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher.dispatch(BaseAsyncExecutionSupport.kt:76)
    at com.intellij.openapi.application.async.RescheduleAttemptLimitAwareDispatcher.retryDispatch(RescheduleAttemptLimitAwareDispatcher.kt:29)
    at com.intellij.openapi.application.async.BaseAsyncExecutionSupport$CompositeDispatcher$dispatch$$inlined$Runnable$1.run(Runnable.kt:19)
    at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:315)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:435)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:419)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:403)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:741)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:690)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:385)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

"ApplicationImpl pooled thread 31" prio=0 tid=0x0 nid=0x0 runnable
     java.lang.Thread.State: RUNNABLE

    at com.intellij.openapi.util.UserDataHolderBase.getUserData(UserDataHolderBase.java:60)
    at com.intellij.psi.impl.file.impl.FileManagerImpl.getRawCachedViewProvider(FileManagerImpl.java:233)
    at com.intellij.psi.impl.file.impl.FileManagerImpl.findCachedViewProvider(FileManagerImpl.java:214)
    at com.intellij.psi.impl.file.impl.FileManagerImpl.getCachedPsiFileInner(FileManagerImpl.java:463)
    at com.intellij.psi.impl.file.impl.FileManagerImpl.getCachedPsiFile(FileManagerImpl.java:380)
    at com.intellij.psi.impl.PsiDocumentManagerBase.getCachedPsiFile(PsiDocumentManagerBase.java:146)
    at com.intellij.psi.impl.PsiDocumentManagerImpl$1.lambda$fileContentLoaded$0(PsiDocumentManagerImpl.java:66)
    at com.intellij.psi.impl.PsiDocumentManagerImpl$1$$Lambda$1093/1086064777.compute(Unknown Source)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:970)
    at com.intellij.openapi.application.ReadAction.compute(ReadAction.java:57)
    at com.intellij.psi.impl.PsiDocumentManagerImpl$1.fileContentLoaded(PsiDocumentManagerImpl.java:66)
    at sun.reflect.GeneratedMethodAccessor149.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.util.messages.impl.MessageBusConnectionImpl.deliverMessage(MessageBusConnectionImpl.java:114)
    at com.intellij.util.messages.impl.MessageBusImpl.doPumpMessages(MessageBusImpl.java:393)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpWaitingBuses(MessageBusImpl.java:354)
    at com.intellij.util.messages.impl.MessageBusImpl.pumpMessages(MessageBusImpl.java:343)
    at com.intellij.util.messages.impl.MessageBusImpl.sendMessage(MessageBusImpl.java:320)
    at com.intellij.util.messages.impl.MessageBusImpl.access$100(MessageBusImpl.java:29)
    at com.intellij.util.messages.impl.MessageBusImpl$1.invoke(MessageBusImpl.java:192)
    at com.sun.proxy.$Proxy22.fileContentLoaded(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor149.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.multiCast(FileDocumentManagerImpl.java:142)
    at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.lambda$new$0(FileDocumentManagerImpl.java:122)
    at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl$$Lambda$196/1869628908.invoke(Unknown Source)
    at com.sun.proxy.$Proxy22.fileContentLoaded(Unknown Source)
    at com.intellij.openapi.fileEditor.impl.FileDocumentManagerImpl.getDocument(FileDocumentManagerImpl.java:205)
    at com.intellij.psi.AbstractFileViewProvider.getDocument(AbstractFileViewProvider.java:192)
    at com.intellij.psi.AbstractFileViewProvider$VirtualFileContent.getText(AbstractFileViewProvider.java:474)
    at com.intellij.psi.AbstractFileViewProvider.getContents(AbstractFileViewProvider.java:172)
    at com.intellij.psi.impl.source.PsiFileImpl.loadTreeElement(PsiFileImpl.java:209)
    at com.intellij.psi.impl.source.PsiFileImpl.calcTreeElement(PsiFileImpl.java:714)
    at com.intellij.extapi.psi.StubBasedPsiElementBase.getNode(StubBasedPsiElementBase.java:142)
    at com.intellij.psi.impl.source.PsiFieldImpl.getNode(PsiFieldImpl.java:96)
    at com.intellij.psi.impl.source.PsiFieldImpl.getInitializer(PsiFieldImpl.java:224)
    at com.intellij.psi.scope.util.PsiScopesUtil.setupAndRunProcessor(PsiScopesUtil.java:328)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolveToMethod(PsiReferenceExpressionImpl.java:331)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:283)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.access$000(PsiReferenceExpressionImpl.java:46)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:190)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:178)
    at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$1(ResolveCache.java:203)
    at com.intellij.psi.impl.source.resolve.ResolveCache$$Lambda$1771/2027748412.compute(Unknown Source)
    at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:116)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:202)
    at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:797)
    at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:788)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.multiResolve(PsiReferenceExpressionImpl.java:377)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.advancedResolve(PsiReferenceExpressionImpl.java:539)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:839)
    at callgraph.Utils.getDependenciesFromMethod(Utils.kt:101)
    at callgraph.CanvasBuilder.getDependencies(CanvasBuilder.kt:70)
    at callgraph.CanvasBuilder.build(CanvasBuilder.kt:20)
    at callgraph.CallGraphToolWindow$run$1.run(CallGraphToolWindow.kt:217)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:945)
    at callgraph.Utils$runBackgroundTask$1.run(Utils.kt:124)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:731)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:164)
    at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$152/1365744381.run(Unknown Source)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:586)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:532)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:86)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:151)
    at com.intellij.openapi.progress.impl.CoreProgressManager$4.run(CoreProgressManager.java:403)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:311)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)