Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dec01d61 authored by Winson's avatar Winson
Browse files

Adjust AndroidPackage String interning

For the initial pass, everything was interned to take a
conservative approach.

But the time needed to intern every string has caused a significant
fixed cost every time the package is read from cache at boot.

This manually checks each string and removes interning from those
that are generally unique or don't have a significant benefit to
being interned.

Bug: 135203078
Bug: 141922546

Test: atest AndroidPackageParsingEquivalenceTest
Test: atest ScanTests
Test: atest PackageParserTest
Test: manual verify with PackageParsingPerfTest; see bug

Change-Id: I815bb92ec29d2ca38e8614d44937bc738599be55
parent 04fd0366
Loading
Loading
Loading
Loading
+183 −196

File changed.

Preview size limit exceeded, changes collapsed.

+7 −9
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE;
import static android.content.pm.ActivityInfo.RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.parsing.ParsingPackageImpl.sForString;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;

import android.annotation.Nullable;
@@ -29,13 +29,11 @@ import android.content.ComponentName;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.content.pm.parsing.ParsingPackageImpl;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;

import com.android.internal.util.DataClass;
import com.android.internal.util.Parcelling;
import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;

/** @hide **/
@@ -268,11 +266,11 @@ public class ParsedActivity extends ParsedMainComponent {
        super.writeToParcel(dest, flags);
        dest.writeInt(this.theme);
        dest.writeInt(this.uiOptions);
        sForString.parcel(this.targetActivity, dest, flags);
        sForString.parcel(this.parentActivityName, dest, flags);
        dest.writeString(this.targetActivity);
        dest.writeString(this.parentActivityName);
        dest.writeString(this.taskAffinity);
        dest.writeInt(this.privateFlags);
        sForString.parcel(this.permission, dest, flags);
        sForInternedString.parcel(this.permission, dest, flags);
        dest.writeInt(this.launchMode);
        dest.writeInt(this.documentLaunchMode);
        dest.writeInt(this.maxRecents);
@@ -311,11 +309,11 @@ public class ParsedActivity extends ParsedMainComponent {
        super(in);
        this.theme = in.readInt();
        this.uiOptions = in.readInt();
        this.targetActivity = sForString.unparcel(in);
        this.parentActivityName = sForString.unparcel(in);
        this.targetActivity = in.readString();
        this.parentActivityName = in.readString();
        this.taskAffinity = in.readString();
        this.privateFlags = in.readInt();
        this.permission = sForString.unparcel(in);
        this.permission = sForInternedString.unparcel(in);
        this.launchMode = in.readInt();
        this.documentLaunchMode = in.readInt();
        this.maxRecents = in.readInt();
+5 −5
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package android.content.pm.parsing.component;

import static android.content.pm.parsing.ParsingPackageImpl.sForString;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;

import android.annotation.CallSuper;
import android.annotation.NonNull;
@@ -131,7 +131,7 @@ public abstract class ParsedComponent implements Parcelable {

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        sForString.parcel(this.name, dest, flags);
        dest.writeString(this.name);
        dest.writeInt(this.getIcon());
        dest.writeInt(this.getLabelRes());
        dest.writeCharSequence(this.getNonLocalizedLabel());
@@ -139,7 +139,7 @@ public abstract class ParsedComponent implements Parcelable {
        dest.writeInt(this.getBanner());
        dest.writeInt(this.getDescriptionRes());
        dest.writeInt(this.getFlags());
        sForString.parcel(this.packageName, dest, flags);
        sForInternedString.parcel(this.packageName, dest, flags);
        sForIntentInfos.parcel(this.getIntents(), dest, flags);
        dest.writeBundle(this.metaData);
    }
@@ -148,7 +148,7 @@ public abstract class ParsedComponent implements Parcelable {
        // We use the boot classloader for all classes that we load.
        final ClassLoader boot = Object.class.getClassLoader();
        //noinspection ConstantConditions
        this.name = sForString.unparcel(in);
        this.name = in.readString();
        this.icon = in.readInt();
        this.labelRes = in.readInt();
        this.nonLocalizedLabel = in.readCharSequence();
@@ -157,7 +157,7 @@ public abstract class ParsedComponent implements Parcelable {
        this.descriptionRes = in.readInt();
        this.flags = in.readInt();
        //noinspection ConstantConditions
        this.packageName = sForString.unparcel(in);
        this.packageName = sForInternedString.unparcel(in);
        this.intents = sForIntentInfos.unparcel(in);
        this.metaData = in.readBundle(boot);
    }
+5 −6
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package android.content.pm.parsing.component;

import static android.content.pm.parsing.ParsingPackageImpl.sForString;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;

import android.annotation.Nullable;
import android.content.ComponentName;
@@ -25,7 +25,6 @@ import android.os.Parcelable;
import android.text.TextUtils;

import com.android.internal.util.DataClass;
import com.android.internal.util.Parcelling;
import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;

/** @hide */
@@ -69,16 +68,16 @@ public class ParsedInstrumentation extends ParsedComponent {
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        sForString.parcel(this.targetPackage, dest, flags);
        sForString.parcel(this.targetProcesses, dest, flags);
        sForInternedString.parcel(this.targetPackage, dest, flags);
        sForInternedString.parcel(this.targetProcesses, dest, flags);
        dest.writeBoolean(this.handleProfiling);
        dest.writeBoolean(this.functionalTest);
    }

    protected ParsedInstrumentation(Parcel in) {
        super(in);
        this.targetPackage = sForString.unparcel(in);
        this.targetProcesses = sForString.unparcel(in);
        this.targetPackage = sForInternedString.unparcel(in);
        this.targetProcesses = sForInternedString.unparcel(in);
        this.handleProfiling = in.readByte() != 0;
        this.functionalTest = in.readByte() != 0;
    }
+3 −4
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@

package android.content.pm.parsing.component;

import static android.content.pm.parsing.ParsingPackageImpl.sForString;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;

import android.annotation.Nullable;
import android.os.Parcel;
@@ -24,7 +24,6 @@ import android.os.Parcelable;
import android.text.TextUtils;

import com.android.internal.util.DataClass;
import com.android.internal.util.Parcelling;
import com.android.internal.util.Parcelling.BuiltIn.ForInternedString;

/** @hide */
@@ -79,7 +78,7 @@ public class ParsedMainComponent extends ParsedComponent {
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        super.writeToParcel(dest, flags);
        sForString.parcel(this.processName, dest, flags);
        sForInternedString.parcel(this.processName, dest, flags);
        dest.writeBoolean(this.directBootAware);
        dest.writeBoolean(this.enabled);
        dest.writeBoolean(this.exported);
@@ -89,7 +88,7 @@ public class ParsedMainComponent extends ParsedComponent {

    protected ParsedMainComponent(Parcel in) {
        super(in);
        this.processName = sForString.unparcel(in);
        this.processName = sForInternedString.unparcel(in);
        this.directBootAware = in.readBoolean();
        this.enabled = in.readBoolean();
        this.exported = in.readBoolean();
Loading