package bp2build import ( "android/soong/android" "fmt" "strings" ) // Simple metrics struct to collect information about a Blueprint to BUILD // conversion process. type CodegenMetrics struct { // Total number of Soong modules converted to generated targets generatedModuleCount int // Total number of Soong modules converted to handcrafted targets handCraftedModuleCount int // Total number of unconverted Soong modules unconvertedModuleCount int // Counts of generated Bazel targets per Bazel rule class ruleClassCount map[string]int moduleWithUnconvertedDepsMsgs []string convertedModules []string } // Print the codegen metrics to stdout. func (metrics *CodegenMetrics) Print() { generatedTargetCount := 0 for _, ruleClass := range android.SortedStringKeys(metrics.ruleClassCount) { count := metrics.ruleClassCount[ruleClass] fmt.Printf("[bp2build] %s: %d targets\n", ruleClass, count) generatedTargetCount += count } fmt.Printf( "[bp2build] Generated %d total BUILD targets and included %d handcrafted BUILD targets from %d Android.bp modules.\n With %d modules with unconverted deps \n\t%s", generatedTargetCount, metrics.handCraftedModuleCount, metrics.TotalModuleCount(), len(metrics.moduleWithUnconvertedDepsMsgs), strings.Join(metrics.moduleWithUnconvertedDepsMsgs, "\n\t")) } func (metrics *CodegenMetrics) IncrementRuleClassCount(ruleClass string) { metrics.ruleClassCount[ruleClass] += 1 } func (metrics *CodegenMetrics) IncrementUnconvertedCount() { metrics.unconvertedModuleCount += 1 } func (metrics *CodegenMetrics) TotalModuleCount() int { return metrics.handCraftedModuleCount + metrics.generatedModuleCount + metrics.unconvertedModuleCount } type ConversionType int const ( Generated ConversionType = iota Handcrafted ) func (metrics *CodegenMetrics) AddConvertedModule(moduleName string, conversionType ConversionType) { // Undo prebuilt_ module name prefix modifications moduleName = android.RemoveOptionalPrebuiltPrefix(moduleName) metrics.convertedModules = append(metrics.convertedModules, moduleName) if conversionType == Handcrafted { metrics.handCraftedModuleCount += 1 } else if conversionType == Generated { metrics.generatedModuleCount += 1 } }