From 9b9fa9d92da82bb0aed97367fa4c7b159283b2be Mon Sep 17 00:00:00 2001 From: LepilkinaElena Date: Fri, 1 Mar 2019 14:50:11 +0300 Subject: [PATCH] =?UTF-8?q?Corner=20cases=20with=20failed=20code=20size=20?= =?UTF-8?q?measurement.=20Choice=20tools=20for=20buil=E2=80=A6=20(#2731)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/helloworld/build.gradle | 3 ++- performance/videoplayer/build.gradle | 21 ++++++++++--------- .../org/jetbrains/analyzer/Statistics.kt | 4 ++-- .../org/jetbrains/renders/HTMLRender.kt | 14 +++++++------ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/performance/helloworld/build.gradle b/performance/helloworld/build.gradle index 982a98f36b3..06a3f7c0801 100644 --- a/performance/helloworld/build.gradle +++ b/performance/helloworld/build.gradle @@ -1,8 +1,9 @@ def dist = findProperty('org.jetbrains.kotlin.native.home') ?: 'dist' +def toolExtension = System.getProperty("os.name").startsWith('Windows') ? ".bat" : "" project.ext { applicationName = 'HelloWorld' repeatNumber = 10 - buildSteps = ["runKonanc": ["${project.getProjectDir()}/$dist/bin/konanc", "${project.getProjectDir()}/src/main/kotlin/main.kt", "-o", + buildSteps = ["runKonanc": ["${project.getProjectDir()}/$dist/bin/konanc$toolExtension", "${project.getProjectDir()}/src/main/kotlin/main.kt", "-o", "${buildDir.absolutePath}/program${MPPTools.getNativeProgramExtension()}"]] } apply from: rootProject.file("${rootProject.rootDir}/gradle/compileBenchmark.gradle") \ No newline at end of file diff --git a/performance/videoplayer/build.gradle b/performance/videoplayer/build.gradle index e4228d9f72c..aec77583c13 100644 --- a/performance/videoplayer/build.gradle +++ b/performance/videoplayer/build.gradle @@ -1,4 +1,5 @@ def dist = findProperty('org.jetbrains.kotlin.native.home') ?: 'dist' +def toolExtension = System.getProperty("os.name").startsWith('Windows') ? ".bat" : "" def linkerOpts = [] if (MPPTools.isMacos()) { @@ -34,15 +35,15 @@ if (MPPTools.isMacos()) { project.ext { applicationName = 'Videoplayer' - repeatNumber = 2 - buildSteps = ["runCinteropFfmpeg": ["$dist/bin/cinterop", "-o", "$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-ffmpeg.klib", - "-def", "$dist/../samples/videoplayer/src/nativeInterop/cinterop/ffmpeg.def"] + filterDirsFfmpeg + includeDirsFfmpeg, - "runCinteropSdl": ["$dist/bin/cinterop", "-o", "$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-sdl.klib", - "-def", "$dist/../samples/videoplayer/src/nativeInterop/cinterop/sdl.def"] + includeDirsSdl, - "runKonanProgram": ["$dist/bin/konanc", "-ea", "-p", "program", "-o", "${buildDir.absolutePath}/program${MPPTools.getNativeProgramExtension()}", - "-l", "$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-ffmpeg.klib", - "-l", "$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-sdl.klib", - "-Xmulti-platform", "$dist/../samples/videoplayer/src/videoPlayerMain/kotlin", - "-entry", "sample.videoplayer.main"] + linkerOpts] + repeatNumber = 10 + buildSteps = ["runCinteropFfmpeg": ["${project.getProjectDir()}/$dist/bin/cinterop$toolExtension", "-o", "${project.getProjectDir()}/$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-ffmpeg.klib", + "-def", "${project.getProjectDir()}/$dist/../samples/videoplayer/src/nativeInterop/cinterop/ffmpeg.def"] + filterDirsFfmpeg + includeDirsFfmpeg, + "runCinteropSdl": ["${project.getProjectDir()}/$dist/bin/cinterop$toolExtension", "-o", "${project.getProjectDir()}/$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-sdl.klib", + "-def", "${project.getProjectDir()}/$dist/../samples/videoplayer/src/nativeInterop/cinterop/sdl.def"] + includeDirsSdl, + "runKonanProgram": ["${project.getProjectDir()}/$dist/bin/konanc$toolExtension", "-ea", "-p", "program", "-o", "${buildDir.absolutePath}/program${MPPTools.getNativeProgramExtension()}", + "-l", "${project.getProjectDir()}/$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-ffmpeg.klib", + "-l", "${project.getProjectDir()}/$dist/../samples/videoplayer/build/classes/kotlin/videoPlayer/main/videoplayer-cinterop-sdl.klib", + "-Xmulti-platform", "${project.getProjectDir()}/$dist/../samples/videoplayer/src/videoPlayerMain/kotlin", + "-entry", "sample.videoplayer.main"] + linkerOpts] } apply from: rootProject.file("${rootProject.rootDir}/gradle/compileBenchmark.gradle") \ No newline at end of file diff --git a/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/analyzer/Statistics.kt b/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/analyzer/Statistics.kt index 19b25871dab..be94b15d1c4 100644 --- a/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/analyzer/Statistics.kt +++ b/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/analyzer/Statistics.kt @@ -82,8 +82,8 @@ data class MeanVarianceBenchmark(val meanBenchmark: BenchmarkResult, val varianc } -fun geometricMean(values: List, totalNumber: Int? = null) = - values.map { it.pow(1.0 / (totalNumber ?: values.size)) }.reduce { a, b -> a * b } +fun geometricMean(values: List, totalNumber: Int = values.size) = + values.asSequence().filter{ it != 0.0 }.map { it.pow(1.0 / totalNumber) }.reduce { a, b -> a * b } fun computeMeanVariance(samples: List): MeanVariance { val zStar = 1.67 // Critical point for 90% confidence of normal distribution. diff --git a/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/renders/HTMLRender.kt b/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/renders/HTMLRender.kt index e45ff4c0d05..e89f4c1be9a 100644 --- a/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/renders/HTMLRender.kt +++ b/tools/benchmarksAnalyzer/src/main/kotlin/org/jetbrains/renders/HTMLRender.kt @@ -554,7 +554,7 @@ class HTMLRender: Render() { private fun TableBlock.renderBenchmarksDetails(fullSet: Map, bucket: Map? = null, rowStyle: String? = null) { - if (bucket != null) { + if (bucket != null && !bucket.isEmpty()) { // Find max ratio. val maxRatio = bucket.values.map { it.second.mean }.max()!! // There are changes in performance. @@ -568,12 +568,13 @@ class HTMLRender: Render() { td { +"${fullSet.getValue(name).first}" } td { +"${fullSet.getValue(name).second}" } td { - attributes["bgcolor"] = ColoredCell(change.first.mean / abs(bucket.values.first().first.mean)) + attributes["bgcolor"] = ColoredCell(if (bucket.values.first().first.mean == 0.0) null + else change.first.mean / abs(bucket.values.first().first.mean)) .backgroundStyle +"${change.first.toString() + " %"}" } td { - val scaledRatio = change.second.mean / maxRatio + val scaledRatio = if (maxRatio == 0.0) null else change.second.mean / maxRatio attributes["bgcolor"] = ColoredCell(scaledRatio).backgroundStyle +"${change.second}" } @@ -649,18 +650,19 @@ class HTMLRender: Render() { } } - class ColoredCell(val scaledValue: Double, val reverse: Boolean = false) { + class ColoredCell(val scaledValue: Double?, val reverse: Boolean = false) { val value: Double val neutralColor = Color(1.0,1.0 , 1.0) val negativeColor = Color(0.0, 1.0, 0.0) val positiveColor = Color(1.0, 0.0, 0.0) init { - value = if (abs(scaledValue) <= 1.0) scaledValue else error ("Value should be scaled in range [-1.0; 1.0]") + value = scaledValue?.let { if (abs(scaledValue) <= 1.0) scaledValue else error ("Value should be scaled in range [-1.0; 1.0]") } + ?: 0.0 } val backgroundStyle: String - get() = getColor().toString() + get() = scaledValue?.let { getColor().toString() } ?: "" fun getColor(): Color { val currentValue = clamp(value, -1.0, 1.0)