Merge "Include bazel-status of build in metrics"

This commit is contained in:
Liz Kammer
2021-07-15 12:58:04 +00:00
committed by Gerrit Code Review
4 changed files with 241 additions and 97 deletions

View File

@@ -345,12 +345,7 @@ func storeConfigMetrics(ctx Context, config Config) {
return
}
b := &smpb.BuildConfig{
ForceUseGoma: proto.Bool(config.ForceUseGoma()),
UseGoma: proto.Bool(config.UseGoma()),
UseRbe: proto.Bool(config.UseRBE()),
}
ctx.Metrics.BuildConfig(b)
ctx.Metrics.BuildConfig(buildConfig(config))
s := &smpb.SystemResourceInfo{
TotalPhysicalMemory: proto.Uint64(config.TotalRAM()),
@@ -359,6 +354,16 @@ func storeConfigMetrics(ctx Context, config Config) {
ctx.Metrics.SystemResourceInfo(s)
}
func buildConfig(config Config) *smpb.BuildConfig {
return &smpb.BuildConfig{
ForceUseGoma: proto.Bool(config.ForceUseGoma()),
UseGoma: proto.Bool(config.UseGoma()),
UseRbe: proto.Bool(config.UseRBE()),
BazelAsNinja: proto.Bool(config.UseBazel()),
BazelMixedBuild: proto.Bool(config.bazelBuildMode() == mixedBuild),
}
}
// getConfigArgs processes the command arguments based on the build action and creates a set of new
// arguments to be accepted by Config.
func getConfigArgs(action BuildAction, dir string, ctx Context, args []string) []string {

View File

@@ -26,7 +26,10 @@ import (
"testing"
"android/soong/ui/logger"
smpb "android/soong/ui/metrics/metrics_proto"
"android/soong/ui/status"
"github.com/golang/protobuf/proto"
)
func testContext() Context {
@@ -995,3 +998,111 @@ func TestGetConfigArgsBuildModulesInDirectories(t *testing.T) {
})
}
}
func TestBuildConfig(t *testing.T) {
tests := []struct {
name string
environ Environment
useBazel bool
expectedBuildConfig *smpb.BuildConfig
}{
{
name: "none set",
environ: Environment{},
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(false),
UseGoma: proto.Bool(false),
UseRbe: proto.Bool(false),
BazelAsNinja: proto.Bool(false),
BazelMixedBuild: proto.Bool(false),
},
},
{
name: "force use goma",
environ: Environment{"FORCE_USE_GOMA=1"},
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(true),
UseGoma: proto.Bool(false),
UseRbe: proto.Bool(false),
BazelAsNinja: proto.Bool(false),
BazelMixedBuild: proto.Bool(false),
},
},
{
name: "use goma",
environ: Environment{"USE_GOMA=1"},
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(false),
UseGoma: proto.Bool(true),
UseRbe: proto.Bool(false),
BazelAsNinja: proto.Bool(false),
BazelMixedBuild: proto.Bool(false),
},
},
{
name: "use rbe",
environ: Environment{"USE_RBE=1"},
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(false),
UseGoma: proto.Bool(false),
UseRbe: proto.Bool(true),
BazelAsNinja: proto.Bool(false),
BazelMixedBuild: proto.Bool(false),
},
},
{
name: "use bazel as ninja",
environ: Environment{},
useBazel: true,
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(false),
UseGoma: proto.Bool(false),
UseRbe: proto.Bool(false),
BazelAsNinja: proto.Bool(true),
BazelMixedBuild: proto.Bool(false),
},
},
{
name: "bazel mixed build",
environ: Environment{"USE_BAZEL_ANALYSIS=1"},
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(false),
UseGoma: proto.Bool(false),
UseRbe: proto.Bool(false),
BazelAsNinja: proto.Bool(false),
BazelMixedBuild: proto.Bool(true),
},
},
{
name: "all set",
environ: Environment{
"FORCE_USE_GOMA=1",
"USE_GOMA=1",
"USE_RBE=1",
"USE_BAZEL_ANALYSIS=1",
},
useBazel: true,
expectedBuildConfig: &smpb.BuildConfig{
ForceUseGoma: proto.Bool(true),
UseGoma: proto.Bool(true),
UseRbe: proto.Bool(true),
BazelAsNinja: proto.Bool(true),
BazelMixedBuild: proto.Bool(true),
},
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
c := &configImpl{
environ: &tc.environ,
useBazel: tc.useBazel,
}
config := Config{c}
actualBuildConfig := buildConfig(config)
if expected := tc.expectedBuildConfig; !proto.Equal(expected, actualBuildConfig) {
t.Errorf("Expected build config != actual build config: %#v != %#v", *expected, *actualBuildConfig)
}
})
}
}