Add metrics collection to soong_build
Metrics are added to a materialized protobuf soong_build_metrics.pb
Recorded events have scoped names and recorded runtimes.
For example, mixedbuilds includes the following events:
mixedbuilds.prepare
mixedbuilds.analyze.write_files
mixedbuild (this is a total of all mixedbuild events)
Test: Manually verified materialized protos for mixedbuild, bp2build,
and legacy build.
Change-Id: I2e72d4502c0373bee0279bb1320b2e4dd586129c
diff --git a/android/metrics.go b/android/metrics.go
index 2cd5efa..9038bde 100644
--- a/android/metrics.go
+++ b/android/metrics.go
@@ -18,6 +18,7 @@
"io/ioutil"
"runtime"
+ "github.com/google/blueprint/metrics"
"google.golang.org/protobuf/proto"
soong_metrics_proto "android/soong/ui/metrics/metrics_proto"
@@ -55,7 +56,7 @@
})
}
-func collectMetrics(config Config) *soong_metrics_proto.SoongBuildMetrics {
+func collectMetrics(config Config, eventHandler metrics.EventHandler) *soong_metrics_proto.SoongBuildMetrics {
metrics := &soong_metrics_proto.SoongBuildMetrics{}
soongMetrics := ReadSoongMetrics(config)
@@ -68,11 +69,21 @@
metrics.TotalAllocCount = proto.Uint64(memStats.Mallocs)
metrics.TotalAllocSize = proto.Uint64(memStats.TotalAlloc)
+ for _, event := range eventHandler.CompletedEvents() {
+ perfInfo := soong_metrics_proto.PerfInfo{
+ Description: proto.String(event.Id),
+ Name: proto.String("soong_build"),
+ StartTime: proto.Uint64(uint64(event.Start.UnixNano())),
+ RealTime: proto.Uint64(event.RuntimeNanoseconds()),
+ }
+ metrics.Events = append(metrics.Events, &perfInfo)
+ }
+
return metrics
}
-func WriteMetrics(config Config, metricsFile string) error {
- metrics := collectMetrics(config)
+func WriteMetrics(config Config, eventHandler metrics.EventHandler, metricsFile string) error {
+ metrics := collectMetrics(config, eventHandler)
buf, err := proto.Marshal(metrics)
if err != nil {