[K/N] Move kotlin.native.internal.Debugging into kotlin.native.runtime

As a part of efforts to stabilize Native stdlib #KT-55765.
This commit is contained in:
Abduqodiri Qurbonzoda
2023-03-30 23:11:18 +03:00
parent f90b846f86
commit bb8498b0c5
15 changed files with 89 additions and 29 deletions
@@ -2749,6 +2749,7 @@ standaloneTest("custom_hook") {
}
expectedExitStatusChecker = { it != 0 }
source = "runtime/exceptions/custom_hook.kt"
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
}
standaloneTest("custom_hook_memory_leak") {
@@ -4709,6 +4710,7 @@ interopTest("interop_threadStates") {
disabled = (project.testTarget == 'wasm32') || // No interop for wasm yet.
!isExperimentalMM // No thread state switching in the legacy MM.
source = "interop/threadStates/threadStates.kt"
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
interop = "threadStates"
}
@@ -4717,6 +4719,7 @@ interopTest("interop_threadStates_callbacksWithExceptions") {
!isExperimentalMM // No thread state switching in the legacy MM.
source = "interop/threadStates/callbacksWithExceptions.kt"
interop = "threadStates"
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
}
interopTest("interop_threadStates_unhandledException") {
@@ -4726,6 +4729,7 @@ interopTest("interop_threadStates_unhandledException") {
interop = "threadStates"
outputChecker = { it.contains("Error. Runnable state: true") }
expectedExitStatusChecker = { it != 0 }
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
}
interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
@@ -4735,6 +4739,7 @@ interopTest("interop_threadStates_unhandledExceptionInForeignThread") {
interop = "threadStates"
outputChecker = { it.contains("Error. Runnable state: true") }
expectedExitStatusChecker = { it != 0 }
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
}
interopTest("interop_withSpaces") {
@@ -5408,6 +5413,7 @@ dynamicTest("produce_dynamic_unhandledException") {
clangTool = "clang++"
expectedExitStatusChecker = { it != 0 }
outputChecker = { str -> str.startsWith("Kotlin hook: Exception. Runnable state: true") }
flags = ['-opt-in=kotlin.native.internal.InternalForKotlinNative']
}
dynamicTest("interop_concurrentRuntime") {
@@ -11,7 +11,7 @@ fun main() {
// TODO: the test used to work with forceCheckedShutdown,
// but it is broken now. Revisit after it is fixed.
// kotlin.native.internal.Debugging.forceCheckedShutdown = true
// kotlin.native.runtime.Debugging.forceCheckedShutdown = true
Platform.isCleanersLeakCheckerActive = true
val f = Foo()
@@ -1,3 +1,5 @@
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
import leakMemory.*
import kotlin.native.concurrent.*
import kotlin.native.Platform
@@ -16,7 +18,7 @@ fun ensureInititalized() {
fun main() {
Platform.isMemoryLeakCheckerActive = true
kotlin.native.internal.Debugging.forceCheckedShutdown = true
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
assertTrue(global.value == 0)
// Created a thread, made sure Kotlin is initialized there.
test_RunInNewThread(staticCFunction(::ensureInititalized))
@@ -1,3 +1,5 @@
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
import leakMemory.*
import kotlin.native.concurrent.*
import kotlin.native.Platform
@@ -16,7 +18,7 @@ fun ensureInititalized() {
fun main() {
Platform.isMemoryLeakCheckerActive = true
kotlin.native.internal.Debugging.forceCheckedShutdown = false
kotlin.native.runtime.Debugging.forceCheckedShutdown = false
assertTrue(global.value == 0)
// Created a thread, made sure Kotlin is initialized there.
test_RunInNewThread(staticCFunction(::ensureInititalized))
@@ -1,3 +1,5 @@
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
import objclib.*
import kotlin.native.concurrent.*
import kotlinx.cinterop.*
@@ -19,6 +21,6 @@ fun main() {
if (Platform.memoryModel == MemoryModel.EXPERIMENTAL) {
// Experimental MM by default doesn't run GC neither on worker termination nor on program exit.
// Enforce GC on program exit:
kotlin.native.internal.Debugging.forceCheckedShutdown = true
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
}
}
@@ -11,7 +11,7 @@ import kotlin.test.*
fun main(args: Array<String>) {
// Test relies on full deinitialization at shutdown.
kotlin.native.internal.Debugging.forceCheckedShutdown = true
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
autoreleasepool {
run()
}
@@ -11,7 +11,7 @@ import kotlin.test.*
fun main(args: Array<String>) {
// Test relies on full deinitialization at shutdown.
kotlin.native.internal.Debugging.forceCheckedShutdown = true
kotlin.native.runtime.Debugging.forceCheckedShutdown = true
autoreleasepool {
run()
}
@@ -3,7 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
import kotlin.native.internal.Debugging
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.native.runtime.Debugging
import kotlin.test.*
import kotlinx.cinterop.staticCFunction
import threadStates.*
@@ -3,7 +3,9 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
import kotlin.native.internal.Debugging
@file:OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.native.runtime.Debugging
import kotlin.test.*
import kotlinx.cinterop.*
import threadStates.*
@@ -2,10 +2,10 @@
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.native.concurrent.*
import kotlin.native.internal.Debugging
import kotlin.native.runtime.Debugging
import kotlinx.cinterop.staticCFunction
import threadStates.*
@@ -2,10 +2,10 @@
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.native.concurrent.*
import kotlin.native.internal.Debugging
import kotlin.native.runtime.Debugging
import kotlinx.cinterop.staticCFunction
import threadStates.*
@@ -2,10 +2,11 @@
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.native.concurrent.*
import kotlin.native.internal.*
import kotlin.native.runtime.Debugging
fun setHookAndThrow() {
val hook = { throwable: Throwable ->
@@ -2,12 +2,13 @@
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class)
@file:OptIn(FreezingIsDeprecated::class, ExperimentalStdlibApi::class, kotlin.native.runtime.NativeRuntimeApi::class)
import kotlin.test.*
import kotlin.native.concurrent.*
import kotlin.native.internal.*
import kotlin.native.runtime.Debugging
fun mainLegacyMM() {
val wrong = "wrong"
@@ -7,13 +7,14 @@ package kotlin.native.internal
/*
* Internal utilities for debugging K/N compiler and runtime.
*/
public object Debugging {
public var forceCheckedShutdown: Boolean
get() = Debugging_getForceCheckedShutdown()
set(value) = Debugging_setForceCheckedShutdown(value)
public val isThreadStateRunnable: Boolean
get() = Debugging_isThreadStateRunnable()
@OptIn(kotlin.native.runtime.NativeRuntimeApi::class)
@Deprecated("Use kotlin.native.runtime.Debugging instead.", ReplaceWith("Debugging", "kotlin.native.runtime.Debugging"))
@DeprecatedSinceKotlin(warningSince = "1.9")
public object Debugging {
public var forceCheckedShutdown: Boolean by kotlin.native.runtime.Debugging::forceCheckedShutdown
public val isThreadStateRunnable: Boolean by kotlin.native.runtime.Debugging::isThreadStateRunnable
}
@GCUnsafeCall("Kotlin_Debugging_isPermanent")
@@ -23,12 +24,3 @@ public external fun Any.isPermanent() : Boolean
@GCUnsafeCall("Kotlin_Debugging_isLocal")
@InternalForKotlinNative
public external fun Any.isLocal() : Boolean
@GCUnsafeCall("Kotlin_Debugging_getForceCheckedShutdown")
private external fun Debugging_getForceCheckedShutdown(): Boolean
@GCUnsafeCall("Kotlin_Debugging_setForceCheckedShutdown")
private external fun Debugging_setForceCheckedShutdown(value: Boolean): Unit
@GCUnsafeCall("Kotlin_Debugging_isThreadStateRunnable")
private external fun Debugging_isThreadStateRunnable(): Boolean
@@ -0,0 +1,50 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package kotlin.native.runtime
import kotlin.native.internal.GCUnsafeCall
import kotlin.native.internal.InternalForKotlinNative
/**
* __Note__: this API is unstable and may change in any release.
*
* A set of utilities for debugging Kotlin/Native runtime.
*/
@NativeRuntimeApi
@SinceKotlin("1.9")
public object Debugging {
/**
* Run full checked deinitialization on shutdown.
*
* Make sure that after exiting `main()` only a single thread with Kotlin runtime remains.
* Run GC collecting everything including globals.
*
* When enabled together with [Platform.isCleanersLeakCheckerActive] additionally checks that no cleaners get executed after `main()`
*/
public var forceCheckedShutdown: Boolean
get() = Debugging_getForceCheckedShutdown()
set(value) = Debugging_setForceCheckedShutdown(value)
/**
* Whether the current thread's state allows running Kotlin code.
*
* Used by Kotlin/Native internal tests.
* If it returns `false`, it's a bug.
*/
@InternalForKotlinNative
public val isThreadStateRunnable: Boolean
get() = Debugging_isThreadStateRunnable()
}
@GCUnsafeCall("Kotlin_Debugging_getForceCheckedShutdown")
private external fun Debugging_getForceCheckedShutdown(): Boolean
@GCUnsafeCall("Kotlin_Debugging_setForceCheckedShutdown")
private external fun Debugging_setForceCheckedShutdown(value: Boolean): Unit
@GCUnsafeCall("Kotlin_Debugging_isThreadStateRunnable")
private external fun Debugging_isThreadStateRunnable(): Boolean