Home | History | Annotate | Download | only in benchmark-android
      1 buildscript {
      2     repositories {
      3         jcenter()
      4     }
      5     dependencies {
      6         classpath libraries.android_tools
      7     }
      8 }
      9 
     10 description = 'Conscrypt: Android Benchmarks'
     11 
     12 ext {
     13     androidHome = "$System.env.ANDROID_HOME"
     14     androidSdkInstalled = file("$androidHome").exists()
     15     androidVersionCode = 1
     16     androidVersionName = "$version"
     17     androidMinSdkVersion = 24
     18     androidTargetSdkVersion = 25
     19     androidBuildToolsVersion = "25.0.0"
     20     androidBuildToolsDir = "${androidHome}/build-tools/${androidBuildToolsVersion}"
     21 }
     22 
     23 if (androidSdkInstalled) {
     24     apply plugin: 'com.android.library'
     25 
     26     android {
     27         compileSdkVersion androidTargetSdkVersion
     28         buildToolsVersion androidBuildToolsVersion
     29 
     30         compileOptions {
     31             sourceCompatibility androidMinJavaVersion;
     32             targetCompatibility androidMinJavaVersion
     33         }
     34 
     35         defaultConfig {
     36             minSdkVersion androidMinSdkVersion
     37             targetSdkVersion androidTargetSdkVersion
     38             versionCode androidVersionCode
     39             versionName androidVersionName
     40         }
     41         lintOptions {
     42             // Some Caliper classes reference packages that don't exist on Android
     43             disable 'InvalidPackage'
     44         }
     45         sourceSets.main {
     46             java {
     47                 srcDirs = [
     48                         "src/main/java"
     49                 ]
     50             }
     51         }
     52     }
     53 
     54     dependencies {
     55         compile project(':conscrypt-android'),
     56                 project(':conscrypt-benchmark-base'),
     57                 project(':conscrypt-testing')
     58 
     59         compile 'com.google.caliper:caliper:1.0-beta-2'
     60         compile libraries.bouncycastle_provider
     61 
     62     }
     63 
     64     // This task bundles up everything we're going to send to the device into a single jar.
     65     // We need to include all the Conscrypt code plus the Bouncy Castle jar because the platform
     66     // version of Bouncy Castle is jarjared.
     67     task depsJar(type: Jar, dependsOn: 'assembleRelease') {
     68         archiveName = 'bundled-deps.jar'
     69         from {
     70             configurations.compile.filter {
     71                 // Find the jars from our project plus BC
     72                 it.name.endsWith(".jar") && (it.path.startsWith("${rootDir}") || it.path.contains('org.bouncycastle'))
     73             }.collect {
     74                 zipTree(it)
     75             }
     76         }
     77         from {
     78             // Also include the classes.jar from our Android libraries
     79             ['.', "${rootDir}/android"].collect {
     80                 zipTree(it + '/build/intermediates/bundles/default/classes.jar')
     81             }
     82         }
     83         // Bouncy Castle signs their jar, which causes our combined jar to fail to verify.  Just
     84         // strip out the signature files.
     85         exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA"
     86     }
     87 
     88     task runBenchmarks(dependsOn: depsJar) {
     89         doLast {
     90             // First, determine which ABI the device uses so that we can send the right native lib
     91             new ByteArrayOutputStream().withStream { stream ->
     92                 exec {
     93                     commandLine = ['adb', 'shell', 'getprop', 'ro.product.cpu.abi']
     94                     standardOutput = stream
     95                 }
     96                 ext.androidDeviceAbi = stream.toString().trim()
     97                 ext.androidDevice64Bit = ext.androidDeviceAbi.contains('64')
     98             }
     99             def nativeLibPath = "/system/lib${androidDevice64Bit ? '64' : ''}/libconscrypt_jni.so"
    100             // Send the native library to the device
    101             exec {
    102                 executable "${androidHome}/platform-tools/adb"
    103                 args 'push'
    104                 args "${rootDir}/android/build/intermediates/bundles/default/jni/${androidDeviceAbi}/libconscrypt_jni.so"
    105                 args nativeLibPath
    106             }
    107             // Execute the benchmarks
    108             exec {
    109                 workingDir "${rootDir}"
    110                 environment PATH: "${androidBuildToolsDir}:$System.env.PATH"
    111                 environment JACK_JAR: "${androidBuildToolsDir}/jack.jar"
    112 
    113                 executable 'java'
    114                 args '-cp', 'benchmark-android/vogar.jar', 'vogar.Vogar'
    115                 args '--classpath', 'benchmark-android/build/libs/bundled-deps.jar'
    116                 args '--benchmark'
    117                 args '--language=JN'
    118                 args '--mode=app_process'
    119                 args 'org.conscrypt.CaliperAlpnBenchmark'
    120                 args 'org.conscrypt.CaliperClientSocketBenchmark'
    121                 args 'org.conscrypt.CaliperEngineHandshakeBenchmark'
    122                 args 'org.conscrypt.CaliperEngineWrapBenchmark'
    123             }
    124             // Clean up the native library
    125             exec {
    126                 commandLine = ['adb', 'shell', 'rm', '-f', nativeLibPath]
    127             }
    128         }
    129     }
    130 } else {
    131     logger.warn('Android SDK has not been detected. The Android Benchmark module will not be built.')
    132 
    133     // Disable all tasks
    134     tasks.collect {
    135         it.enabled = false
    136     }
    137 }
    138