[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.FileStatsOutput
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector
|
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsType
|
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_KLIB_DIR
|
||||||
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR
|
import org.jetbrains.kotlin.konan.library.KONAN_DISTRIBUTION_PLATFORM_LIBS_DIR
|
||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
@@ -61,17 +62,17 @@ internal class NativeKlibCommonize(options: Collection<Option<*>>) : Task(option
|
|||||||
val konanTargets = outputCommonizerTarget.konanTargets
|
val konanTargets = outputCommonizerTarget.konanTargets
|
||||||
val commonizerTargets = konanTargets.map(::CommonizerTarget)
|
val commonizerTargets = konanTargets.map(::CommonizerTarget)
|
||||||
|
|
||||||
val logger = CliLoggerAdapter(2)
|
val progressLogger = ProgressLogger(CliLoggerAdapter(2))
|
||||||
val libraryLoader = DefaultNativeLibraryLoader(logger)
|
val libraryLoader = DefaultNativeLibraryLoader(progressLogger)
|
||||||
val statsCollector = StatsCollector(statsType, commonizerTargets)
|
val statsCollector = StatsCollector(statsType, commonizerTargets)
|
||||||
val repository = FilesRepository(targetLibraries.toSet(), libraryLoader)
|
val repository = FilesRepository(targetLibraries.toSet(), libraryLoader)
|
||||||
|
|
||||||
val resultsConsumer = buildResultsConsumer {
|
val resultsConsumer = buildResultsConsumer {
|
||||||
this add ModuleSerializer(destination, HierarchicalCommonizerOutputLayout)
|
this add ModuleSerializer(destination, HierarchicalCommonizerOutputLayout)
|
||||||
this add CopyUnconsumedModulesAsIsConsumer(
|
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(
|
LibraryCommonizer(
|
||||||
@@ -83,7 +84,7 @@ internal class NativeKlibCommonize(options: Collection<Option<*>>) : Task(option
|
|||||||
targets = commonizerTargets,
|
targets = commonizerTargets,
|
||||||
resultsConsumer = resultsConsumer,
|
resultsConsumer = resultsConsumer,
|
||||||
statsCollector = statsCollector,
|
statsCollector = statsCollector,
|
||||||
logger = logger
|
progressLogger = progressLogger
|
||||||
).run()
|
).run()
|
||||||
|
|
||||||
statsCollector?.writeTo(FileStatsOutput(destination, statsType.name.toLowerCase()))
|
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 copyEndorsedLibs = getOptional<Boolean, BooleanOptionType> { it == "copy-endorsed-libs" } ?: false
|
||||||
val statsType = getOptional<StatsType, StatsTypeOptionType> { it == "log-stats" } ?: StatsType.NONE
|
val statsType = getOptional<StatsType, StatsTypeOptionType> { it == "log-stats" } ?: StatsType.NONE
|
||||||
|
|
||||||
val logger = CliLoggerAdapter(2)
|
val progressLogger = ProgressLogger(CliLoggerAdapter(2))
|
||||||
val libraryLoader = DefaultNativeLibraryLoader(logger)
|
val libraryLoader = DefaultNativeLibraryLoader(progressLogger)
|
||||||
val repository = KonanDistributionRepository(distribution, commonizerTargets.toSet(), libraryLoader)
|
val repository = KonanDistributionRepository(distribution, commonizerTargets.toSet(), libraryLoader)
|
||||||
val existingTargets = commonizerTargets.filter { repository.getLibraries(it).isNotEmpty() }.toSet()
|
val existingTargets = commonizerTargets.filter { repository.getLibraries(it).isNotEmpty() }.toSet()
|
||||||
val statsCollector = StatsCollector(statsType, commonizerTargets)
|
val statsCollector = StatsCollector(statsType, commonizerTargets)
|
||||||
@@ -112,11 +113,11 @@ internal class NativeDistributionCommonize(options: Collection<Option<*>>) : Tas
|
|||||||
val resultsConsumer = buildResultsConsumer {
|
val resultsConsumer = buildResultsConsumer {
|
||||||
this add ModuleSerializer(destination, NativeDistributionCommonizerOutputLayout)
|
this add ModuleSerializer(destination, NativeDistributionCommonizerOutputLayout)
|
||||||
this add CopyUnconsumedModulesAsIsConsumer(
|
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 (copyStdlib) this add CopyStdlibResultsConsumer(distribution, destination, progressLogger)
|
||||||
if (copyEndorsedLibs) this add CopyEndorsedLibrairesResultsConsumer(distribution, destination, logger.toProgressLogger())
|
if (copyEndorsedLibs) this add CopyEndorsedLibrairesResultsConsumer(distribution, destination, progressLogger)
|
||||||
this add LoggingResultsConsumer(SharedCommonizerTarget(existingTargets), logger.toProgressLogger())
|
this add LoggingResultsConsumer(SharedCommonizerTarget(existingTargets), progressLogger)
|
||||||
}
|
}
|
||||||
|
|
||||||
val targetNames = commonizerTargets.joinToString { it.prettyName }
|
val targetNames = commonizerTargets.joinToString { it.prettyName }
|
||||||
@@ -132,7 +133,7 @@ internal class NativeDistributionCommonize(options: Collection<Option<*>>) : Tas
|
|||||||
targets = commonizerTargets,
|
targets = commonizerTargets,
|
||||||
resultsConsumer = resultsConsumer,
|
resultsConsumer = resultsConsumer,
|
||||||
statsCollector = statsCollector,
|
statsCollector = statsCollector,
|
||||||
logger = logger
|
progressLogger = progressLogger
|
||||||
).run()
|
).run()
|
||||||
|
|
||||||
println("$description: Done")
|
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.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.LeafCommonizerTarget
|
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.konan.LibraryCommonizer.*
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.repository.Repository
|
import org.jetbrains.kotlin.descriptors.commonizer.repository.Repository
|
||||||
import org.jetbrains.kotlin.descriptors.commonizer.stats.StatsCollector
|
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.konan.library.*
|
||||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||||
import org.jetbrains.kotlin.util.Logger
|
|
||||||
|
|
||||||
internal class LibraryCommonizer internal constructor(
|
internal class LibraryCommonizer internal constructor(
|
||||||
private val konanDistribution: KonanDistribution,
|
private val konanDistribution: KonanDistribution,
|
||||||
@@ -24,17 +22,15 @@ internal class LibraryCommonizer internal constructor(
|
|||||||
private val targets: List<LeafCommonizerTarget>,
|
private val targets: List<LeafCommonizerTarget>,
|
||||||
private val resultsConsumer: ResultsConsumer,
|
private val resultsConsumer: ResultsConsumer,
|
||||||
private val statsCollector: StatsCollector?,
|
private val statsCollector: StatsCollector?,
|
||||||
private val logger: Logger
|
private val progressLogger: ProgressLogger
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val clockMark = ResettableClockMark()
|
|
||||||
|
|
||||||
fun run() {
|
fun run() {
|
||||||
checkPreconditions()
|
checkPreconditions()
|
||||||
clockMark.reset()
|
progressLogger.reset()
|
||||||
val allLibraries = loadLibraries()
|
val allLibraries = loadLibraries()
|
||||||
commonizeAndSaveResults(allLibraries)
|
commonizeAndSaveResults(allLibraries)
|
||||||
logTotal()
|
progressLogger.logTotal()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadLibraries(): AllNativeLibraries {
|
private fun loadLibraries(): AllNativeLibraries {
|
||||||
@@ -46,17 +42,17 @@ internal class LibraryCommonizer internal constructor(
|
|||||||
|
|
||||||
librariesByTargets.forEach { (target, librariesToCommonize) ->
|
librariesByTargets.forEach { (target, librariesToCommonize) ->
|
||||||
if (librariesToCommonize.libraries.isEmpty()) {
|
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)
|
return AllNativeLibraries(stdlib, librariesByTargets)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun commonizeAndSaveResults(allLibraries: AllNativeLibraries) {
|
private fun commonizeAndSaveResults(allLibraries: AllNativeLibraries) {
|
||||||
val manifestProvider = TargetedNativeManifestDataProvider(allLibraries)
|
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")
|
val storageManager = LockBasedStorageManager("Commonized modules")
|
||||||
dependencyModulesProvider = NativeDistributionModulesProvider.forStandardLibrary(storageManager, allLibraries.stdlib)
|
dependencyModulesProvider = NativeDistributionModulesProvider.forStandardLibrary(storageManager, allLibraries.stdlib)
|
||||||
|
|
||||||
@@ -83,12 +79,8 @@ internal class LibraryCommonizer internal constructor(
|
|||||||
|
|
||||||
private fun checkPreconditions() {
|
private fun checkPreconditions() {
|
||||||
when (targets.size) {
|
when (targets.size) {
|
||||||
0 -> logger.fatal("No targets specified")
|
0 -> progressLogger.fatal("No targets specified")
|
||||||
1 -> logger.fatal("Too few targets specified: $targets")
|
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