[Commonizer] Log time in commonizer result consumers

This commit is contained in:
Dmitriy Dolovov
2021-02-18 15:01:41 +03:00
parent 496aad3c4a
commit fb51105a5d
4 changed files with 51 additions and 51 deletions
@@ -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")
}
}
@@ -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")
@@ -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()}")
}
@@ -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
}
}