Propagate profile_guided requirement of imports to top-level apex
For prebuilts, the dexpreopt rules of system server jars are now generated from the context of the top-level prebuilt apex and not in the context of the shim java_import modules. Since `dex_preopt.profile_guided` property is defined in java_import, this needs to be bubbled up to the top-level apex. This will be done using deapxerInfo. If profile_guided of a transitive java_import is true, the deapexed .prof file will be set as dexreopter.inputProfilePathOnHost before invoking dexpreopter.dexpreopt. This ensures that only that java_import undergoes profile guided dexpreopt, and not every other transitive java_import Test: go test ./apex -run TestPrebuiltStandaloneSystemserverclasspathFragmentContents Test: lunch cf_x86_64_only_phone-next-userdebug && m $ANDROID_PRODUCT_OUT/system/framework/oat/x86_64/apex@com.android.art@javalib@service-art.jar@classes.odex Test: du -sh $ANDROID_PRODUCT_OUT/system/framework/oat/x86_64/apex@com.android.art@javalib@service-art.jar@classes.odex 24K Bug: 308790457 Change-Id: Ibf46ecb400b3f126b243fc8d27b08d9a1aa4cc97
This commit is contained in:
@@ -83,6 +83,10 @@ type DeapexerInfo struct {
|
||||
// name of the java libraries exported from the apex
|
||||
// e.g. core-libart
|
||||
exportedModuleNames []string
|
||||
|
||||
// name of the java libraries exported from the apex that should be dexpreopt'd with the .prof
|
||||
// file embedded in the apex
|
||||
dexpreoptProfileGuidedExportedModuleNames []string
|
||||
}
|
||||
|
||||
// ApexModuleName returns the name of the APEX module that provided the info.
|
||||
@@ -121,6 +125,14 @@ func NewDeapexerInfo(apexModuleName string, exports map[string]WritablePath, mod
|
||||
}
|
||||
}
|
||||
|
||||
func (i *DeapexerInfo) GetDexpreoptProfileGuidedExportedModuleNames() []string {
|
||||
return i.dexpreoptProfileGuidedExportedModuleNames
|
||||
}
|
||||
|
||||
func (i *DeapexerInfo) AddDexpreoptProfileGuidedExportedModuleNames(names ...string) {
|
||||
i.dexpreoptProfileGuidedExportedModuleNames = append(i.dexpreoptProfileGuidedExportedModuleNames, names...)
|
||||
}
|
||||
|
||||
type deapexerTagStruct struct {
|
||||
blueprint.BaseDependencyTag
|
||||
}
|
||||
@@ -143,6 +155,9 @@ type RequiredFilesFromPrebuiltApex interface {
|
||||
// the path to the extracted file will be stored in the DeapexerInfo using the APEX relative file
|
||||
// path as the key, The path can then be retrieved using the PrebuiltExportPath(key) method.
|
||||
RequiredFilesFromPrebuiltApex(ctx BaseModuleContext) []string
|
||||
|
||||
// Returns true if a transitive dependency of an apex should use a .prof file to guide dexpreopt
|
||||
UseProfileGuidedDexpreopt() bool
|
||||
}
|
||||
|
||||
// Marker interface that identifies dependencies on modules that may require files from a prebuilt
|
||||
|
Reference in New Issue
Block a user