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:
Spandan Das
2024-01-25 22:12:50 +00:00
parent e21a8d4dc6
commit 2ea84dd0dc
9 changed files with 69 additions and 10 deletions

View File

@@ -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