在Gradle 插件中统计并打印 Task 任务耗时

2024-06-12 10:08

本文主要是介绍在Gradle 插件中统计并打印 Task 任务耗时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Gradle 插件中统计并打印 Task 任务耗时


我们在使用 Gradle 构建任务时,有时想统计每个任务的耗时情况,以此发现每个任务的运行时间,以及是否存在可优化空间。

使用 Listener 进行监听

Gradle 提供了很多构建生命周期钩子函数。

1. 我们可以用 TaskExecutionListener 来监听整个构建过程中 task 的执行:
public interface TaskExecutionListener {void beforeExecute(Task task);void afterExecute(Task task, TaskState taskState);
}

我们可以在每个 task 执行前先收集信息,记录该 task 执行的开始时间等,在 task 执行完成后,记录其执行结束时间,这样就能统计出该 task 的执行时长。

2. 使用 BuildListener 来监听整个构建是否完成,在构建完成后,输出所有执行过的 task 信息,以及每个 task 的执行时长:
public interface BuildListener {void buildStarted(Gradle gradle);void settingsEvaluated(Settings settings);void projectsLoaded(Gradle gradle);void projectsEvaluated(Gradle gradle);void buildFinished(BuildResult buildResult);
}

在 buildFinished 方法中,监听构建完成以及成功与否,并打印我们采集的耗时信息。

代码实例

BuildTimeListener 是我自定义的一个监听任务耗时的工具类:

class BuildTimeListener implements TaskExecutionListener, BuildListener {//用来记录 task 的执行时长信息Map<String, TaskTimeInfo> taskTimeMap = new HashMap<>()@Overridevoid buildStarted(Gradle gradle) {}@Overridevoid settingsEvaluated(Settings settings) {}@Overridevoid projectsLoaded(Gradle gradle) {}@Overridevoid projectsEvaluated(Gradle gradle) {}@Overridevoid buildFinished(BuildResult buildResult) {println "-----------------GouAPM----------------------"println "---------------------------------------"println "build finished, now println all task execution time:"taskTimeMap.each{ k, v -> println "${k}:[${v.total}ms]" }println "---------------------------------------"println "---------------------------------------"}@Overridevoid beforeExecute(Task task) {//task开始执行之前搜集task的信息TaskTimeInfo timeInfo = new TaskTimeInfo()timeInfo.start = System.currentTimeMillis()timeInfo.path = task.getPath()taskTimeMap.put(task.getPath(), timeInfo)}@Overridevoid afterExecute(Task task, TaskState taskState) {//task执行完之后,记录结束时的时间TaskTimeInfo timeInfo = taskTimeMap.get(task.getPath())timeInfo.end = System.currentTimeMillis()//计算该 task 的执行时长timeInfo.total = timeInfo.end - timeInfo.start}class TaskTimeInfo {//task执行总时长long totalString pathlong startlong end}
}

我们在自定义插件中进行注册:

class MyPlugin implements Plugin<Project>{private Project mProject;@Overridevoid apply(Project project) {mProject = project;//注册监听,以统计任务的耗时project.gradle.addListener(new BuildTimeListener())}
}

**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》
**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》
**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》

这篇关于在Gradle 插件中统计并打印 Task 任务耗时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1053912

相关文章

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

如何设置windows计划任务

如何设置windows计划任务 前言:在工作过程中写了一个python脚本,用于调用jira接口查询bug单数量,想要在本地定时任务执行,每天发送到钉钉群提醒,写下操作步骤用于记录。 1. 准备 Python 脚本 确保你的 Python 脚本已经保存到一个文件,比如 jira_reminder.py。 2. 创建批处理文件 为了方便任务计划程序运行 Python 脚本,创建一个批处理文

WordPress网创自动采集并发布插件

网创教程:WordPress插件网创自动采集并发布 阅读更新:随机添加文章的阅读数量,购买数量,喜欢数量。 使用插件注意事项 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化,主要包括: 界面设置:用户现在可以更便捷地设置文章分类和发布金额。代码优化:改进了采集和发布代码,提高了插件的稳定

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

uniapp 使用uview 插件

看创建项目版本vue2 、 vue3 Button 按钮 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 1.  npm install uview-ui@2.0.36 2. // main.js,注意要在use方法之后执行import uView from 'uview-ui'Vue.use(uView)// 如此

MyBatis系列之分页插件及问题

概述 无论是C端产品页面,还是后台系统页面,不可能一次性将全部数据加载出来。后台系统一般都是PC端登录,用Table组件(如Ant Design Table)渲染展示数据,可点击列表的下一页(或指定某一页)查看数据。C端产品如App,在下滑时可查看更多数据,看起来像是一次性加载数据,实际上也是分批请求后台系统获取数据。而这,就是分页功能。 如果没有使用Hibernate或MyBatis这样的O

统计是一门艺术(点估计)

1 点估计 1.1 点估计理解(point estimate) 总体,样本属于参数空间 一般未知,要由样本对作一个估计,或对作一个估计,这种估计称为点估计 通常用记为的一个点估计。 1.2 点估计的方法 (1)矩估计: 就是用样本矩来代替总体矩,当然有好有坏 设为总体的一个简单随机样本,, 分别称, 为k阶样本原点矩和k阶样本中心矩. 记 为什么能用矩估计?

google-自我插件

1. Bitwarden 密码管理器 2. React Developer Tools 3. Vue.js devtools 4. YouTube™ 双字幕 5. 沉浸式翻译 - 网页翻译插件 6. FeHelper(前端助手) 7. IDM Integration Module 8. Redux DevTools - Next 9. 待续…

浏览器插件之C++开发ActiveX

转自:http://blog.csdn.net/SHIJIERUCIMEIHAO/article/details/8827940 网上看到些文章讲述关于C++创建ActiveX插件的讲述,觉得比较好,特保存起来    一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题。在有特殊需求(如涉及数据安全的金融业务数