Use boot image extension in the JIT-zygote experiment.
Test: temporarily enable JIT-zygote configuration, build, boot the device and ensure that the JIT-zygote specific boot image apex-framework.art is mapped in the zygote address space: 1. enable Jit zygote in the product device config (in my case device/google/muskie/aosp_walleye.mk): +# System server should not contain compiled code. +PRODUCT_SYSTEM_SERVER_COMPILER_FILTER := verify + +# Use the apex image for preopting. +DEXPREOPT_USE_APEX_IMAGE := true + +# Have the runtime pick up the apex image. +PRODUCT_PROPERTY_OVERRIDES += \ + dalvik.vm.boot-image=/apex/com.android.art/javalib/apex.art:/system/framework/apex-framework.art 2. lunch aosp_walleye-userdebug \ && m \ && adb reboot bootloader \ && fastboot flashall -w 3. adb shell cat /proc/`adb shell ps | grep zygote64 | awk {'print $2'}`/maps | grep apex-framework.art 6fe44000-7025c000 rw-p 00000000 fc:02 1179718 /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art 70571000-70696000 rw-p 0072d000 fc:02 1179718 /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art 75a339f000-75a33ac000 r--p 00852000 fc:02 1179718 /data/dalvik-cache/arm64/apex@com.android.art@javalib@apex-framework.art Change-Id: I5493e575ebf90bad1d5ad2850004d54590bbc079
This commit is contained in:
@@ -101,9 +101,8 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
|
|||||||
|
|
||||||
global := dexpreoptGlobalConfig(ctx)
|
global := dexpreoptGlobalConfig(ctx)
|
||||||
bootImage := defaultBootImageConfig(ctx)
|
bootImage := defaultBootImageConfig(ctx)
|
||||||
defaultBootImage := bootImage
|
|
||||||
if global.UseApexImage {
|
if global.UseApexImage {
|
||||||
bootImage = apexBootImageConfig(ctx)
|
bootImage = frameworkJZBootImageConfig(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
var archs []android.ArchType
|
var archs []android.ArchType
|
||||||
@@ -174,11 +173,8 @@ func (d *dexpreopter) dexpreopt(ctx android.ModuleContext, dexJarFile android.Mo
|
|||||||
DexPreoptImagesDeps: imagesDeps,
|
DexPreoptImagesDeps: imagesDeps,
|
||||||
DexPreoptImageLocations: bootImage.imageLocations,
|
DexPreoptImageLocations: bootImage.imageLocations,
|
||||||
|
|
||||||
// We use the dex paths and dex locations of the default boot image, as it
|
PreoptBootClassPathDexFiles: bootImage.dexPathsDeps.Paths(),
|
||||||
// contains the full dexpreopt boot classpath. Other images may just contain a subset of
|
PreoptBootClassPathDexLocations: bootImage.dexLocationsDeps,
|
||||||
// the dexpreopt boot classpath.
|
|
||||||
PreoptBootClassPathDexFiles: defaultBootImage.dexPathsDeps.Paths(),
|
|
||||||
PreoptBootClassPathDexLocations: defaultBootImage.dexLocationsDeps,
|
|
||||||
|
|
||||||
PreoptExtractedApk: false,
|
PreoptExtractedApk: false,
|
||||||
|
|
||||||
|
@@ -220,7 +220,8 @@ func (d *dexpreoptBootJars) GenerateBuildActions(ctx android.SingletonContext) {
|
|||||||
d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx)))
|
d.otherImages = append(d.otherImages, buildBootImage(ctx, artBootImageConfig(ctx)))
|
||||||
if global.GenerateApexImage {
|
if global.GenerateApexImage {
|
||||||
// Create boot images for the JIT-zygote experiment.
|
// Create boot images for the JIT-zygote experiment.
|
||||||
d.otherImages = append(d.otherImages, buildBootImage(ctx, apexBootImageConfig(ctx)))
|
d.otherImages = append(d.otherImages, buildBootImage(ctx, artJZBootImageConfig(ctx)))
|
||||||
|
d.otherImages = append(d.otherImages, buildBootImage(ctx, frameworkJZBootImageConfig(ctx)))
|
||||||
}
|
}
|
||||||
|
|
||||||
dumpOatRules(ctx, d.defaultBootImage)
|
dumpOatRules(ctx, d.defaultBootImage)
|
||||||
|
@@ -121,10 +121,11 @@ func getJarsFromApexJarPairs(apexJarPairs []string) []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
bootImageConfigKey = android.NewOnceKey("bootImageConfig")
|
bootImageConfigKey = android.NewOnceKey("bootImageConfig")
|
||||||
artBootImageName = "art"
|
artBootImageName = "art"
|
||||||
frameworkBootImageName = "boot"
|
frameworkBootImageName = "boot"
|
||||||
apexBootImageName = "apex"
|
artJZBootImageName = "jitzygote-art"
|
||||||
|
frameworkJZBootImageName = "jitzygote-boot"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Construct the global boot image configs.
|
// Construct the global boot image configs.
|
||||||
@@ -178,22 +179,33 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig {
|
|||||||
dexLocationsDeps: append(artLocations, frameworkLocations...),
|
dexLocationsDeps: append(artLocations, frameworkLocations...),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apex config for the boot image used in the JIT-zygote experiment.
|
// ART config for JIT-zygote boot image.
|
||||||
// It includes both the Core libraries and framework.
|
artJZCfg := bootImageConfig{
|
||||||
apexCfg := bootImageConfig{
|
|
||||||
extension: false,
|
extension: false,
|
||||||
name: apexBootImageName,
|
name: artJZBootImageName,
|
||||||
|
stem: "apex",
|
||||||
|
installSubdir: artSubdir,
|
||||||
|
modules: artModules,
|
||||||
|
dexLocations: artLocations,
|
||||||
|
dexLocationsDeps: artLocations,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Framework config for JIT-zygote boot image extension.
|
||||||
|
frameworkJZCfg := bootImageConfig{
|
||||||
|
extension: true,
|
||||||
|
name: frameworkJZBootImageName,
|
||||||
stem: "apex",
|
stem: "apex",
|
||||||
installSubdir: frameworkSubdir,
|
installSubdir: frameworkSubdir,
|
||||||
modules: concat(artModules, frameworkModules),
|
modules: frameworkModules,
|
||||||
dexLocations: concat(artLocations, frameworkLocations),
|
dexLocations: frameworkLocations,
|
||||||
dexLocationsDeps: concat(artLocations, frameworkLocations),
|
dexLocationsDeps: append(artLocations, frameworkLocations...),
|
||||||
}
|
}
|
||||||
|
|
||||||
configs := map[string]*bootImageConfig{
|
configs := map[string]*bootImageConfig{
|
||||||
artBootImageName: &artCfg,
|
artBootImageName: &artCfg,
|
||||||
frameworkBootImageName: &frameworkCfg,
|
frameworkBootImageName: &frameworkCfg,
|
||||||
apexBootImageName: &apexCfg,
|
artJZBootImageName: &artJZCfg,
|
||||||
|
frameworkJZBootImageName: &frameworkJZCfg,
|
||||||
}
|
}
|
||||||
|
|
||||||
// common to all configs
|
// common to all configs
|
||||||
@@ -235,6 +247,10 @@ func genBootImageConfigs(ctx android.PathContext) map[string]*bootImageConfig {
|
|||||||
frameworkCfg.dexPathsDeps = append(artCfg.dexPathsDeps, frameworkCfg.dexPathsDeps...)
|
frameworkCfg.dexPathsDeps = append(artCfg.dexPathsDeps, frameworkCfg.dexPathsDeps...)
|
||||||
frameworkCfg.imageLocations = append(artCfg.imageLocations, frameworkCfg.imageLocations...)
|
frameworkCfg.imageLocations = append(artCfg.imageLocations, frameworkCfg.imageLocations...)
|
||||||
|
|
||||||
|
// specific to the jitzygote-framework config
|
||||||
|
frameworkJZCfg.dexPathsDeps = append(artJZCfg.dexPathsDeps, frameworkJZCfg.dexPathsDeps...)
|
||||||
|
frameworkJZCfg.imageLocations = append(artJZCfg.imageLocations, frameworkJZCfg.imageLocations...)
|
||||||
|
|
||||||
return configs
|
return configs
|
||||||
}).(map[string]*bootImageConfig)
|
}).(map[string]*bootImageConfig)
|
||||||
}
|
}
|
||||||
@@ -247,8 +263,12 @@ func defaultBootImageConfig(ctx android.PathContext) bootImageConfig {
|
|||||||
return *genBootImageConfigs(ctx)[frameworkBootImageName]
|
return *genBootImageConfigs(ctx)[frameworkBootImageName]
|
||||||
}
|
}
|
||||||
|
|
||||||
func apexBootImageConfig(ctx android.PathContext) bootImageConfig {
|
func artJZBootImageConfig(ctx android.PathContext) bootImageConfig {
|
||||||
return *genBootImageConfigs(ctx)[apexBootImageName]
|
return *genBootImageConfigs(ctx)[artJZBootImageName]
|
||||||
|
}
|
||||||
|
|
||||||
|
func frameworkJZBootImageConfig(ctx android.PathContext) bootImageConfig {
|
||||||
|
return *genBootImageConfigs(ctx)[frameworkJZBootImageName]
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultBootclasspath(ctx android.PathContext) []string {
|
func defaultBootclasspath(ctx android.PathContext) []string {
|
||||||
|
Reference in New Issue
Block a user