Add performance counter metrics to build.trace.gz

Start a background goroutine at the beginning of soong_build that
captures the CPU usage, heap size, and total system memory every
second.  Propagate the values through soong_build_metrics.pb back
to soong_ui, and then into build.trace.gz.

Test: m nothing, examine build.trace.gz
Change-Id: Iad99f8f1f088f4f7f7d5f76566a38c0c4f4d0daa
This commit is contained in:
Colin Cross
2023-10-27 14:56:12 -07:00
parent aa9a273b40
commit 46b0c75204
6 changed files with 655 additions and 209 deletions

View File

@@ -15,6 +15,7 @@
package build
import (
"android/soong/ui/tracer"
"fmt"
"io/fs"
"os"
@@ -774,6 +775,19 @@ func loadSoongBuildMetrics(ctx Context, config Config, oldTimestamp time.Time) {
ctx.Tracer.Complete(desc, ctx.Thread,
event.GetStartTime(), event.GetStartTime()+event.GetRealTime())
}
for _, event := range soongBuildMetrics.PerfCounters {
timestamp := event.GetTime()
for _, group := range event.Groups {
counters := make([]tracer.Counter, 0, len(group.Counters))
for _, counter := range group.Counters {
counters = append(counters, tracer.Counter{
Name: counter.GetName(),
Value: counter.GetValue(),
})
}
ctx.Tracer.CountersAtTime(group.GetName(), ctx.Thread, timestamp, counters)
}
}
}
func runMicrofactory(ctx Context, config Config, name string, pkg string, mapping map[string]string) {