Use a versioned profile file if available am: 8aed42c798

am: adfdd36948

Change-Id: I588426b1d59f4b7a40feb745ffbd7be1c3b20476
This commit is contained in:
Pirama Arumuga Nainar
2018-03-09 19:26:20 +00:00
committed by android-build-merger

View File

@@ -16,6 +16,7 @@ package cc
import (
"fmt"
"path/filepath"
"strings"
"android/soong/android"
@@ -100,12 +101,34 @@ func (props *PgoProperties) addProfileGatherFlags(ctx ModuleContext, flags Flags
}
func (props *PgoProperties) getPgoProfileFile(ctx BaseModuleContext) android.OptionalPath {
profile_file := *props.Pgo.Profile_file
// Test if the profile_file is present in any of the PGO profile projects
for _, profileProject := range getPgoProfileProjects(ctx.DeviceConfig()) {
path := android.ExistentPathForSource(ctx, profileProject, *props.Pgo.Profile_file)
// Bug: http://b/74395273 If the profile_file is unavailable,
// use a versioned file named
// <profile_file>.<arbitrary-version> when available. This
// works around an issue where ccache serves stale cache
// entries when the profile file has changed.
globPattern := filepath.Join(profileProject, profile_file+".*")
versioned_profiles, err := ctx.GlobWithDeps(globPattern, nil)
if err != nil {
ctx.ModuleErrorf("glob: %s", err.Error())
}
path := android.ExistentPathForSource(ctx, profileProject, profile_file)
if path.Valid() {
if len(versioned_profiles) != 0 {
ctx.PropertyErrorf("pgo.profile_file", "Profile_file has multiple versions: "+filepath.Join(profileProject, profile_file)+", "+strings.Join(versioned_profiles, ", "))
}
return path
}
if len(versioned_profiles) > 1 {
ctx.PropertyErrorf("pgo.profile_file", "Profile_file has multiple versions: "+strings.Join(versioned_profiles, ", "))
} else if len(versioned_profiles) == 1 {
return android.OptionalPathForPath(android.PathForSource(ctx, versioned_profiles[0]))
}
}
// Record that this module's profile file is absent