Added measuring code size for full application

This commit is contained in:
Elena Lepilkina
2019-01-30 15:14:56 +03:00
committed by LepilkinaElena
parent f47feb9d85
commit f54f570fbf
4 changed files with 28 additions and 8 deletions
+10 -5
View File
@@ -41,6 +41,7 @@ private def determinePreset() {
}
def hostPreset = determinePreset()
def applicationName = 'Ring'
kotlin {
sourceSets {
@@ -104,13 +105,15 @@ task jvmRun(type: JavaExec) {
task konanJsonReport {
doLast {
def nativeCompileTime = MPPTools.getNativeCompileTime('Ring')
def nativeExecutable = MPPTools.getKotlinNativeExecutable(kotlin.targets.native, "RELEASE")
def nativeCompileTime = MPPTools.getNativeCompileTime(applicationName)
String benchContents = new File("${buildDir.absolutePath}/${nativeBenchResults}").text
def properties = getCommonProperties() + ['type' : 'native',
'compilerVersion': "${konanVersion}".toString(),
'flags' : kotlin.targets.native.compilations.main.extraOpts.collect{ '"' + it + '"'},
'flags' : kotlin.targets.native.compilations.main.extraOpts.collect{ "\"$it\"" },
'benchmarks' : benchContents,
'compileTime' : nativeCompileTime]
'compileTime' : nativeCompileTime,
'codeSize' : MPPTools.getCodeSizeBenchmark(applicationName, nativeExecutable) ]
def output = MPPTools.createJsonReport(properties)
new File("${buildDir.absolutePath}/${nativeJson}").write(output)
uploadBenchmarkResultToBintray(nativeJson)
@@ -119,12 +122,14 @@ task konanJsonReport {
task jvmJsonReport {
doLast {
def jvmCompileTime = MPPTools.getJvmCompileTime('Ring')
def jarPath = project.getTasks().getByName("jvmJar").archivePath
def jvmCompileTime = MPPTools.getJvmCompileTime(applicationName)
String benchContents = new File("${buildDir.absolutePath}/${jvmBenchResults}").text
def properties = getCommonProperties() + ['type' : 'jvm',
'compilerVersion': "${buildKotlinVersion}".toString(),
'benchmarks' : benchContents,
'compileTime' : jvmCompileTime]
'compileTime' : jvmCompileTime,
'codeSize' : MPPTools.getCodeSizeBenchmark(applicationName, "${jarPath}") ]
def output = MPPTools.createJsonReport(properties)
new File("${buildDir.absolutePath}/${jvmJson}").write(output)
uploadBenchmarkResultToBintray(jvmJson)
@@ -76,6 +76,21 @@ fun getNativeProgramExtension(): String = when {
else -> error("Unknown host")
}
fun getKotlinNativeExecutable(target: KotlinTarget, buildType: String) =
target.compilations.main.getBinary("EXECUTABLE", buildType).toString()
fun getFileSize(filePath: String): Long? {
val file = File(filePath)
return if (file.exists()) file.length() else null
}
fun getCodeSizeBenchmark(programName: String, filePath: String): BenchmarkResult {
val codeSize = getFileSize(filePath)
return BenchmarkResult("$programName.codeSize",
codeSize?. let { BenchmarkResult.Status.PASSED } ?: run { BenchmarkResult.Status.FAILED },
codeSize?.toDouble() ?: 0.0, codeSize?.toDouble() ?: 0.0, 1, 0)
}
// Create benchmarks json report based on information get from gradle project
fun createJsonReport(projectProperties: Map<String, Any>): String {
fun getValue(key: String): String = projectProperties[key] as? String ?: "unknown"
@@ -89,7 +104,8 @@ fun createJsonReport(projectProperties: Map<String, Any>): String {
val benchDesc = getValue("benchmarks")
val benchmarksArray = JsonTreeParser.parse(benchDesc)
val benchmarks = BenchmarksReport.parseBenchmarksArray(benchmarksArray)
.union(listOf<BenchmarkResult>(projectProperties["compileTime"] as BenchmarkResult)).toList()
.union(listOf<BenchmarkResult>(projectProperties["compileTime"] as BenchmarkResult,
projectProperties["codeSize"] as BenchmarkResult)).toList()
val report = BenchmarksReport(env, benchmarks, kotlin)
return report.toJson()
}
@@ -20,7 +20,6 @@ import org.w3c.xhr.*
import kotlin.browser.*
import kotlin.js.*
actual fun readFile(fileName: String): String {
error("Reading from local file for JS isn't supported")
}
@@ -38,7 +38,7 @@ data class MeanVarianceBenchmark(val meanBenchmark: BenchmarkResult, val varianc
fun calcPercentageDiff(other: MeanVarianceBenchmark): MeanVariance {
assert(other.meanBenchmark.score >= 0 &&
other.varianceBenchmark.score >= 0 &&
abs(other.meanBenchmark.score - other.varianceBenchmark.score) != 0.0,
other.meanBenchmark.score - other.varianceBenchmark.score != 0.0,
{ "Mean and variance should be positive and not equal!" })
val mean = (meanBenchmark.score - other.meanBenchmark.score) / other.meanBenchmark.score
val maxValueChange = abs(meanBenchmark.score + varianceBenchmark.score -