diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BinaryOptions.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BinaryOptions.kt index 7079b77bcbd..c797fdfb535 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BinaryOptions.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/BinaryOptions.kt @@ -64,6 +64,8 @@ object BinaryOptions : BinaryOptionRegistry() { val objcDisposeOnMain by booleanOption() val disableMmap by booleanOption() + + val disableAllocatorOverheadEstimate by booleanOption() } open class BinaryOption( diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index 07cc43613d2..9fd3db3f418 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -110,6 +110,9 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration } } } + val disableAllocatorOverheadEstimate: Boolean by lazy { + configuration.get(BinaryOptions.disableAllocatorOverheadEstimate) ?: false + } val workerExceptionHandling: WorkerExceptionHandling get() = configuration.get(KonanConfigKeys.WORKER_EXCEPTION_HANDLING)?.also { if (it != WorkerExceptionHandling.USE_HOOK) { configuration.report(CompilerMessageSeverity.STRONG_WARNING, "Legacy exception handling in workers is deprecated") diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 746ead107c9..ac0e3e6128c 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -2987,6 +2987,7 @@ internal fun NativeGenerationState.generateRuntimeConstantsModule() : LLVMModule setRuntimeConstGlobal("Kotlin_needDebugInfo", llvm.constInt32(if (shouldContainDebugInfo()) 1 else 0)) setRuntimeConstGlobal("Kotlin_runtimeAssertsMode", llvm.constInt32(config.runtimeAssertsMode.value)) setRuntimeConstGlobal("Kotlin_disableMmap", llvm.constInt32(if (config.disableMmap) 1 else 0)) + setRuntimeConstGlobal("Kotlin_disableAllocatorOverheadEstimate", llvm.constInt32(if (config.disableAllocatorOverheadEstimate) 1 else 0)) val runtimeLogs = config.runtimeLogs?.let { static.cStringLiteral(it) } ?: NullPointer(llvm.int8Type) diff --git a/kotlin-native/runtime/src/alloc/custom/cpp/AllocatorImpl.cpp b/kotlin-native/runtime/src/alloc/custom/cpp/AllocatorImpl.cpp index fc6c61b3122..d4f3af8ff41 100644 --- a/kotlin-native/runtime/src/alloc/custom/cpp/AllocatorImpl.cpp +++ b/kotlin-native/runtime/src/alloc/custom/cpp/AllocatorImpl.cpp @@ -52,6 +52,7 @@ void alloc::Allocator::clearForTests() noexcept { } size_t alloc::Allocator::estimateOverheadPerThread() noexcept { + if (compiler::disableAllocatorOverheadEstimate()) return 0; return impl_->heap().EstimateOverheadPerThread(); } diff --git a/kotlin-native/runtime/src/main/cpp/CompilerConstants.hpp b/kotlin-native/runtime/src/main/cpp/CompilerConstants.hpp index 82390b552f5..421045001d0 100644 --- a/kotlin-native/runtime/src/main/cpp/CompilerConstants.hpp +++ b/kotlin-native/runtime/src/main/cpp/CompilerConstants.hpp @@ -25,6 +25,7 @@ extern "C" const int32_t Kotlin_needDebugInfo; extern "C" const int32_t Kotlin_runtimeAssertsMode; extern "C" const int32_t Kotlin_disableMmap; +extern "C" const int32_t Kotlin_disableAllocatorOverheadEstimate; extern "C" const char* const Kotlin_runtimeLogs; extern "C" const int32_t Kotlin_concurrentWeakSweep; extern "C" const int32_t Kotlin_gcMarkSingleThreaded; @@ -77,6 +78,10 @@ ALWAYS_INLINE inline bool disableMmap() noexcept { return Kotlin_disableMmap != 0; } +ALWAYS_INLINE inline bool disableAllocatorOverheadEstimate() noexcept { + return Kotlin_disableAllocatorOverheadEstimate != 0; +} + ALWAYS_INLINE inline std::string_view runtimeLogs() noexcept { return Kotlin_runtimeLogs == nullptr ? std::string_view() : std::string_view(Kotlin_runtimeLogs); } diff --git a/kotlin-native/runtime/src/test_support/cpp/CompilerGenerated.cpp b/kotlin-native/runtime/src/test_support/cpp/CompilerGenerated.cpp index 5a6c01bf5f5..b3a5ab87430 100644 --- a/kotlin-native/runtime/src/test_support/cpp/CompilerGenerated.cpp +++ b/kotlin-native/runtime/src/test_support/cpp/CompilerGenerated.cpp @@ -73,6 +73,7 @@ extern const int32_t Kotlin_disableMmap = 1; #else extern const int32_t Kotlin_disableMmap = 0; #endif +extern const int32_t Kotlin_disableAllocatorOverheadEstimate = 0; extern const char* const Kotlin_runtimeLogs = nullptr; extern const int32_t Kotlin_concurrentWeakSweep = 1; #if KONAN_WINDOWS