来源于: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
如:gradlew AssembleDebug --profile,会在build/reports/profile生出相应的时间统计数据,如下图:
如:
// 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