diff options
author | Paweł Marks <pmarks@virtuslab.com> | 2020-03-09 17:18:26 +0100 |
---|---|---|
committer | Kamil Doległo <kamilok1965@interia.pl> | 2020-03-11 11:30:50 +0100 |
commit | 6db83944ee6832efcbf3583d2d2b0bde13fd9d89 (patch) | |
tree | cece6f05d352e71cebbb8ab1a1f5effbafe4705e | |
parent | 18c4ef366cb26152a719ea005aa95af4e6961c94 (diff) | |
download | dokka-6db83944ee6832efcbf3583d2d2b0bde13fd9d89.tar.gz dokka-6db83944ee6832efcbf3583d2d2b0bde13fd9d89.tar.bz2 dokka-6db83944ee6832efcbf3583d2d2b0bde13fd9d89.zip |
Adds time mesurement to track potential performance regressions
-rw-r--r-- | core/src/main/kotlin/DokkaGenerator.kt | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/core/src/main/kotlin/DokkaGenerator.kt b/core/src/main/kotlin/DokkaGenerator.kt index e318e969..1a0822d7 100644 --- a/core/src/main/kotlin/DokkaGenerator.kt +++ b/core/src/main/kotlin/DokkaGenerator.kt @@ -29,33 +29,33 @@ class DokkaGenerator( private val configuration: DokkaConfiguration, private val logger: DokkaLogger ) { - fun generate() { - logger.progress("Setting up analysis environments") + fun generate() = timed { + report("Setting up analysis environments") val platforms: Map<PlatformData, EnvironmentAndFacade> = setUpAnalysis(configuration) - logger.progress("Initializing plugins") + report("Initializing plugins") val context = initializePlugins(configuration, logger, platforms) - logger.progress("Creating documentation models") + report("Creating documentation models") val modulesFromPlatforms = createDocumentationModels(platforms, context) - logger.progress("Merging documentation models") + report("Merging documentation models") val documentationModel = mergeDocumentationModels(modulesFromPlatforms, context) - logger.progress("Transforming documentation model") + report("Transforming documentation model") val transformedDocumentation = transformDocumentationModel(documentationModel, context) - logger.progress("Creating pages") + report("Creating pages") val pages = createPages(transformedDocumentation, context) - logger.progress("Transforming pages") + report("Transforming pages") val transformedPages = transformPages(pages, context) - logger.progress("Rendering") + report("Rendering") render(transformedPages, context) logger.report() - } + }.dump("\n\n === TIME MEASUREMENT ===\n") fun setUpAnalysis(configuration: DokkaConfiguration): Map<PlatformData, EnvironmentAndFacade> = configuration.passesConfigurations.map { @@ -73,7 +73,7 @@ class DokkaGenerator( platforms: Map<PlatformData, EnvironmentAndFacade>, context: DokkaContext ) = platforms.map { (pdata, _) -> translateDescriptors(pdata, context) } + - platforms.map { (pdata, _) -> translatePsi(pdata, context) } + platforms.map { (pdata, _) -> translatePsi(pdata, context) } fun mergeDocumentationModels( modulesFromPlatforms: List<Module>, @@ -138,7 +138,7 @@ class DokkaGenerator( val sourceRoots = environment.configuration.get(CLIConfigurationKeys.CONTENT_ROOTS) ?.filterIsInstance<JavaSourceRoot>() ?.map { it.file } - ?: listOf() + ?: listOf() val localFileSystem = VirtualFileManager.getInstance().getFileSystem("file") val psiFiles = sourceRoots.map { sourceRoot -> @@ -176,4 +176,25 @@ class DokkaGenerator( class EnvironmentAndFacade(val environment: KotlinCoreEnvironment, val facade: DokkaResolutionFacade) { operator fun component1() = environment operator fun component2() = facade -}
\ No newline at end of file +} + +private class Timer(startTime: Long, private val logger: DokkaLogger?) { + private val steps = mutableListOf("" to startTime) + + fun report(name: String) { + logger?.progress(name) + steps += (name to System.currentTimeMillis()) + } + + fun dump(prefix: String = "") { + println(prefix) + val namePad = steps.map { it.first.length }.max() ?: 0 + val timePad = steps.windowed(2).map { (p1, p2) -> p2.second - p1.second }.max()?.toString()?.length ?: 0 + steps.windowed(2).forEach { (p1, p2) -> + println("${p2.first.padStart(namePad)}: ${(p2.second - p1.second).toString().padStart(timePad)}") + } + } +} + +private fun timed(logger: DokkaLogger? = null, block: Timer.() -> Unit): Timer = + Timer(System.currentTimeMillis(), logger).apply(block)
\ No newline at end of file |