汇总--如何计算Gradle脚本中每个task的执行时间

来源于:http://stackoverflow.com/questions/13031538/track-execution-time-per-task-in-gradle-script

https://gist.github.com/nikos/3939407

https://github.com/Scuilion/gradle-utils/blob/master/src/main/groovy/com/scuilion/gradle/plugins/utils/debug/TestTiming.groovy

一)使用--profile参数

如:gradlew AssembleDebug --profile,会在build/reports/profile生出相应的时间统计数据,如下图:


二)编写脚本,实现TaskExecutionListener 接口并使用gradle.taskGraph.addTaskExecutionListener 注册。

如:

// Log timings per task.
class TimingsListener implements TaskExecutionListener, BuildListener {
    private Clock clock
    private timings = []

    @Override
    void beforeExecute(Task task) {
        clock = new org.gradle.util.Clock()
    }

    @Override
    void afterExecute(Task task, TaskState taskState) {
        def ms = clock.timeInMs
        timings.add([ms, task.path])
        task.project.logger.warn "${task.path} took ${ms}ms"
    }

    @Override
    void buildFinished(BuildResult result) {
        println "Task timings:"
        for (timing in timings) {
            if (timing[0] >= 50) {
                printf "%7sms  %s\n", timing
            }
        }
    }

    @Override
    void buildStarted(Gradle gradle) {}

    @Override
    void projectsEvaluated(Gradle gradle) {}

    @Override
    void projectsLoaded(Gradle gradle) {}

    @Override
    void settingsEvaluated(Settings settings) {}
}

gradle.addListener new TimingsListener()

关于TaskExecutionListener,见:https://docs.gradle.org/current/javadoc/org/gradle/api/execution/TaskExecutionListener.html

三)只计算某些任务的时间

有选择的注册TaskExecutionListener 接口,如:

TestTiming.groovy:

  package com.scuilion.gradle.plugins.utils.debug
   
  import com.scuilion.gradle.plugins.utils.UtilsProperties
  import org.gradle.api.Project
   
  class TestTiming {
   
  static void addTask(Projectproject) {
   
  project.task('testTiming') {
  }
   
  if (project.hasProperty('timeTests')) {
  project.rootProject.gradle.addListener new TestTimingListener()
  }
   
  project.tasks.testTiming.group= UtilsProperties.GROUP
  project.tasks.testTiming.description= "Add property 'timeTests' to get test runtime."
  }
  }

四)使用已有插件:

https://github.com/passy/build-time-tracker-plugin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值