[Commonizer] Log time in commonizer result consumers
This commit is contained in:
-22
@@ -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")
|
||||
}
|
||||
}
|
||||
+13
-12
@@ -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<Option<*>>) : 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<Option<*>>) : 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<Option<*>>) : Tas
|
||||
val copyEndorsedLibs = getOptional<Boolean, BooleanOptionType> { it == "copy-endorsed-libs" } ?: false
|
||||
val statsType = getOptional<StatsType, StatsTypeOptionType> { 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<Option<*>>) : 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<Option<*>>) : Tas
|
||||
targets = commonizerTargets,
|
||||
resultsConsumer = resultsConsumer,
|
||||
statsCollector = statsCollector,
|
||||
logger = logger
|
||||
progressLogger = progressLogger
|
||||
).run()
|
||||
|
||||
println("$description: Done")
|
||||
|
||||
+9
-17
@@ -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<LeafCommonizerTarget>,
|
||||
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()}")
|
||||
}
|
||||
|
||||
+29
@@ -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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user