Output dex_preopt to SDK snapshot.

This is needed to determine whether we need to deapex the profile or
not.

Bug: 241823638
Test: m nothing
Test: -
  1. Patch ag/20582608 PS2.
  2. TARGET_BUILD_APPS=com.android.wifi packages/modules/common/build/mainline_modules_sdks.sh
  3. See the `dex_preopt` property being written.
Change-Id: I05177388c24be1ab315247ea85e7e3a8600cebd3
This commit is contained in:
Jiakai Zhang
2023-02-09 00:09:24 +08:00
parent 8916b21320
commit 9c4dc19f4e
5 changed files with 101 additions and 3 deletions

View File

@@ -78,7 +78,8 @@ func (install dexpreopterInstall) ToMakeEntries() android.AndroidMkEntries {
} }
type dexpreopter struct { type dexpreopter struct {
dexpreoptProperties DexpreoptProperties dexpreoptProperties DexpreoptProperties
importDexpreoptProperties ImportDexpreoptProperties
installPath android.InstallPath installPath android.InstallPath
uncompressedDex bool uncompressedDex bool
@@ -127,6 +128,18 @@ type DexpreoptProperties struct {
// profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found. // profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
Profile *string `android:"path"` Profile *string `android:"path"`
} }
Dex_preopt_result struct {
// True if profile-guided optimization is actually enabled.
Profile_guided bool
} `blueprint:"mutated"`
}
type ImportDexpreoptProperties struct {
Dex_preopt struct {
// If true, use the profile in the prebuilt APEX to guide optimization. Defaults to false.
Profile_guided *bool
}
} }
func init() { func init() {
@@ -310,6 +323,8 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Wr
} }
} }
d.dexpreoptProperties.Dex_preopt_result.Profile_guided = profileClassListing.Valid()
// Full dexpreopt config, used to create dexpreopt build rules. // Full dexpreopt config, used to create dexpreopt build rules.
dexpreoptConfig := &dexpreopt.ModuleConfig{ dexpreoptConfig := &dexpreopt.ModuleConfig{
Name: moduleName(ctx), Name: moduleName(ctx),

View File

@@ -795,6 +795,8 @@ type librarySdkMemberProperties struct {
// The value of the min_sdk_version property, translated into a number where possible. // The value of the min_sdk_version property, translated into a number where possible.
MinSdkVersion *string `supported_build_releases:"Tiramisu+"` MinSdkVersion *string `supported_build_releases:"Tiramisu+"`
DexPreoptProfileGuided *bool `supported_build_releases:"UpsideDownCake+"`
} }
func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) { func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberContext, variant android.Module) {
@@ -812,6 +814,10 @@ func (p *librarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMemberCo
canonical := android.ReplaceFinalizedCodenames(ctx.SdkModuleContext().Config(), j.minSdkVersion.ApiLevel.String()) canonical := android.ReplaceFinalizedCodenames(ctx.SdkModuleContext().Config(), j.minSdkVersion.ApiLevel.String())
p.MinSdkVersion = proptools.StringPtr(canonical) p.MinSdkVersion = proptools.StringPtr(canonical)
} }
if j.dexpreopter.dexpreoptProperties.Dex_preopt_result.Profile_guided {
p.DexPreoptProfileGuided = proptools.BoolPtr(true)
}
} }
func (p *librarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { func (p *librarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {
@@ -838,6 +844,11 @@ func (p *librarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberConte
propertySet.AddProperty("permitted_packages", p.PermittedPackages) propertySet.AddProperty("permitted_packages", p.PermittedPackages)
} }
dexPreoptSet := propertySet.AddPropertySet("dex_preopt")
if p.DexPreoptProfileGuided != nil {
dexPreoptSet.AddProperty("profile_guided", proptools.Bool(p.DexPreoptProfileGuided))
}
// Do not copy anything else to the snapshot. // Do not copy anything else to the snapshot.
if memberType.onlyCopyJarToSnapshot { if memberType.onlyCopyJarToSnapshot {
return return
@@ -2192,6 +2203,7 @@ func ImportFactory() android.Module {
module.AddProperties( module.AddProperties(
&module.properties, &module.properties,
&module.dexer.dexProperties, &module.dexer.dexProperties,
&module.importDexpreoptProperties,
) )
module.initModuleAndImport(module) module.initModuleAndImport(module)

View File

@@ -2201,7 +2201,7 @@ func sdkLibraryImportFactory() android.Module {
allScopeProperties, scopeToProperties := createPropertiesInstance() allScopeProperties, scopeToProperties := createPropertiesInstance()
module.scopeProperties = scopeToProperties module.scopeProperties = scopeToProperties
module.AddProperties(&module.properties, allScopeProperties) module.AddProperties(&module.properties, allScopeProperties, &module.importDexpreoptProperties)
// Initialize information common between source and prebuilt. // Initialize information common between source and prebuilt.
module.initCommon(module) module.initCommon(module)
@@ -2994,6 +2994,8 @@ type sdkLibrarySdkMemberProperties struct {
// //
// This means that the device won't recognise this library as installed. // This means that the device won't recognise this library as installed.
Max_device_sdk *string Max_device_sdk *string
DexPreoptProfileGuided *bool `supported_build_releases:"UpsideDownCake+"`
} }
type scopeProperties struct { type scopeProperties struct {
@@ -3047,6 +3049,10 @@ func (s *sdkLibrarySdkMemberProperties) PopulateFromVariant(ctx android.SdkMembe
s.On_bootclasspath_before = sdk.commonSdkLibraryProperties.On_bootclasspath_before s.On_bootclasspath_before = sdk.commonSdkLibraryProperties.On_bootclasspath_before
s.Min_device_sdk = sdk.commonSdkLibraryProperties.Min_device_sdk s.Min_device_sdk = sdk.commonSdkLibraryProperties.Min_device_sdk
s.Max_device_sdk = sdk.commonSdkLibraryProperties.Max_device_sdk s.Max_device_sdk = sdk.commonSdkLibraryProperties.Max_device_sdk
if sdk.dexpreopter.dexpreoptProperties.Dex_preopt_result.Profile_guided {
s.DexPreoptProfileGuided = proptools.BoolPtr(true)
}
} }
func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) { func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberContext, propertySet android.BpPropertySet) {
@@ -3062,6 +3068,10 @@ func (s *sdkLibrarySdkMemberProperties) AddToPropertySet(ctx android.SdkMemberCo
if len(s.Permitted_packages) > 0 { if len(s.Permitted_packages) > 0 {
propertySet.AddProperty("permitted_packages", s.Permitted_packages) propertySet.AddProperty("permitted_packages", s.Permitted_packages)
} }
dexPreoptSet := propertySet.AddPropertySet("dex_preopt")
if s.DexPreoptProfileGuided != nil {
dexPreoptSet.AddProperty("profile_guided", proptools.Bool(s.DexPreoptProfileGuided))
}
stem := s.Stem stem := s.Stem

View File

@@ -33,7 +33,8 @@ var prepareForSdkTestWithJava = android.GroupFixturePreparers(
// Files needs by most of the tests. // Files needs by most of the tests.
android.MockFS{ android.MockFS{
"Test.java": nil, "Test.java": nil,
"art-profile": nil,
}.AddToFixture(), }.AddToFixture(),
) )

View File

@@ -62,6 +62,9 @@ func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, tar
min_sdk_version: "2", min_sdk_version: "2",
compile_dex: true, compile_dex: true,
permitted_packages: ["mylib"], permitted_packages: ["mylib"],
dex_preopt: {
profile: "art-profile",
},
} }
java_sdk_library { java_sdk_library {
@@ -71,6 +74,9 @@ func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, tar
shared_library: false, shared_library: false,
public: {enabled: true}, public: {enabled: true},
min_sdk_version: "2", min_sdk_version: "2",
dex_preopt: {
profile: "art-profile",
},
} }
`), `),
).RunTest(t) ).RunTest(t)
@@ -105,6 +111,9 @@ java_sdk_library_import {
visibility: ["//visibility:public"], visibility: ["//visibility:public"],
apex_available: ["myapex"], apex_available: ["myapex"],
shared_library: false, shared_library: false,
dex_preopt: {
profile_guided: true,
},
public: { public: {
jars: ["sdk_library/public/mysdklibrary-stubs.jar"], jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"], stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
@@ -122,6 +131,9 @@ java_import {
jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"], jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
min_sdk_version: "2", min_sdk_version: "2",
permitted_packages: ["mylib"], permitted_packages: ["mylib"],
dex_preopt: {
profile_guided: true,
},
} }
prebuilt_systemserverclasspath_fragment { prebuilt_systemserverclasspath_fragment {
@@ -186,6 +198,54 @@ java_import {
permitted_packages: ["mylib"], permitted_packages: ["mylib"],
} }
prebuilt_systemserverclasspath_fragment {
name: "mysystemserverclasspathfragment",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["myapex"],
contents: [
"mylib",
"mysdklibrary",
],
}
`)
})
t.Run("target-u", func(t *testing.T) {
testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
// This is auto-generated. DO NOT EDIT.
java_sdk_library_import {
name: "mysdklibrary",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["myapex"],
shared_library: false,
dex_preopt: {
profile_guided: true,
},
public: {
jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
current_api: "sdk_library/public/mysdklibrary.txt",
removed_api: "sdk_library/public/mysdklibrary-removed.txt",
sdk_version: "current",
},
}
java_import {
name: "mylib",
prefer: false,
visibility: ["//visibility:public"],
apex_available: ["myapex"],
jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
min_sdk_version: "2",
permitted_packages: ["mylib"],
dex_preopt: {
profile_guided: true,
},
}
prebuilt_systemserverclasspath_fragment { prebuilt_systemserverclasspath_fragment {
name: "mysystemserverclasspathfragment", name: "mysystemserverclasspathfragment",
prefer: false, prefer: false,