Optimize getJarJarRuleText
getJarJarRuleText accounted for 10% of all allocations in Soong totalling
10 GB due to repeated string growth. Use a StringBuilder instead.
Test: builds
Change-Id: I4bce338d161cb2f9c0aba1036ced55d2e8ee6b14
diff --git a/java/base.go b/java/base.go
index d89c324..3a435a1 100644
--- a/java/base.go
+++ b/java/base.go
@@ -2948,14 +2948,18 @@
// Get the jarjar rule text for a given provider for the fully resolved rules. Classes that map
// to "" won't be in this list because they shouldn't be renamed yet.
func getJarJarRuleText(provider *JarJarProviderData) string {
- result := ""
+ result := strings.Builder{}
for _, orig := range android.SortedKeys(provider.Rename) {
renamed := provider.Rename[orig]
if renamed != "" {
- result += "rule " + orig + " " + renamed + "\n"
+ result.WriteString("rule ")
+ result.WriteString(orig)
+ result.WriteString(" ")
+ result.WriteString(renamed)
+ result.WriteString("\n")
}
}
- return result
+ return result.String()
}
// Repackage the flags if the jarjar rule txt for the flags is generated