blob: 1cc4143c5eb10760b443f534304018a87be4ecad [file] [log] [blame]
Jingwen Chen164e0862021-02-19 00:48:40 -05001package bp2build
2
3import (
4 "android/soong/android"
5 "fmt"
Liz Kammer6eff3232021-08-26 08:37:59 -04006 "strings"
Jingwen Chen164e0862021-02-19 00:48:40 -05007)
8
9// Simple metrics struct to collect information about a Blueprint to BUILD
10// conversion process.
11type CodegenMetrics struct {
Jingwen Chen310bc8f2021-09-20 10:54:27 +000012 // Total number of Soong modules converted to generated targets
13 generatedModuleCount int
14
15 // Total number of Soong modules converted to handcrafted targets
16 handCraftedModuleCount int
17
18 // Total number of unconverted Soong modules
19 unconvertedModuleCount int
Jingwen Chen164e0862021-02-19 00:48:40 -050020
21 // Counts of generated Bazel targets per Bazel rule class
Jingwen Chen310bc8f2021-09-20 10:54:27 +000022 ruleClassCount map[string]int
Liz Kammer6eff3232021-08-26 08:37:59 -040023
24 moduleWithUnconvertedDepsMsgs []string
Jingwen Chen61174502021-09-17 08:40:45 +000025
26 convertedModules []string
Jingwen Chen164e0862021-02-19 00:48:40 -050027}
28
29// Print the codegen metrics to stdout.
Jingwen Chenafb84bd2021-09-20 10:31:46 +000030func (metrics *CodegenMetrics) Print() {
Jingwen Chen164e0862021-02-19 00:48:40 -050031 generatedTargetCount := 0
Jingwen Chen310bc8f2021-09-20 10:54:27 +000032 for _, ruleClass := range android.SortedStringKeys(metrics.ruleClassCount) {
33 count := metrics.ruleClassCount[ruleClass]
Jingwen Chen164e0862021-02-19 00:48:40 -050034 fmt.Printf("[bp2build] %s: %d targets\n", ruleClass, count)
35 generatedTargetCount += count
36 }
37 fmt.Printf(
Liz Kammer6eff3232021-08-26 08:37:59 -040038 "[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",
Jingwen Chen164e0862021-02-19 00:48:40 -050039 generatedTargetCount,
Jingwen Chen310bc8f2021-09-20 10:54:27 +000040 metrics.handCraftedModuleCount,
41 metrics.TotalModuleCount(),
Liz Kammer6eff3232021-08-26 08:37:59 -040042 len(metrics.moduleWithUnconvertedDepsMsgs),
43 strings.Join(metrics.moduleWithUnconvertedDepsMsgs, "\n\t"))
Jingwen Chen164e0862021-02-19 00:48:40 -050044}
Jingwen Chen61174502021-09-17 08:40:45 +000045
Jingwen Chen310bc8f2021-09-20 10:54:27 +000046func (metrics *CodegenMetrics) IncrementRuleClassCount(ruleClass string) {
47 metrics.ruleClassCount[ruleClass] += 1
48}
49
50func (metrics *CodegenMetrics) IncrementUnconvertedCount() {
51 metrics.unconvertedModuleCount += 1
52}
53
54func (metrics *CodegenMetrics) TotalModuleCount() int {
55 return metrics.handCraftedModuleCount +
56 metrics.generatedModuleCount +
57 metrics.unconvertedModuleCount
58}
59
60type ConversionType int
61
62const (
63 Generated ConversionType = iota
64 Handcrafted
65)
66
67func (metrics *CodegenMetrics) AddConvertedModule(moduleName string, conversionType ConversionType) {
Jingwen Chen61174502021-09-17 08:40:45 +000068 // Undo prebuilt_ module name prefix modifications
69 moduleName = android.RemoveOptionalPrebuiltPrefix(moduleName)
70 metrics.convertedModules = append(metrics.convertedModules, moduleName)
Jingwen Chen310bc8f2021-09-20 10:54:27 +000071
72 if conversionType == Handcrafted {
73 metrics.handCraftedModuleCount += 1
74 } else if conversionType == Generated {
75 metrics.generatedModuleCount += 1
76 }
Jingwen Chen61174502021-09-17 08:40:45 +000077}