diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/ProgressLogger.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/ProgressLogger.kt deleted file mode 100644 index 90c130f6c39..00000000000 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/ProgressLogger.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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. - */ - -package org.jetbrains.kotlin.descriptors.commonizer.cli - -import org.jetbrains.kotlin.util.Logger - -fun Logger.toProgressLogger(): Logger { - return ProgressLogger(this) -} - -private class ProgressLogger(private val logger: Logger) : Logger by logger { - override fun log(message: String) { - logger.log("* $message") - } - - override fun warning(message: String) { - logger.log("* $message") - } -} diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt index ddfa904a4cb..6b61c074243 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cli/nativeTasks.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.descriptors.commonizer.repository.Repository import org.jetbrains.kotlin.descriptors.commonizer.stats.FileStatsOutput import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsType +import org.jetbrains.kotlin.descriptors.commonizer.utils.ProgressLogger import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_KLIB_DIR import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR import org.jetbrains.kotlin.konan.target.KonanTarget @@ -61,17 +62,17 @@ internal class NativeKlibCommonize(options: Collection>) : Task(option val konanTargets = outputCommonizerTarget.konanTargets val commonizerTargets = konanTargets.map(::CommonizerTarget) - val logger = CliLoggerAdapter(2) - val libraryLoader = DefaultNativeLibraryLoader(logger) + val progressLogger = ProgressLogger(CliLoggerAdapter(2)) + val libraryLoader = DefaultNativeLibraryLoader(progressLogger) val statsCollector = StatsCollector(statsType, commonizerTargets) val repository = FilesRepository(targetLibraries.toSet(), libraryLoader) val resultsConsumer = buildResultsConsumer { this add ModuleSerializer(destination, HierarchicalCommonizerOutputLayout) this add CopyUnconsumedModulesAsIsConsumer( - repository, destination, commonizerTargets.toSet(), NativeDistributionCommonizerOutputLayout, logger.toProgressLogger() + repository, destination, commonizerTargets.toSet(), NativeDistributionCommonizerOutputLayout, progressLogger ) - this add LoggingResultsConsumer(outputCommonizerTarget, logger.toProgressLogger()) + this add LoggingResultsConsumer(outputCommonizerTarget, progressLogger) } LibraryCommonizer( @@ -83,7 +84,7 @@ internal class NativeKlibCommonize(options: Collection>) : Task(option targets = commonizerTargets, resultsConsumer = resultsConsumer, statsCollector = statsCollector, - logger = logger + progressLogger = progressLogger ).run() statsCollector?.writeTo(FileStatsOutput(destination, statsType.name.toLowerCase())) @@ -103,8 +104,8 @@ internal class NativeDistributionCommonize(options: Collection>) : Tas val copyEndorsedLibs = getOptional { it == "copy-endorsed-libs" } ?: false val statsType = getOptional { it == "log-stats" } ?: StatsType.NONE - val logger = CliLoggerAdapter(2) - val libraryLoader = DefaultNativeLibraryLoader(logger) + val progressLogger = ProgressLogger(CliLoggerAdapter(2)) + val libraryLoader = DefaultNativeLibraryLoader(progressLogger) val repository = KonanDistributionRepository(distribution, commonizerTargets.toSet(), libraryLoader) val existingTargets = commonizerTargets.filter { repository.getLibraries(it).isNotEmpty() }.toSet() val statsCollector = StatsCollector(statsType, commonizerTargets) @@ -112,11 +113,11 @@ internal class NativeDistributionCommonize(options: Collection>) : Tas val resultsConsumer = buildResultsConsumer { this add ModuleSerializer(destination, NativeDistributionCommonizerOutputLayout) this add CopyUnconsumedModulesAsIsConsumer( - repository, destination, commonizerTargets.toSet(), NativeDistributionCommonizerOutputLayout, logger.toProgressLogger() + repository, destination, commonizerTargets.toSet(), NativeDistributionCommonizerOutputLayout, progressLogger ) - if (copyStdlib) this add CopyStdlibResultsConsumer(distribution, destination, logger.toProgressLogger()) - if (copyEndorsedLibs) this add CopyEndorsedLibrairesResultsConsumer(distribution, destination, logger.toProgressLogger()) - this add LoggingResultsConsumer(SharedCommonizerTarget(existingTargets), logger.toProgressLogger()) + if (copyStdlib) this add CopyStdlibResultsConsumer(distribution, destination, progressLogger) + if (copyEndorsedLibs) this add CopyEndorsedLibrairesResultsConsumer(distribution, destination, progressLogger) + this add LoggingResultsConsumer(SharedCommonizerTarget(existingTargets), progressLogger) } val targetNames = commonizerTargets.joinToString { it.prettyName } @@ -132,7 +133,7 @@ internal class NativeDistributionCommonize(options: Collection>) : Tas targets = commonizerTargets, resultsConsumer = resultsConsumer, statsCollector = statsCollector, - logger = logger + progressLogger = progressLogger ).run() println("$description: Done") diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/LibraryCommonizer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/LibraryCommonizer.kt index 47bb2b5b901..1e253013467 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/LibraryCommonizer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/LibraryCommonizer.kt @@ -7,14 +7,12 @@ package org.jetbrains.kotlin.descriptors.commonizer.konan import org.jetbrains.kotlin.descriptors.commonizer.* import org.jetbrains.kotlin.descriptors.commonizer.LeafCommonizerTarget -import org.jetbrains.kotlin.descriptors.commonizer.cli.toProgressLogger import org.jetbrains.kotlin.descriptors.commonizer.konan.LibraryCommonizer.* import org.jetbrains.kotlin.descriptors.commonizer.repository.Repository import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector -import org.jetbrains.kotlin.descriptors.commonizer.utils.ResettableClockMark +import org.jetbrains.kotlin.descriptors.commonizer.utils.ProgressLogger import org.jetbrains.kotlin.konan.library.* import org.jetbrains.kotlin.storage.LockBasedStorageManager -import org.jetbrains.kotlin.util.Logger internal class LibraryCommonizer internal constructor( private val konanDistribution: KonanDistribution, @@ -24,17 +22,15 @@ internal class LibraryCommonizer internal constructor( private val targets: List, private val resultsConsumer: ResultsConsumer, private val statsCollector: StatsCollector?, - private val logger: Logger + private val progressLogger: ProgressLogger ) { - private val clockMark = ResettableClockMark() - fun run() { checkPreconditions() - clockMark.reset() + progressLogger.reset() val allLibraries = loadLibraries() commonizeAndSaveResults(allLibraries) - logTotal() + progressLogger.logTotal() } private fun loadLibraries(): AllNativeLibraries { @@ -46,17 +42,17 @@ internal class LibraryCommonizer internal constructor( librariesByTargets.forEach { (target, librariesToCommonize) -> if (librariesToCommonize.libraries.isEmpty()) { - logger.warning("No platform libraries found for target $target. This target will be excluded from commonization.") + progressLogger.warning("No platform libraries found for target $target. This target will be excluded from commonization.") } } - logProgress("Read lazy (uninitialized) libraries") + progressLogger.log("Read lazy (uninitialized) libraries") return AllNativeLibraries(stdlib, librariesByTargets) } private fun commonizeAndSaveResults(allLibraries: AllNativeLibraries) { val manifestProvider = TargetedNativeManifestDataProvider(allLibraries) - val parameters = CommonizerParameters(resultsConsumer, manifestProvider, statsCollector, ::logProgress).apply { + val parameters = CommonizerParameters(resultsConsumer, manifestProvider, statsCollector, progressLogger::log).apply { val storageManager = LockBasedStorageManager("Commonized modules") dependencyModulesProvider = NativeDistributionModulesProvider.forStandardLibrary(storageManager, allLibraries.stdlib) @@ -83,12 +79,8 @@ internal class LibraryCommonizer internal constructor( private fun checkPreconditions() { when (targets.size) { - 0 -> logger.fatal("No targets specified") - 1 -> logger.fatal("Too few targets specified: $targets") + 0 -> progressLogger.fatal("No targets specified") + 1 -> progressLogger.fatal("Too few targets specified: $targets") } } - - private fun logProgress(message: String) = logger.toProgressLogger().log("$message in ${clockMark.elapsedSinceLast()}") - - private fun logTotal() = logger.log("TOTAL: ${clockMark.elapsedSinceStart()}") } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/ProgressLogger.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/ProgressLogger.kt new file mode 100644 index 00000000000..191473e38f5 --- /dev/null +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/utils/ProgressLogger.kt @@ -0,0 +1,29 @@ +/* + * 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. + */ + +package org.jetbrains.kotlin.descriptors.commonizer.utils + +import org.jetbrains.kotlin.util.Logger + +class ProgressLogger(private val wrapped: Logger) : Logger by wrapped { + private val clockMark = ResettableClockMark() + private var finished = true + + fun reset() { + clockMark.reset() + finished = false + } + + override fun log(message: String) { + check(!finished) + wrapped.log("* $message in ${clockMark.elapsedSinceLast()}") + } + + fun logTotal() { + check(!finished) + wrapped.log("TOTAL: ${clockMark.elapsedSinceStart()}") + finished = true + } +}