Status Update
Comments
ch...@gmail.com <ch...@gmail.com> #2
一直在卡顿
ch...@gmail.com <ch...@gmail.com> #3
dump
gh...@google.com <gh...@google.com> #4
Thank you for the thread dumps; they point to our manifest merger as the possible cause (holding the read lock and maybe not calling checkCanceled
often enough).
"Alarm Pool" prio=0 tid=0x0 nid=0x0 runnable
java.lang.Thread.State: RUNNABLE
at java.base@17.0.6/java.util.stream.Sink$ChainedReference.cancellationRequested(Unknown Source)
at java.base@17.0.6/java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.base@17.0.6/java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.base@17.0.6/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base@17.0.6/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base@17.0.6/java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
at java.base@17.0.6/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base@17.0.6/java.util.stream.ReferencePipeline.findAny(Unknown Source)
at com.android.manifmerger.XmlElement.initMergeableChildren(XmlElement.java:1249)
at com.android.manifmerger.XmlElement.appendChild(XmlElement.java:340)
at com.android.manifmerger.XmlElement.addElement(XmlElement.java:1025)
at com.android.manifmerger.XmlElement.mergeChild(XmlElement.java:710)
at com.android.manifmerger.XmlElement.mergeChildren(XmlElement.java:663)
at com.android.manifmerger.XmlElement.mergeWithLowerPriorityNode(XmlElement.java:589)
at com.android.manifmerger.XmlElement.handleTwoElementsExistence(XmlElement.java:902)
at com.android.manifmerger.XmlElement.mergeChild(XmlElement.java:757)
at com.android.manifmerger.XmlElement.mergeChildren(XmlElement.java:663)
at com.android.manifmerger.XmlElement.mergeWithLowerPriorityNode(XmlElement.java:589)
at com.android.manifmerger.XmlDocument.merge(XmlDocument.java:206)
at com.android.manifmerger.ManifestMerger2.merge(ManifestMerger2.java:1178)
at com.android.manifmerger.ManifestMerger2.merge(ManifestMerger2.java:377)
at com.android.manifmerger.ManifestMerger2$Invoker.merge(ManifestMerger2.java:2161)
at com.android.tools.idea.model.MergedManifestInfo.getMergedManifest(MergedManifestInfo.java:394)
at com.android.tools.idea.model.MergedManifestInfo.mergeManifests(MergedManifestInfo.java:234)
at com.android.tools.idea.model.MergedManifestInfo.create(MergedManifestInfo.java:214)
at com.android.tools.idea.model.MergedManifestSupplier.createMergedManifestSnapshot(MergedManifestManager.kt:126)
at com.android.tools.idea.model.MergedManifestSupplier.access$createMergedManifestSnapshot(MergedManifestManager.kt:60)
at com.android.tools.idea.model.MergedManifestSupplier$getOrCreateSnapshot$1.compute(MergedManifestManager.kt:109)
at com.android.tools.idea.model.MergedManifestSupplier$getOrCreateSnapshot$1.compute(MergedManifestManager.kt:102)
at com.android.tools.idea.model.MergedManifestSupplier$runCancellableReadAction$1.call(MergedManifestManager.kt:269)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor.callWrapped(NonBlockingReadActionImpl.java:746)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$OTelMonitor$MonitoredComputation.call(NonBlockingReadActionImpl.java:778)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:573)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$3(NonBlockingReadActionImpl.java:537)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission$$Lambda$1647/0x000000080125e298.run(Unknown Source)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1111)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:71)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils$$Lambda$1648/0x000000080125e4e8.run(Unknown Source)
at com.intellij.openapi.progress.util.ProgressIndicatorUtilService.runActionAndCancelBeforeWrite(ProgressIndicatorUtilService.java:63)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:128)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:109)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils$$Lambda$1650/0x000000080125e988.compute(Unknown Source)
at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:68)
at com.intellij.openapi.progress.ProgressManager$$Lambda$1651/0x000000080125ec00.run(Unknown Source)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186)
at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$1606/0x0000000801235070.run(Unknown Source)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604)
at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$1608/0x0000000801235520.compute(Unknown Source)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:68)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:106)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:71)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:537)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.executeSynchronously(NonBlockingReadActionImpl.java:464)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl.executeSynchronously(NonBlockingReadActionImpl.java:218)
at com.android.tools.idea.model.MergedManifestSupplier.runCancellableReadAction(MergedManifestManager.kt:269)
at com.android.tools.idea.model.MergedManifestSupplier.getOrCreateSnapshot(MergedManifestManager.kt:102)
at com.android.tools.idea.model.MergedManifestSupplier.getOrCreateSnapshotFromDelegate(MergedManifestManager.kt:224)
at com.android.tools.idea.model.MergedManifestSupplier.access$getOrCreateSnapshotFromDelegate(MergedManifestManager.kt:60)
at com.android.tools.idea.model.MergedManifestSupplier$delegate$1.invoke(MergedManifestManager.kt:62)
at com.android.tools.idea.model.MergedManifestSupplier$delegate$1.invoke(MergedManifestManager.kt:62)
at com.android.tools.idea.concurrency.ThrottlingAsyncSupplier.runScheduledComputation(ThrottlingAsyncSupplier.kt:119)
at com.android.tools.idea.concurrency.ThrottlingAsyncSupplier.access$runScheduledComputation(ThrottlingAsyncSupplier.kt:41)
at com.android.tools.idea.concurrency.ThrottlingAsyncSupplier$get$1.run(ThrottlingAsyncSupplier.kt:92)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:241)
at com.intellij.util.Alarm$Request.runSafely(Alarm.java:377)
at com.intellij.util.Alarm$Request.run(Alarm.java:366)
at java.base@17.0.6/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base@17.0.6/java.util.concurrent.FutureTask.run(Unknown Source)
at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:243)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:29)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:216)
at com.intellij.util.concurrency.BoundedTaskExecutor$1$$Lambda$708/0x0000000800792100.run(Unknown Source)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:212)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:205)
at java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base@17.0.6/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base@17.0.6/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Unknown Source)
at java.base@17.0.6/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Unknown Source)
at java.base@17.0.6/java.security.AccessController.executePrivileged(Unknown Source)
at java.base@17.0.6/java.security.AccessController.doPrivileged(Unknown Source)
at java.base@17.0.6/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Unknown Source)
at java.base@17.0.6/java.lang.Thread.run(Unknown Source)
an...@google.com <an...@google.com> #5
PTAL at whether there's an inefficiency in the merger that can be addressed here, or in the worst case if more cancellation checks can be added.
am...@google.com <am...@google.com> #6
Current process cancellation check is granular at file level meaning that when merging two large manifest files(or even one very large file), we may still not able to abort manifest merger if this takes some time causing freezes. We improved the manifest merging of files with CL ag/24794128 but along with that, we can benefit from making process cancellation check even more granular. ag/25518978 address that and is currently in code review.
am...@google.com <am...@google.com> #7
To summarize, we are addressing UI freezes with 2 changes:
- Optimize the manifest XML node merge logic to speed up manifest XML merge.
- During XML document merge, we now periodically check if the manifest merger process is still not cancelled(Editing manifest cancels the whole merge). Both of these changes are merged into main.
an...@google.com <an...@google.com> #8
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Iguana | 2023.2.1 Canary 17
- Android Gradle Plugin 8.3.0-alpha17
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
Description