Merge "Add platform-wide sampling PGO option"

This commit is contained in:
Yi Kong 2020-03-27 01:17:26 +00:00 committed by Gerrit Code Review
commit 365d107dd3
3 changed files with 25 additions and 14 deletions

View file

@ -1032,6 +1032,10 @@ func (c *deviceConfig) DeviceKernelHeaderDirs() []string {
return c.config.productVariables.DeviceKernelHeaders return c.config.productVariables.DeviceKernelHeaders
} }
func (c *deviceConfig) SamplingPGO() bool {
return Bool(c.config.productVariables.SamplingPGO)
}
func (c *config) NativeLineCoverage() bool { func (c *config) NativeLineCoverage() bool {
return Bool(c.productVariables.NativeLineCoverage) return Bool(c.productVariables.NativeLineCoverage)
} }

View file

@ -252,6 +252,8 @@ type productVariables struct {
ClangTidy *bool `json:",omitempty"` ClangTidy *bool `json:",omitempty"`
TidyChecks *string `json:",omitempty"` TidyChecks *string `json:",omitempty"`
SamplingPGO *bool `json:",omitempty"`
NativeLineCoverage *bool `json:",omitempty"` NativeLineCoverage *bool `json:",omitempty"`
Native_coverage *bool `json:",omitempty"` Native_coverage *bool `json:",omitempty"`
ClangCoverage *bool `json:",omitempty"` ClangCoverage *bool `json:",omitempty"`

View file

@ -88,20 +88,21 @@ func (pgo *pgo) props() []interface{} {
return []interface{}{&pgo.Properties} return []interface{}{&pgo.Properties}
} }
func (props *PgoProperties) addProfileGatherFlags(ctx ModuleContext, flags Flags) Flags { func (props *PgoProperties) addInstrumentationProfileGatherFlags(ctx ModuleContext, flags Flags) Flags {
flags.Local.CFlags = append(flags.Local.CFlags, props.Pgo.Cflags...) flags.Local.CFlags = append(flags.Local.CFlags, props.Pgo.Cflags...)
if props.isInstrumentation() { flags.Local.CFlags = append(flags.Local.CFlags, profileInstrumentFlag)
flags.Local.CFlags = append(flags.Local.CFlags, profileInstrumentFlag) // The profile runtime is added below in deps(). Add the below
// The profile runtime is added below in deps(). Add the below // flag, which is the only other link-time action performed by
// flag, which is the only other link-time action performed by // the Clang driver during link.
// the Clang driver during link. flags.Local.LdFlags = append(flags.Local.LdFlags, "-u__llvm_profile_runtime")
flags.Local.LdFlags = append(flags.Local.LdFlags, "-u__llvm_profile_runtime") return flags
} }
if props.isSampling() { func (props *PgoProperties) addSamplingProfileGatherFlags(ctx ModuleContext, flags Flags) Flags {
flags.Local.CFlags = append(flags.Local.CFlags, profileSamplingFlag) flags.Local.CFlags = append(flags.Local.CFlags, props.Pgo.Cflags...)
flags.Local.LdFlags = append(flags.Local.LdFlags, profileSamplingFlag)
} flags.Local.CFlags = append(flags.Local.CFlags, profileSamplingFlag)
flags.Local.LdFlags = append(flags.Local.LdFlags, profileSamplingFlag)
return flags return flags
} }
@ -286,8 +287,12 @@ func (pgo *pgo) flags(ctx ModuleContext, flags Flags) Flags {
props := pgo.Properties props := pgo.Properties
// Add flags to profile this module based on its profile_kind // Add flags to profile this module based on its profile_kind
if props.ShouldProfileModule { if props.ShouldProfileModule && props.isInstrumentation() {
return props.addProfileGatherFlags(ctx, flags) return props.addInstrumentationProfileGatherFlags(ctx, flags)
} else if props.ShouldProfileModule && props.isSampling() {
return props.addSamplingProfileGatherFlags(ctx, flags)
} else if ctx.DeviceConfig().SamplingPGO() {
return props.addSamplingProfileGatherFlags(ctx, flags)
} }
if !ctx.Config().IsEnvTrue("ANDROID_PGO_NO_PROFILE_USE") { if !ctx.Config().IsEnvTrue("ANDROID_PGO_NO_PROFILE_USE") {