Add more detailed logging of latency for requests with no TypeScript.
PiperOrigin-RevId: 266489330
diff --git a/ts_auto_deps/updater/updater.go b/ts_auto_deps/updater/updater.go
index b77acba..e6585d2 100644
--- a/ts_auto_deps/updater/updater.go
+++ b/ts_auto_deps/updater/updater.go
@@ -686,42 +686,60 @@
IsRoot bool
}
+// LatencyReport contains timing measurements of the functions that are called
+// when running the presubmit on a package without any TypeScript (since we
+// return early to avoid the latency of RAS analyze).
+type LatencyReport struct {
+ GetBUILD, TazeDisabled, SubdirSrcs, AddSrcs time.Duration
+}
+
// UpdateBUILD drives the main process of creating/updating the BUILD file
// underneath path based on the available sources. Returns true if it modified
// the BUILD file, false if the BUILD file was up to date already. bazelAnalyze
// is used to run the underlying `bazel analyze` process. Returns another
// boolean that's true iff the package doesn't contain any TypeScript (source
// files or BUILD rules).
-func (upd *Updater) UpdateBUILD(ctx context.Context, path string, options UpdateBUILDOptions) (bool, bool, error) {
+func (upd *Updater) UpdateBUILD(ctx context.Context, path string, options UpdateBUILDOptions) (bool, *LatencyReport, error) {
+ latencyReport := &LatencyReport{}
+
+ start := time.Now()
g3root, buildFilePath, bld, err := getBUILDPathAndBUILDFile(ctx, path)
+ latencyReport.GetBUILD = time.Since(start)
if err != nil {
- return false, false, err
+ return false, nil, err
}
- if isTazeDisabledInPackage(ctx, g3root, buildFilePath, bld) {
- return false, false, nil
+ start = time.Now()
+ ts_auto_depsDisabled := isTazeDisabledInPackage(ctx, g3root, buildFilePath, bld)
+ latencyReport.TazeDisabled = time.Since(start)
+ if ts_auto_depsDisabled {
+ return false, nil, nil
}
+ start = time.Now()
hasSubdirSrcs, err := directoryOrAncestorHasSubdirectorySources(ctx, g3root, buildFilePath, bld)
+ latencyReport.SubdirSrcs = time.Since(start)
if err != nil {
- return false, false, err
+ return false, nil, err
}
if hasSubdirSrcs {
- return false, false, &SubdirectorySourcesError{}
+ return false, nil, &SubdirectorySourcesError{}
}
+ start = time.Now()
changed, err := upd.addSourcesToBUILD(ctx, path, buildFilePath, bld)
+ latencyReport.AddSrcs = time.Since(start)
if err != nil {
- return false, false, err
+ return false, nil, err
}
if options.InNonWritableEnvironment && changed {
- return true, false, &CantProgressAfterWriteError{}
+ return true, nil, &CantProgressAfterWriteError{}
}
rules := allTSRules(bld)
if len(rules) == 0 && !options.IsRoot {
// No TypeScript rules, no need to query for dependencies etc, so just exit early.
- return changed, true, nil
+ return changed, latencyReport, nil
}
rulesWithSrcs := []*build.Rule{}
for _, r := range rules {
@@ -735,19 +753,19 @@
platform.Infof("analyzing...")
reports, err := upd.runBazelAnalyze(buildFilePath, bld, rulesWithSrcs)
if err != nil {
- return false, false, err
+ return false, nil, err
}
changedAfterBazelAnalyze, err := upd.updateBUILDAfterBazelAnalyze(ctx, options.IsRoot, g3root, buildFilePath, bld, reports)
if err != nil {
- return false, false, err
+ return false, nil, err
}
changed = changed || changedAfterBazelAnalyze
if options.InNonWritableEnvironment && changed {
- return true, false, &CantProgressAfterWriteError{}
+ return true, nil, &CantProgressAfterWriteError{}
}
- return changed, false, nil
+ return changed, nil, nil
}
// buildHasDisableTaze checks if the BUILD file should be managed using ts_auto_deps.