rra/ilgonmic/statistics
[JS, Statistics] Register absence in legacy webpack [JS, Statistics]Register build metrics reporter service for webpack task [JS, Statistics] Use only bundle size [JS, Statistic] Add bundle size to webpack task [JS, Statistic] Collect information about compilation size [Gradle, JS] Add size metrics Merge-request: KT-MR-6388 Merged-by: Ilya Goncharov <Ilya.Goncharov@jetbrains.com>
This commit is contained in:
@@ -13,6 +13,8 @@ enum class BuildPerformanceMetric(val parent: BuildPerformanceMetric? = null, va
|
|||||||
LOOKUP_SIZE(CACHE_DIRECTORY_SIZE, "Lookups size", type = SizeMetricType.BYTES),
|
LOOKUP_SIZE(CACHE_DIRECTORY_SIZE, "Lookups size", type = SizeMetricType.BYTES),
|
||||||
SNAPSHOT_SIZE(CACHE_DIRECTORY_SIZE, "ABI snapshot size", type = SizeMetricType.BYTES),
|
SNAPSHOT_SIZE(CACHE_DIRECTORY_SIZE, "ABI snapshot size", type = SizeMetricType.BYTES),
|
||||||
|
|
||||||
|
BUNDLE_SIZE(readableString = "Total size of the final bundle", type = SizeMetricType.BYTES),
|
||||||
|
|
||||||
COMPILE_ITERATION(parent = null, "Total compiler iteration", type = SizeMetricType.NUMBER),
|
COMPILE_ITERATION(parent = null, "Total compiler iteration", type = SizeMetricType.NUMBER),
|
||||||
|
|
||||||
// Metrics for the `kotlin.incremental.useClasspathSnapshot` feature
|
// Metrics for the `kotlin.incremental.useClasspathSnapshot` feature
|
||||||
|
|||||||
+5
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJsDce
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalDceDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
|
||||||
@@ -195,6 +196,10 @@ open class KotlinBrowserJsIr @Inject constructor(target: KotlinJsIrTarget) :
|
|||||||
task.description = "build webpack ${mode.name.toLowerCase()} bundle"
|
task.description = "build webpack ${mode.name.toLowerCase()} bundle"
|
||||||
task._destinationDirectory = binary.distribution.directory
|
task._destinationDirectory = binary.distribution.directory
|
||||||
|
|
||||||
|
BuildMetricsReporterService.registerIfAbsent(project)?.let {
|
||||||
|
task.buildMetricsReporterService.value(it)
|
||||||
|
}
|
||||||
|
|
||||||
task.dependsOn(
|
task.dependsOn(
|
||||||
distributeResourcesTask
|
distributeResourcesTask
|
||||||
)
|
)
|
||||||
|
|||||||
+1
@@ -11,6 +11,7 @@ import org.gradle.api.file.ProjectLayout
|
|||||||
import org.gradle.api.model.ObjectFactory
|
import org.gradle.api.model.ObjectFactory
|
||||||
import org.gradle.api.provider.Property
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
|
import org.gradle.work.NormalizeLineEndings
|
||||||
import org.gradle.workers.WorkerExecutor
|
import org.gradle.workers.WorkerExecutor
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
|
|||||||
+5
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
import org.jetbrains.kotlin.gradle.plugin.mpp.isTest
|
||||||
|
import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.executeTaskBaseName
|
import org.jetbrains.kotlin.gradle.targets.js.ir.executeTaskBaseName
|
||||||
@@ -236,6 +237,10 @@ open class KotlinBrowserJs @Inject constructor(target: KotlinJsTarget) :
|
|||||||
task.description = "build webpack ${type.name.toLowerCase()} bundle"
|
task.description = "build webpack ${type.name.toLowerCase()} bundle"
|
||||||
task._destinationDirectory = distribution.directory
|
task._destinationDirectory = distribution.directory
|
||||||
|
|
||||||
|
BuildMetricsReporterService.registerIfAbsent(project)?.let {
|
||||||
|
task.buildMetricsReporterService.value(it)
|
||||||
|
}
|
||||||
|
|
||||||
task.commonConfigure(
|
task.commonConfigure(
|
||||||
compilation = compilation,
|
compilation = compilation,
|
||||||
dceTaskProvider = dceTaskProvider,
|
dceTaskProvider = dceTaskProvider,
|
||||||
|
|||||||
+25
-1
@@ -11,6 +11,7 @@ import org.gradle.api.file.FileCollection
|
|||||||
import org.gradle.api.file.RegularFileProperty
|
import org.gradle.api.file.RegularFileProperty
|
||||||
import org.gradle.api.internal.file.FileResolver
|
import org.gradle.api.internal.file.FileResolver
|
||||||
import org.gradle.api.model.ObjectFactory
|
import org.gradle.api.model.ObjectFactory
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.deployment.internal.Deployment
|
import org.gradle.deployment.internal.Deployment
|
||||||
@@ -18,11 +19,15 @@ import org.gradle.deployment.internal.DeploymentHandle
|
|||||||
import org.gradle.deployment.internal.DeploymentRegistry
|
import org.gradle.deployment.internal.DeploymentRegistry
|
||||||
import org.gradle.process.internal.ExecHandle
|
import org.gradle.process.internal.ExecHandle
|
||||||
import org.gradle.process.internal.ExecHandleFactory
|
import org.gradle.process.internal.ExecHandleFactory
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporter
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildMetricsReporterImpl
|
||||||
|
import org.jetbrains.kotlin.build.report.metrics.BuildPerformanceMetric
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.archivesName
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.distsDirectory
|
||||||
|
import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies
|
||||||
@@ -35,7 +40,7 @@ import org.jetbrains.kotlin.gradle.utils.property
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
open class KotlinWebpack
|
abstract class KotlinWebpack
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
@Internal
|
@Internal
|
||||||
@@ -61,6 +66,13 @@ constructor(
|
|||||||
open val execHandleFactory: ExecHandleFactory
|
open val execHandleFactory: ExecHandleFactory
|
||||||
get() = injected
|
get() = injected
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
internal abstract val buildMetricsReporterService: Property<BuildMetricsReporterService?>
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val metrics: Property<BuildMetricsReporter> = project.objects
|
||||||
|
.property(BuildMetricsReporterImpl())
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
@get:Input
|
@get:Input
|
||||||
val compilationId: String by lazy {
|
val compilationId: String by lazy {
|
||||||
@@ -302,6 +314,18 @@ constructor(
|
|||||||
progressReporterPathFilter = rootPackageDir.absolutePath
|
progressReporterPathFilter = rootPackageDir.absolutePath
|
||||||
)
|
)
|
||||||
).execute(services)
|
).execute(services)
|
||||||
|
|
||||||
|
val buildMetrics = metrics.get()
|
||||||
|
destinationDirectory.walkTopDown()
|
||||||
|
.filter { it.isFile }
|
||||||
|
.filter { it.extension == "js" }
|
||||||
|
.map { it.length() }
|
||||||
|
.sum()
|
||||||
|
.let {
|
||||||
|
buildMetrics.addMetric(BuildPerformanceMetric.BUNDLE_SIZE, it)
|
||||||
|
}
|
||||||
|
|
||||||
|
buildMetricsReporterService.orNull?.also { it.addTask(path, this.javaClass, buildMetrics) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user