From d63c9a7fc10ad18e212cf47527ad065d5ef5681b Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 29 Jan 2020 16:52:50 -0800 Subject: [PATCH] Allocate OutputPath.String in PathForOutput In an AOSP aosp_blueline-userdebub build, OutputPath.String was allocating 802MB of strings in filepath.Join to prepend the out dir to each path. Allocate the joined string in PathForOutput instead, which results in ~57MB of new allocations in PathForOutput but no allocations in OutputPath.String. Test: all soong tests Change-Id: Id452e0c46a2aeda71bfac11a227bb6edb8e3523d --- android/paths.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/android/paths.go b/android/paths.go index da579d50b..66725c623 100644 --- a/android/paths.go +++ b/android/paths.go @@ -843,10 +843,12 @@ func (p SourcePath) OverlayPath(ctx ModuleContext, path Path) OptionalPath { // OutputPath is a Path representing an intermediates file path rooted from the build directory type OutputPath struct { basePath + fullPath string } func (p OutputPath) withRel(rel string) OutputPath { p.basePath = p.basePath.withRel(rel) + p.fullPath = filepath.Join(p.fullPath, rel) return p } @@ -870,7 +872,9 @@ func PathForOutput(ctx PathContext, pathComponents ...string) OutputPath { if err != nil { reportPathError(ctx, err) } - return OutputPath{basePath{path, ctx.Config(), ""}} + fullPath := filepath.Join(ctx.Config().buildDir, path) + path = fullPath[len(fullPath)-len(path):] + return OutputPath{basePath{path, ctx.Config(), ""}, fullPath} } // PathsForOutput returns Paths rooted from buildDir @@ -885,7 +889,7 @@ func PathsForOutput(ctx PathContext, paths []string) WritablePaths { func (p OutputPath) writablePath() {} func (p OutputPath) String() string { - return filepath.Join(p.config.buildDir, p.path) + return p.fullPath } // Join creates a new OutputPath with paths... joined with the current path. The