From 82fc2d4219da4327475ae65d1b400e603a6fb546 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 4 Mar 2024 13:16:52 +0100 Subject: [PATCH] Revert "IJPL-166 coroutine dump without byte-buddy (final variant #10)" This reverts commit 4c661ba2 GitOrigin-RevId: dfc8542b326af558428adbb9a403fdd65a6fe313 --- .idea/modules.xml | 1 - .../intellij.platform.bootstrap.coroutine.iml | 30 ------------------- .../jvm/internal/CoroutineDumpState.java | 23 -------------- .../jvm/internal/DebugProbesKt.java | 28 ----------------- .../bootstrap/intellij.platform.bootstrap.iml | 1 + .../intellij/build/impl/PlatformModules.kt | 3 -- .../org/jetbrains/intellij/build/mergeJars.kt | 6 ++-- .../intellij.platform.ide.impl.iml | 1 - .../ide/bootstrap/ApplicationLoader.kt | 23 ++++++++++---- ...intellij.platform.testFramework.common.iml | 3 +- .../common/src/common/testApplication.kt | 3 -- 11 files changed, 23 insertions(+), 99 deletions(-) delete mode 100644 platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml delete mode 100644 platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java delete mode 100644 platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java diff --git a/.idea/modules.xml b/.idea/modules.xml index b02a82fb1d95..1c443e85542d 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -904,7 +904,6 @@ - diff --git a/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml b/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml deleted file mode 100644 index 29ce45fa06c6..000000000000 --- a/platform/bootstrap/coroutine/intellij.platform.bootstrap.coroutine.iml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java b/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java deleted file mode 100644 index 03c31511f6ed..000000000000 --- a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/CoroutineDumpState.java +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package kotlin.coroutines.jvm.internal; - -// cannot be in DebugProbesKt - in some context our override of class DebugProbesKt maybe not loaded -@SuppressWarnings({"KotlinInternalInJava", "UnnecessaryFullyQualifiedName", "RedundantSuppression"}) -public final class CoroutineDumpState { - // not volatile - that's ok to miss something - static boolean INSTALLED = false; - - public static void install() { - if (INSTALLED) { - return; - } - - // set to true - otherwise, install will try to load byte-buddy - kotlinx.coroutines.debug.internal.AgentInstallationType.INSTANCE.setInstalledStatically$kotlinx_coroutines_core(true); - kotlinx.coroutines.debug.internal.DebugProbesImpl debugProbes = kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE; - debugProbes.setEnableCreationStackTraces$kotlinx_coroutines_core(false); - debugProbes.install$kotlinx_coroutines_core(); - - INSTALLED = true; - } -} \ No newline at end of file diff --git a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java b/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java deleted file mode 100644 index d6b067824acd..000000000000 --- a/platform/bootstrap/coroutine/src/kotlin/coroutines/jvm/internal/DebugProbesKt.java +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package kotlin.coroutines.jvm.internal; - -import kotlin.coroutines.Continuation; - -@SuppressWarnings({"KotlinInternalInJava", "RedundantSuppression", "unchecked", "UnnecessaryFullyQualifiedName", "unused", "rawtypes"}) -public final class DebugProbesKt { - public static Continuation probeCoroutineCreated(Continuation completion) { - if (CoroutineDumpState.INSTALLED) { - return kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineCreated$kotlinx_coroutines_core(completion); - } - else { - return completion; - } - } - - public static void probeCoroutineResumed(Continuation frame) { - if (CoroutineDumpState.INSTALLED) { - kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineResumed$kotlinx_coroutines_core(frame); - } - } - - public static void probeCoroutineSuspended(Continuation frame) { - if (CoroutineDumpState.INSTALLED) { - kotlinx.coroutines.debug.internal.DebugProbesImpl.INSTANCE.probeCoroutineSuspended$kotlinx_coroutines_core(frame); - } - } -} \ No newline at end of file diff --git a/platform/bootstrap/intellij.platform.bootstrap.iml b/platform/bootstrap/intellij.platform.bootstrap.iml index 44e74c84e6de..011ad8a28d73 100644 --- a/platform/bootstrap/intellij.platform.bootstrap.iml +++ b/platform/bootstrap/intellij.platform.bootstrap.iml @@ -18,6 +18,7 @@ + diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt index ee8a05dc91d1..c6b45c0d3791 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/PlatformModules.kt @@ -200,9 +200,6 @@ internal suspend fun createPlatformLayout(addPlatformCoverage: Boolean, "intellij.platform.diagnostic", "intellij.platform.util", "intellij.platform.core", - // it has package `kotlin.coroutines.jvm.internal` - should be packed into the same JAR as coroutine lib, - // to ensure that package index will not report one more JAR in a search path - "intellij.platform.bootstrap.coroutine", ), productLayout = productLayout, layout = layout) // used by jdom - pack to the same JAR layout.withProjectLibrary(libraryName = "aalto-xml", jarName = UTIL_8_JAR) diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt index 44779bdb38a3..a91076cd5206 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/mergeJars.kt @@ -375,8 +375,8 @@ private fun getIgnoredNames(): Set { set.add("META-INF/$name.md") } } - set.add("kotlinx/coroutines/debug/internal/ByteBuddyDynamicAttach.class") - set.add("kotlin/coroutines/jvm/internal/DebugProbesKt.class") + //set.add("kotlinx/coroutines/debug/internal/ByteBuddyDynamicAttach.class") + //set.add("kotlin/coroutines/jvm/internal/DebugProbesKt.class") return java.util.Set.copyOf(set) } @@ -429,7 +429,7 @@ private fun checkNameForZipSource(name: String, excludes: List, includeMa !name.startsWith("META-INF/versions/10/org/bouncycastle/") && !name.startsWith("META-INF/versions/15/org/bouncycastle/") && - !name.startsWith("kotlinx/coroutines/repackaged/") && + //!name.startsWith("kotlinx/coroutines/repackaged/") && !name.startsWith("native/") && !name.startsWith("licenses/") && diff --git a/platform/platform-impl/intellij.platform.ide.impl.iml b/platform/platform-impl/intellij.platform.ide.impl.iml index ae3bb3afd347..15927b77d8cb 100644 --- a/platform/platform-impl/intellij.platform.ide.impl.iml +++ b/platform/platform-impl/intellij.platform.ide.impl.iml @@ -141,7 +141,6 @@ - diff --git a/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt b/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt index 82b453760876..3c8d6598d2c2 100644 --- a/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt +++ b/platform/platform-impl/src/com/intellij/platform/ide/bootstrap/ApplicationLoader.kt @@ -7,6 +7,7 @@ package com.intellij.platform.ide.bootstrap import com.intellij.diagnostic.COROUTINE_DUMP_HEADER import com.intellij.diagnostic.LoadingState import com.intellij.diagnostic.dumpCoroutines +import com.intellij.diagnostic.enableCoroutineDump import com.intellij.diagnostic.logs.LogLevelConfigurationManager import com.intellij.ide.* import com.intellij.ide.bootstrap.InitAppContext @@ -56,6 +57,7 @@ import com.intellij.util.PlatformUtils import com.intellij.util.io.URLUtil import com.intellij.util.io.createDirectories import com.intellij.util.lang.ZipFilePool +import com.intellij.util.system.CpuArch import com.jetbrains.JBR import kotlinx.coroutines.* import org.jetbrains.annotations.ApiStatus.Internal @@ -66,7 +68,6 @@ import java.nio.file.Files import java.nio.file.Path import java.util.concurrent.CancellationException import java.util.function.BiFunction -import kotlin.coroutines.jvm.internal.CoroutineDumpState import kotlin.system.exitProcess @Suppress("SSBasedInspection") @@ -203,7 +204,7 @@ internal suspend fun loadApp(app: ApplicationImpl, appRegisteredJob.join() initConfigurationStoreJob.join() - launch { + val appInitializedListenerJob = launch { val appInitializedListeners = appInitListeners.await() span("app initialized callback") { // An async scope here is intended for FLOW. FLOW!!! DO NOT USE the surrounding main scope. @@ -226,6 +227,8 @@ internal suspend fun loadApp(app: ApplicationImpl, addActivateAndWindowsCliListeners() } + appInitializedListenerJob.join() + applicationStarter.await() } } @@ -274,15 +277,25 @@ private suspend fun preloadNonHeadlessServices( } private suspend fun enableCoroutineDumpAndJstack() { - if (!System.getProperty("idea.enable.coroutine.dump", "true").toBoolean()) { + if (!System.getProperty("idea.enable.coroutine.dump", "true").toBoolean() || (SystemInfoRt.isWindows && CpuArch.isArm64())) { return } var isInstalled = false span("coroutine debug probes init") { try { - CoroutineDumpState.install() - isInstalled = true + enableCoroutineDump() + .onFailure { e -> + if (ApplicationManager.getApplication().isHeadlessEnvironment) { + LOG.warn("Cannot enable coroutine debug dump", e) + } + else { + LOG.error("Cannot enable coroutine debug dump", e) + } + } + .onSuccess { + isInstalled = true + } } catch (e: Throwable) { LOG.error("Cannot enable coroutine debug dump", e) diff --git a/platform/testFramework/common/intellij.platform.testFramework.common.iml b/platform/testFramework/common/intellij.platform.testFramework.common.iml index 1ce8eaf12e17..85029f58582e 100644 --- a/platform/testFramework/common/intellij.platform.testFramework.common.iml +++ b/platform/testFramework/common/intellij.platform.testFramework.common.iml @@ -7,7 +7,7 @@ - + @@ -23,6 +23,5 @@ - \ No newline at end of file diff --git a/platform/testFramework/common/src/common/testApplication.kt b/platform/testFramework/common/src/common/testApplication.kt index 9f3525ce7dd7..d1b8c809161e 100644 --- a/platform/testFramework/common/src/common/testApplication.kt +++ b/platform/testFramework/common/src/common/testApplication.kt @@ -75,7 +75,6 @@ import org.jetbrains.annotations.TestOnly import sun.awt.AWTAutoShutdown import java.time.Duration import java.util.concurrent.TimeUnit -import kotlin.coroutines.jvm.internal.CoroutineDumpState private var appInitResult: Result? = null const val LEAKED_PROJECTS: String = "leakedProjects" @@ -116,9 +115,7 @@ fun loadApp(setupEventQueue: Runnable) { System.setProperty("idea.diagnostic.opentelemetry.file", PathManager.getLogDir().resolve("opentelemetry.json").toAbsolutePath().toString()) - // if BB in classpath enableCoroutineDump() - CoroutineDumpState.install() JBR.getJstack()?.includeInfoFrom { """ $COROUTINE_DUMP_HEADER