Zählen und drucken Sie den Zeitverbrauch von Aufgaben im Gradle-Plugin

Zählen und drucken Sie den Zeitverbrauch von Aufgaben im Gradle-Plugin


Wenn wir Gradle zum Erstellen von Aufgaben verwenden, möchten wir manchmal den Zeitverbrauch jeder Aufgabe zählen, um die Laufzeit jeder Aufgabe herauszufinden und festzustellen, ob Optimierungspotenzial besteht.

Verwenden Sie Listener zur Überwachung

Gradle bietet viele Build-Lifecycle-Hooks.

1. Wir können TaskExecutionListener verwenden, um die Ausführung von Aufgaben während des gesamten Bauprozesses zu überwachen:

public interface TaskExecutionListener {

    void beforeExecute(Task task);

    void afterExecute(Task task, TaskState taskState);
}

Wir können vor jeder Aufgabenausführung Informationen sammeln, die Startzeit der Aufgabenausführung usw. aufzeichnen und die Ausführungsendzeit nach Abschluss der Aufgabenausführung aufzeichnen, sodass wir die Ausführungszeit der Aufgabe zählen können.

2. Verwenden Sie BuildListener, um zu überwachen, ob der gesamte Build abgeschlossen ist. Geben Sie nach Abschluss des Builds alle Informationen zur ausgeführten Aufgabe und die Ausführungszeit jeder Aufgabe aus:

public interface BuildListener {
    void buildStarted(Gradle gradle);

    void settingsEvaluated(Settings settings);

    void projectsLoaded(Gradle gradle);

    void projectsEvaluated(Gradle gradle);

    void buildFinished(BuildResult buildResult);
}

Überwachen Sie in der buildFinished-Methode den Abschluss und Erfolg des Builds und drucken Sie die zeitaufwändigen Informationen aus, die wir gesammelt haben.

Codebeispiel

BuildTimeListener ist eine Toolklasse, die ich angepasst habe, um zeitaufwändige Aufgaben zu überwachen:

class BuildTimeListener implements TaskExecutionListener, BuildListener {

    //用来记录 task 的执行时长信息
    Map<String, TaskTimeInfo> taskTimeMap = new HashMap<>()

    @Override
    void buildStarted(Gradle gradle) {

    }

    @Override
    void settingsEvaluated(Settings settings) {

    }

    @Override
    void projectsLoaded(Gradle gradle) {

    }

    @Override
    void projectsEvaluated(Gradle gradle) {

    }

    @Override
    void 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 "---------------------------------------"
    }

    @Override
    void beforeExecute(Task task) {
        //task开始执行之前搜集task的信息
        TaskTimeInfo timeInfo = new TaskTimeInfo()
        timeInfo.start = System.currentTimeMillis()
        timeInfo.path = task.getPath()
        taskTimeMap.put(task.getPath(), timeInfo)
    }

    @Override
    void 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 total
        String path
        long start
        long end
    }
}

Wir registrieren uns in einem benutzerdefinierten Plugin:

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

**PS: Weitere Artikel zur Leistungsoptimierung finden Sie unter -> „Android-Leistungsoptimierung“.
**PS: Weitere Artikel zur Leistungsoptimierung finden Sie unter -> „Android-Leistungsoptimierung“.
**PS: Weitere Artikel zur Leistungsoptimierung Verwandte Artikel finden Sie unter -> „Android-Leistungsoptimierung“.

Supongo que te gusta

Origin blog.csdn.net/u011578734/article/details/114104426
Recomendado
Clasificación