Loading android/metrics.go +12 −5 Original line number Diff line number Diff line Loading @@ -32,8 +32,13 @@ type SoongMetrics struct { Variants int } func ReadSoongMetrics(config Config) SoongMetrics { return config.Get(soongMetricsOnceKey).(SoongMetrics) func readSoongMetrics(config Config) (SoongMetrics, bool) { soongMetrics, ok := config.Peek(soongMetricsOnceKey) if ok { return soongMetrics.(SoongMetrics), true } else { return SoongMetrics{}, false } } func init() { Loading @@ -60,9 +65,11 @@ func (soongMetricsSingleton) GenerateBuildActions(ctx SingletonContext) { func collectMetrics(config Config, eventHandler metrics.EventHandler) *soong_metrics_proto.SoongBuildMetrics { metrics := &soong_metrics_proto.SoongBuildMetrics{} soongMetrics := ReadSoongMetrics(config) soongMetrics, ok := readSoongMetrics(config) if ok { metrics.Modules = proto.Uint32(uint32(soongMetrics.Modules)) metrics.Variants = proto.Uint32(uint32(soongMetrics.Variants)) } memStats := runtime.MemStats{} runtime.ReadMemStats(&memStats) Loading android/onceper.go +11 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,17 @@ func (once *OncePer) Get(key OnceKey) interface{} { return once.maybeWaitFor(key, v) } // Peek returns the value previously computed with Once for a given key. If Once has not // been called for the given key Peek will return ok == false. func (once *OncePer) Peek(key OnceKey) (interface{}, bool) { v, ok := once.values.Load(key) if !ok { return nil, false } return once.maybeWaitFor(key, v), true } // OnceStringSlice is the same as Once, but returns the value cast to a []string func (once *OncePer) OnceStringSlice(key OnceKey, value func() []string) []string { return once.Once(key, func() interface{} { return value() }).([]string) Loading cmd/soong_build/main.go +8 −4 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ func writeDepFile(outputFile string, eventHandler metrics.EventHandler, ninjaDep // doChosenActivity runs Soong for a specific activity, like bp2build, queryview // or the actual Soong build for the build.ninja file. Returns the top level // output file of the specific activity. func doChosenActivity(configuration android.Config, extraNinjaDeps []string, logDir string) string { func doChosenActivity(ctx *android.Context, configuration android.Config, extraNinjaDeps []string, logDir string) string { mixedModeBuild := configuration.BazelContext.BazelEnabled() generateBazelWorkspace := bp2buildMarker != "" generateQueryView := bazelQueryViewDir != "" Loading @@ -236,7 +236,6 @@ func doChosenActivity(configuration android.Config, extraNinjaDeps []string, log blueprintArgs := cmdlineArgs ctx := newContext(configuration) if mixedModeBuild { runMixedModeBuild(configuration, ctx, extraNinjaDeps) } else { Loading Loading @@ -284,7 +283,6 @@ func doChosenActivity(configuration android.Config, extraNinjaDeps []string, log } } writeMetrics(configuration, *ctx.EventHandler, logDir) return cmdlineArgs.OutFile } Loading Loading @@ -344,7 +342,13 @@ func main() { // change between every CI build, so tracking it would require re-running Soong for every build. logDir := availableEnv["LOG_DIR"] finalOutputFile := doChosenActivity(configuration, extraNinjaDeps, logDir) ctx := newContext(configuration) ctx.EventHandler.Begin("soong_build") finalOutputFile := doChosenActivity(ctx, configuration, extraNinjaDeps, logDir) ctx.EventHandler.End("soong_build") writeMetrics(configuration, *ctx.EventHandler, logDir) writeUsedEnvironmentFile(configuration, finalOutputFile) } Loading Loading
android/metrics.go +12 −5 Original line number Diff line number Diff line Loading @@ -32,8 +32,13 @@ type SoongMetrics struct { Variants int } func ReadSoongMetrics(config Config) SoongMetrics { return config.Get(soongMetricsOnceKey).(SoongMetrics) func readSoongMetrics(config Config) (SoongMetrics, bool) { soongMetrics, ok := config.Peek(soongMetricsOnceKey) if ok { return soongMetrics.(SoongMetrics), true } else { return SoongMetrics{}, false } } func init() { Loading @@ -60,9 +65,11 @@ func (soongMetricsSingleton) GenerateBuildActions(ctx SingletonContext) { func collectMetrics(config Config, eventHandler metrics.EventHandler) *soong_metrics_proto.SoongBuildMetrics { metrics := &soong_metrics_proto.SoongBuildMetrics{} soongMetrics := ReadSoongMetrics(config) soongMetrics, ok := readSoongMetrics(config) if ok { metrics.Modules = proto.Uint32(uint32(soongMetrics.Modules)) metrics.Variants = proto.Uint32(uint32(soongMetrics.Variants)) } memStats := runtime.MemStats{} runtime.ReadMemStats(&memStats) Loading
android/onceper.go +11 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,17 @@ func (once *OncePer) Get(key OnceKey) interface{} { return once.maybeWaitFor(key, v) } // Peek returns the value previously computed with Once for a given key. If Once has not // been called for the given key Peek will return ok == false. func (once *OncePer) Peek(key OnceKey) (interface{}, bool) { v, ok := once.values.Load(key) if !ok { return nil, false } return once.maybeWaitFor(key, v), true } // OnceStringSlice is the same as Once, but returns the value cast to a []string func (once *OncePer) OnceStringSlice(key OnceKey, value func() []string) []string { return once.Once(key, func() interface{} { return value() }).([]string) Loading
cmd/soong_build/main.go +8 −4 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ func writeDepFile(outputFile string, eventHandler metrics.EventHandler, ninjaDep // doChosenActivity runs Soong for a specific activity, like bp2build, queryview // or the actual Soong build for the build.ninja file. Returns the top level // output file of the specific activity. func doChosenActivity(configuration android.Config, extraNinjaDeps []string, logDir string) string { func doChosenActivity(ctx *android.Context, configuration android.Config, extraNinjaDeps []string, logDir string) string { mixedModeBuild := configuration.BazelContext.BazelEnabled() generateBazelWorkspace := bp2buildMarker != "" generateQueryView := bazelQueryViewDir != "" Loading @@ -236,7 +236,6 @@ func doChosenActivity(configuration android.Config, extraNinjaDeps []string, log blueprintArgs := cmdlineArgs ctx := newContext(configuration) if mixedModeBuild { runMixedModeBuild(configuration, ctx, extraNinjaDeps) } else { Loading Loading @@ -284,7 +283,6 @@ func doChosenActivity(configuration android.Config, extraNinjaDeps []string, log } } writeMetrics(configuration, *ctx.EventHandler, logDir) return cmdlineArgs.OutFile } Loading Loading @@ -344,7 +342,13 @@ func main() { // change between every CI build, so tracking it would require re-running Soong for every build. logDir := availableEnv["LOG_DIR"] finalOutputFile := doChosenActivity(configuration, extraNinjaDeps, logDir) ctx := newContext(configuration) ctx.EventHandler.Begin("soong_build") finalOutputFile := doChosenActivity(ctx, configuration, extraNinjaDeps, logDir) ctx.EventHandler.End("soong_build") writeMetrics(configuration, *ctx.EventHandler, logDir) writeUsedEnvironmentFile(configuration, finalOutputFile) } Loading