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),
|
||||
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),
|
||||
|
||||
// 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.PropertiesProvider
|
||||
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.KotlinJsBinaryMode
|
||||
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._destinationDirectory = binary.distribution.directory
|
||||
|
||||
BuildMetricsReporterService.registerIfAbsent(project)?.let {
|
||||
task.buildMetricsReporterService.value(it)
|
||||
}
|
||||
|
||||
task.dependsOn(
|
||||
distributeResourcesTask
|
||||
)
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ import org.gradle.api.file.ProjectLayout
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.*
|
||||
import org.gradle.work.NormalizeLineEndings
|
||||
import org.gradle.workers.WorkerExecutor
|
||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||
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.isMain
|
||||
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.dsl.*
|
||||
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._destinationDirectory = distribution.directory
|
||||
|
||||
BuildMetricsReporterService.registerIfAbsent(project)?.let {
|
||||
task.buildMetricsReporterService.value(it)
|
||||
}
|
||||
|
||||
task.commonConfigure(
|
||||
compilation = compilation,
|
||||
dceTaskProvider = dceTaskProvider,
|
||||
|
||||
+25
-1
@@ -11,6 +11,7 @@ import org.gradle.api.file.FileCollection
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.internal.file.FileResolver
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.Provider
|
||||
import org.gradle.api.tasks.*
|
||||
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.process.internal.ExecHandle
|
||||
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.PropertiesProvider
|
||||
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.distsDirectory
|
||||
import org.jetbrains.kotlin.gradle.report.BuildMetricsReporterService
|
||||
import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency
|
||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
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 javax.inject.Inject
|
||||
|
||||
open class KotlinWebpack
|
||||
abstract class KotlinWebpack
|
||||
@Inject
|
||||
constructor(
|
||||
@Internal
|
||||
@@ -61,6 +66,13 @@ constructor(
|
||||
open val execHandleFactory: ExecHandleFactory
|
||||
get() = injected
|
||||
|
||||
@get:Internal
|
||||
internal abstract val buildMetricsReporterService: Property<BuildMetricsReporterService?>
|
||||
|
||||
@get:Internal
|
||||
val metrics: Property<BuildMetricsReporter> = project.objects
|
||||
.property(BuildMetricsReporterImpl())
|
||||
|
||||
@Suppress("unused")
|
||||
@get:Input
|
||||
val compilationId: String by lazy {
|
||||
@@ -302,6 +314,18 @@ constructor(
|
||||
progressReporterPathFilter = rootPackageDir.absolutePath
|
||||
)
|
||||
).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