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

Commit b6c98585 authored by Jiakai Zhang's avatar Jiakai Zhang Committed by Android (Google) Code Review
Browse files

Merge "Get ART optimization info from the app process." into main

parents b7d68acd 21bc03d9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1042,4 +1042,10 @@ interface IActivityManager {
     */
    @EnforcePermission("INTERACT_ACROSS_USERS_FULL")
    IBinder refreshIntentCreatorToken(in Intent intent);

    /**
     * Reports ART optimization info.
     */
    oneway void reportOptimizationInfo(in IBinder app, in String compilerFilter,
            in String compilationReason);
}
+15 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.app;

import static dalvik.system.DexFile.OptimizationInfo;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
@@ -62,8 +64,10 @@ import android.view.DisplayAdjustments;
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.DebugStore;
import com.android.internal.os.RuntimeInit;
import com.android.internal.util.ArrayUtils;

import dalvik.system.ApplicationRuntime;
import dalvik.system.BaseDexClassLoader;
import dalvik.system.VMRuntime;

@@ -1195,6 +1199,17 @@ public final class LoadedApk {
        // help deciding whether or not a dex file is the primary apk or a
        // secondary dex.
        DexLoadReporter.getInstance().registerAppDataDir(mPackageName, mDataDir);

        IBinder app = RuntimeInit.getApplicationObject();
        if (android.app.Flags.getOptimizationInfoFromAppProcess() && app != null) {
            OptimizationInfo info = ApplicationRuntime.getBaseApkOptimizationInfo();
            try {
                ActivityManager.getService().reportOptimizationInfo(
                        app, info.getStatus(), info.getReason());
            } catch (RemoteException ex) {
                throw ex.rethrowFromSystemServer();
            }
        }
    }

    /**
+8 −0
Original line number Diff line number Diff line
@@ -8,3 +8,11 @@ flag {
     description: "Controls whether to report memory metrics post GC cleanup"
     bug: "331243037"
}

flag {
     namespace: "art_mainline"
     name: "get_optimization_info_from_app_process"
     is_exported: false
     description: "Controls whether to get ART optimization info from the app process for metrics reporting"
     bug: "422941949"
}
+10 −0
Original line number Diff line number Diff line
@@ -19681,4 +19681,14 @@ public class ActivityManagerService extends IActivityManager.Stub
            }
        });
    }
    @Override
    public void reportOptimizationInfo(@NonNull IBinder app, @NonNull String compilerFilter,
            @NonNull String compilationReason) {
        final ProcessRecord r = findAppProcess(app, "reportOptimizationInfo");
        if (r == null) {
            return;
        }
        r.getWindowProcessController().setOptimizationInfo(compilerFilter, compilationReason);
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -552,6 +552,14 @@ class ActivityMetricsLogger {
        }

        PackageOptimizationInfo getPackageOptimizationInfo(ArtManagerInternal artManagerInternal) {
            if (android.app.Flags.getOptimizationInfoFromAppProcess()
                    && com.android.art.flags.Flags.updatableFilterAndReason()) {
                if (processRecord == null) {
                    return PackageOptimizationInfo.createWithNoInfo();
                }
                PackageOptimizationInfo info = processRecord.getOptimizationInfo();
                return info != null ? info : PackageOptimizationInfo.createWithNoInfo();
            }
            return artManagerInternal == null || launchedActivityAppRecordRequiredAbi == null
                    ? PackageOptimizationInfo.createWithNoInfo()
                    : artManagerInternal.getPackageOptimizationInfo(applicationInfo,
Loading