From 492bd91a51eeb7d110ea678c8669e5ddc929401c Mon Sep 17 00:00:00 2001 From: Chris Parsons Date: Thu, 20 Jan 2022 12:55:05 -0500 Subject: [PATCH] Add bp2build metrics per module type For example, new metrics at HEAD highlight that 99 of 1379 total cc_library_static modules are converted. Test: m bp2build, printproto Change-Id: I6cc4227124e9a130b75911f3e40e6585d731d00a --- bp2build/build_conversion.go | 11 ++- bp2build/metrics.go | 28 +++++-- .../bp2build_metrics.pb.go | 81 +++++++++++++++---- .../bp2build_metrics.proto | 6 ++ 4 files changed, 97 insertions(+), 29 deletions(-) diff --git a/bp2build/build_conversion.go b/bp2build/build_conversion.go index 5887d06c2..b3bec65da 100644 --- a/bp2build/build_conversion.go +++ b/bp2build/build_conversion.go @@ -259,7 +259,9 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers // Simple metrics tracking for bp2build metrics := CodegenMetrics{ - ruleClassCount: make(map[string]uint64), + ruleClassCount: make(map[string]uint64), + convertedModuleTypeCount: make(map[string]uint64), + totalModuleTypeCount: make(map[string]uint64), } dirs := make(map[string]bool) @@ -269,6 +271,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers bpCtx := ctx.Context() bpCtx.VisitAllModules(func(m blueprint.Module) { dir := bpCtx.ModuleDir(m) + moduleType := bpCtx.ModuleType(m) dirs[dir] = true var targets []BazelTarget @@ -292,7 +295,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers // targets in the same BUILD file (or package). // Log the module. - metrics.AddConvertedModule(m.Name(), Handcrafted) + metrics.AddConvertedModule(m, moduleType, Handcrafted) pathToBuildFile := getBazelPackagePath(b) if _, exists := buildFileToAppend[pathToBuildFile]; exists { @@ -312,7 +315,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers // Handle modules converted to generated targets. // Log the module. - metrics.AddConvertedModule(m.Name(), Generated) + metrics.AddConvertedModule(aModule, moduleType, Generated) // Handle modules with unconverted deps. By default, emit a warning. if unconvertedDeps := aModule.GetUnconvertedBp2buildDeps(); len(unconvertedDeps) > 0 { @@ -340,7 +343,7 @@ func GenerateBazelTargets(ctx *CodegenContext, generateFilegroups bool) (convers metrics.IncrementRuleClassCount(t.ruleClass) } } else { - metrics.IncrementUnconvertedCount() + metrics.AddUnconvertedModule(moduleType) return } case QueryView: diff --git a/bp2build/metrics.go b/bp2build/metrics.go index 557ea994c..8a0b1c96e 100644 --- a/bp2build/metrics.go +++ b/bp2build/metrics.go @@ -9,6 +9,7 @@ import ( "android/soong/android" "android/soong/shared" "android/soong/ui/metrics/bp2build_metrics_proto" + "github.com/google/blueprint" ) // Simple metrics struct to collect information about a Blueprint to BUILD @@ -36,16 +37,24 @@ type CodegenMetrics struct { // List of converted modules convertedModules []string + + // Counts of converted modules by module type. + convertedModuleTypeCount map[string]uint64 + + // Counts of total modules by module type. + totalModuleTypeCount map[string]uint64 } // Serialize returns the protoized version of CodegenMetrics: bp2build_metrics_proto.Bp2BuildMetrics func (metrics *CodegenMetrics) Serialize() bp2build_metrics_proto.Bp2BuildMetrics { return bp2build_metrics_proto.Bp2BuildMetrics{ - GeneratedModuleCount: metrics.generatedModuleCount, - HandCraftedModuleCount: metrics.handCraftedModuleCount, - UnconvertedModuleCount: metrics.unconvertedModuleCount, - RuleClassCount: metrics.ruleClassCount, - ConvertedModules: metrics.convertedModules, + GeneratedModuleCount: metrics.generatedModuleCount, + HandCraftedModuleCount: metrics.handCraftedModuleCount, + UnconvertedModuleCount: metrics.unconvertedModuleCount, + RuleClassCount: metrics.ruleClassCount, + ConvertedModules: metrics.convertedModules, + ConvertedModuleTypeCount: metrics.convertedModuleTypeCount, + TotalModuleTypeCount: metrics.totalModuleTypeCount, } } @@ -113,8 +122,9 @@ func (metrics *CodegenMetrics) IncrementRuleClassCount(ruleClass string) { metrics.ruleClassCount[ruleClass] += 1 } -func (metrics *CodegenMetrics) IncrementUnconvertedCount() { +func (metrics *CodegenMetrics) AddUnconvertedModule(moduleType string) { metrics.unconvertedModuleCount += 1 + metrics.totalModuleTypeCount[moduleType] += 1 } func (metrics *CodegenMetrics) TotalModuleCount() uint64 { @@ -136,10 +146,12 @@ const ( Handcrafted ) -func (metrics *CodegenMetrics) AddConvertedModule(moduleName string, conversionType ConversionType) { +func (metrics *CodegenMetrics) AddConvertedModule(m blueprint.Module, moduleType string, conversionType ConversionType) { // Undo prebuilt_ module name prefix modifications - moduleName = android.RemoveOptionalPrebuiltPrefix(moduleName) + moduleName := android.RemoveOptionalPrebuiltPrefix(m.Name()) metrics.convertedModules = append(metrics.convertedModules, moduleName) + metrics.convertedModuleTypeCount[moduleType] += 1 + metrics.totalModuleTypeCount[moduleType] += 1 if conversionType == Handcrafted { metrics.handCraftedModuleCount += 1 diff --git a/ui/metrics/bp2build_metrics_proto/bp2build_metrics.pb.go b/ui/metrics/bp2build_metrics_proto/bp2build_metrics.pb.go index 11177e4d5..95f02caba 100644 --- a/ui/metrics/bp2build_metrics_proto/bp2build_metrics.pb.go +++ b/ui/metrics/bp2build_metrics_proto/bp2build_metrics.pb.go @@ -49,6 +49,10 @@ type Bp2BuildMetrics struct { RuleClassCount map[string]uint64 `protobuf:"bytes,4,rep,name=ruleClassCount,proto3" json:"ruleClassCount,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` // List of converted modules ConvertedModules []string `protobuf:"bytes,5,rep,name=convertedModules,proto3" json:"convertedModules,omitempty"` + // Counts of converted modules by module type. + ConvertedModuleTypeCount map[string]uint64 `protobuf:"bytes,6,rep,name=convertedModuleTypeCount,proto3" json:"convertedModuleTypeCount,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Counts of total modules by module type. + TotalModuleTypeCount map[string]uint64 `protobuf:"bytes,7,rep,name=totalModuleTypeCount,proto3" json:"totalModuleTypeCount,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` } func (x *Bp2BuildMetrics) Reset() { @@ -118,13 +122,27 @@ func (x *Bp2BuildMetrics) GetConvertedModules() []string { return nil } +func (x *Bp2BuildMetrics) GetConvertedModuleTypeCount() map[string]uint64 { + if x != nil { + return x.ConvertedModuleTypeCount + } + return nil +} + +func (x *Bp2BuildMetrics) GetTotalModuleTypeCount() map[string]uint64 { + if x != nil { + return x.TotalModuleTypeCount + } + return nil +} + var File_bp2build_metrics_proto protoreflect.FileDescriptor var file_bp2build_metrics_proto_rawDesc = []byte{ 0x0a, 0x16, 0x62, 0x70, 0x32, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1c, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x70, 0x32, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x8f, 0x03, 0x0a, 0x0f, 0x42, 0x70, 0x32, 0x42, 0x75, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xac, 0x06, 0x0a, 0x0f, 0x42, 0x70, 0x32, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, @@ -145,15 +163,40 @@ var file_bp2build_metrics_proto_rawDesc = []byte{ 0x6c, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, - 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x31, 0x5a, 0x2f, 0x61, 0x6e, 0x64, 0x72, - 0x6f, 0x69, 0x64, 0x2f, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x73, 0x2f, 0x62, 0x70, 0x32, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x18, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x73, 0x6f, 0x6f, 0x6e, 0x67, + 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x70, 0x32, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x42, 0x70, 0x32, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, + 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x7b, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, + 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x70, 0x32, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x42, 0x70, 0x32, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x41, 0x0a, 0x13, + 0x52, 0x75, 0x6c, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x4b, 0x0a, 0x1d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, 0x19, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x31, 0x5a, 0x2f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, + 0x2f, 0x73, 0x6f, 0x6f, 0x6e, 0x67, 0x2f, 0x75, 0x69, 0x2f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x2f, 0x62, 0x70, 0x32, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -168,18 +211,22 @@ func file_bp2build_metrics_proto_rawDescGZIP() []byte { return file_bp2build_metrics_proto_rawDescData } -var file_bp2build_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_bp2build_metrics_proto_msgTypes = make([]protoimpl.MessageInfo, 4) var file_bp2build_metrics_proto_goTypes = []interface{}{ (*Bp2BuildMetrics)(nil), // 0: soong_build_bp2build_metrics.Bp2BuildMetrics nil, // 1: soong_build_bp2build_metrics.Bp2BuildMetrics.RuleClassCountEntry + nil, // 2: soong_build_bp2build_metrics.Bp2BuildMetrics.ConvertedModuleTypeCountEntry + nil, // 3: soong_build_bp2build_metrics.Bp2BuildMetrics.TotalModuleTypeCountEntry } var file_bp2build_metrics_proto_depIdxs = []int32{ 1, // 0: soong_build_bp2build_metrics.Bp2BuildMetrics.ruleClassCount:type_name -> soong_build_bp2build_metrics.Bp2BuildMetrics.RuleClassCountEntry - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 2, // 1: soong_build_bp2build_metrics.Bp2BuildMetrics.convertedModuleTypeCount:type_name -> soong_build_bp2build_metrics.Bp2BuildMetrics.ConvertedModuleTypeCountEntry + 3, // 2: soong_build_bp2build_metrics.Bp2BuildMetrics.totalModuleTypeCount:type_name -> soong_build_bp2build_metrics.Bp2BuildMetrics.TotalModuleTypeCountEntry + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name } func init() { file_bp2build_metrics_proto_init() } @@ -207,7 +254,7 @@ func file_bp2build_metrics_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_bp2build_metrics_proto_rawDesc, NumEnums: 0, - NumMessages: 2, + NumMessages: 4, NumExtensions: 0, NumServices: 0, }, diff --git a/ui/metrics/bp2build_metrics_proto/bp2build_metrics.proto b/ui/metrics/bp2build_metrics_proto/bp2build_metrics.proto index 5e88966b2..6d98a3df5 100644 --- a/ui/metrics/bp2build_metrics_proto/bp2build_metrics.proto +++ b/ui/metrics/bp2build_metrics_proto/bp2build_metrics.proto @@ -32,4 +32,10 @@ message Bp2BuildMetrics { // List of converted modules repeated string convertedModules = 5; + + // Counts of converted modules by module type. + map convertedModuleTypeCount = 6; + + // Counts of total modules by module type. + map totalModuleTypeCount = 7; }