Revert "Log the apk optimization state in the MetricsLogger"

This reverts commit 0a8bea818c330d02161322901534992253a2f9ee.


E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: ActivityManager
E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.android.server.am.ProcessRecord.requiredAbi' on a null object reference
E AndroidRuntime:        at com.android.server.am.ActivityMetricsLogger.logAppTransition(ActivityMetricsLogger.java:504)
E AndroidRuntime:        at com.android.server.am.ActivityMetricsLogger.access$100(ActivityMetricsLogger.java:62)

Bug: 73626352
Change-Id: Idd50e0d2cf34e5393b4ae76ef8bc48b0067532eb
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index 36c1722..e2ceb31 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -24,8 +24,6 @@
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.APP_TRANSITION_WINDOWS_DRAWN_DELAY_MS;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_CLASS_NAME;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.FIELD_INSTANT_APP_LAUNCH_TOKEN;
-import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PACKAGE_OPTIMIZATION_COMPILATION_REASON;
-import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.PACKAGE_OPTIMIZATION_COMPILATION_FILTER;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_COLD_LAUNCH;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_HOT_LAUNCH;
 import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.TYPE_TRANSITION_REPORTED_DRAWN_NO_BUNDLE;
@@ -38,8 +36,6 @@
 import static com.android.server.am.MemoryStatUtil.readMemoryStatFromMemcg;
 
 import android.content.Context;
-import android.content.pm.dex.ArtManagerInternal;
-import android.content.pm.dex.PackageOptimizationInfo;
 import android.metrics.LogMaker;
 import android.os.Handler;
 import android.os.Looper;
@@ -52,7 +48,6 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.os.SomeArgs;
-import com.android.server.LocalServices;
 
 import java.util.ArrayList;
 
@@ -74,7 +69,7 @@
     private static final long INVALID_START_TIME = -1;
 
     private static final int MSG_CHECK_VISIBILITY = 0;
-    private static final int MSG_LOG_APP_TRANSITION = 1;
+    private static final int MSG_LOG_APP_START_MEMORY_STATE_CAPTURE = 1;
 
     // Preallocated strings we are sending to tron, so we don't have to allocate a new one every
     // time we log.
@@ -97,9 +92,6 @@
     private final SparseArray<StackTransitionInfo> mStackTransitionInfo = new SparseArray<>();
     private final SparseArray<StackTransitionInfo> mLastStackTransitionInfo = new SparseArray<>();
     private final H mHandler;
-
-    private ArtManagerInternal mArtManagerInternal;
-
     private final class H extends Handler {
 
         public H(Looper looper) {
@@ -113,12 +105,12 @@
                     final SomeArgs args = (SomeArgs) msg.obj;
                     checkVisibility((TaskRecord) args.arg1, (ActivityRecord) args.arg2);
                     break;
-                case MSG_LOG_APP_TRANSITION:
-                    logAppTransition(msg.arg1, msg.arg2, (StackTransitionInfo) msg.obj);
+                case MSG_LOG_APP_START_MEMORY_STATE_CAPTURE:
+                    logAppStartMemoryStateCapture((StackTransitionInfo) msg.obj);
                     break;
             }
         }
-    }
+    };
 
     private final class StackTransitionInfo {
         private ActivityRecord launchedActivity;
@@ -459,75 +451,54 @@
             if (type == -1) {
                 return;
             }
-            mHandler.obtainMessage(MSG_LOG_APP_TRANSITION, mCurrentTransitionDeviceUptime,
-                    mCurrentTransitionDelayMs, info).sendToTarget();
+            final LogMaker builder = new LogMaker(APP_TRANSITION);
+            builder.setPackageName(info.launchedActivity.packageName);
+            builder.setType(type);
+            builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name);
+            final boolean isInstantApp = info.launchedActivity.info.applicationInfo.isInstantApp();
+            if (info.launchedActivity.launchedFromPackage != null) {
+                builder.addTaggedData(APP_TRANSITION_CALLING_PACKAGE_NAME,
+                        info.launchedActivity.launchedFromPackage);
+            }
+            String launchToken = info.launchedActivity.info.launchToken;
+            if (launchToken != null) {
+                builder.addTaggedData(FIELD_INSTANT_APP_LAUNCH_TOKEN, launchToken);
+                info.launchedActivity.info.launchToken = null;
+            }
+            builder.addTaggedData(APP_TRANSITION_IS_EPHEMERAL, isInstantApp ? 1 : 0);
+            builder.addTaggedData(APP_TRANSITION_DEVICE_UPTIME_SECONDS,
+                    mCurrentTransitionDeviceUptime);
+            builder.addTaggedData(APP_TRANSITION_DELAY_MS, mCurrentTransitionDelayMs);
+            builder.setSubtype(info.reason);
+            if (info.startingWindowDelayMs != -1) {
+                builder.addTaggedData(APP_TRANSITION_STARTING_WINDOW_DELAY_MS,
+                        info.startingWindowDelayMs);
+            }
+            if (info.bindApplicationDelayMs != -1) {
+                builder.addTaggedData(APP_TRANSITION_BIND_APPLICATION_DELAY_MS,
+                        info.bindApplicationDelayMs);
+            }
+            builder.addTaggedData(APP_TRANSITION_WINDOWS_DRAWN_DELAY_MS, info.windowsDrawnDelayMs);
+            mMetricsLogger.write(builder);
+            StatsLog.write(
+                    StatsLog.APP_START_CHANGED,
+                    info.launchedActivity.appInfo.uid,
+                    info.launchedActivity.packageName,
+                    convertAppStartTransitionType(type),
+                    info.launchedActivity.info.name,
+                    info.launchedActivity.launchedFromPackage,
+                    isInstantApp,
+                    mCurrentTransitionDeviceUptime * 1000,
+                    info.reason,
+                    mCurrentTransitionDelayMs,
+                    info.startingWindowDelayMs,
+                    info.bindApplicationDelayMs,
+                    info.windowsDrawnDelayMs,
+                    launchToken);
+            mHandler.obtainMessage(MSG_LOG_APP_START_MEMORY_STATE_CAPTURE, info).sendToTarget();
         }
     }
 
-    // This gets called on the handler without holding the activity manager lock.
-    private void logAppTransition(int currentTransitionDeviceUptime, int currentTransitionDelayMs,
-            StackTransitionInfo info) {
-        final int type = getTransitionType(info);
-        final LogMaker builder = new LogMaker(APP_TRANSITION);
-        builder.setPackageName(info.launchedActivity.packageName);
-        builder.setType(type);
-        builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name);
-        final boolean isInstantApp = info.launchedActivity.info.applicationInfo.isInstantApp();
-        if (info.launchedActivity.launchedFromPackage != null) {
-            builder.addTaggedData(APP_TRANSITION_CALLING_PACKAGE_NAME,
-                    info.launchedActivity.launchedFromPackage);
-        }
-        String launchToken = info.launchedActivity.info.launchToken;
-        if (launchToken != null) {
-            builder.addTaggedData(FIELD_INSTANT_APP_LAUNCH_TOKEN, launchToken);
-            info.launchedActivity.info.launchToken = null;
-        }
-        builder.addTaggedData(APP_TRANSITION_IS_EPHEMERAL, isInstantApp ? 1 : 0);
-        builder.addTaggedData(APP_TRANSITION_DEVICE_UPTIME_SECONDS,
-                currentTransitionDeviceUptime);
-        builder.addTaggedData(APP_TRANSITION_DELAY_MS, currentTransitionDelayMs);
-        builder.setSubtype(info.reason);
-        if (info.startingWindowDelayMs != -1) {
-            builder.addTaggedData(APP_TRANSITION_STARTING_WINDOW_DELAY_MS,
-                    info.startingWindowDelayMs);
-        }
-        if (info.bindApplicationDelayMs != -1) {
-            builder.addTaggedData(APP_TRANSITION_BIND_APPLICATION_DELAY_MS,
-                    info.bindApplicationDelayMs);
-        }
-        builder.addTaggedData(APP_TRANSITION_WINDOWS_DRAWN_DELAY_MS, info.windowsDrawnDelayMs);
-        final ArtManagerInternal artManagerInternal = getArtManagerInternal();
-        final PackageOptimizationInfo packageOptimizationInfo = artManagerInternal == null
-                ? PackageOptimizationInfo.createWithNoInfo()
-                : artManagerInternal.getPackageOptimizationInfo(
-                        info.launchedActivity.info.applicationInfo,
-                        info.launchedActivity.app.requiredAbi);
-        builder.addTaggedData(PACKAGE_OPTIMIZATION_COMPILATION_REASON,
-                packageOptimizationInfo.getCompilationReason());
-        builder.addTaggedData(PACKAGE_OPTIMIZATION_COMPILATION_FILTER,
-                packageOptimizationInfo.getCompilationFilter());
-        mMetricsLogger.write(builder);
-        StatsLog.write(
-                StatsLog.APP_START_CHANGED,
-                info.launchedActivity.appInfo.uid,
-                info.launchedActivity.packageName,
-                convertAppStartTransitionType(type),
-                info.launchedActivity.info.name,
-                info.launchedActivity.launchedFromPackage,
-                isInstantApp,
-                currentTransitionDeviceUptime * 1000,
-                info.reason,
-                currentTransitionDelayMs,
-                info.startingWindowDelayMs,
-                info.bindApplicationDelayMs,
-                info.windowsDrawnDelayMs,
-                launchToken,
-                packageOptimizationInfo.getCompilationReason(),
-                packageOptimizationInfo.getCompilationFilter());
-
-        logAppStartMemoryStateCapture(info);
-    }
-
     private int convertAppStartTransitionType(int tronType) {
         if (tronType == TYPE_TRANSITION_COLD_LAUNCH) {
             return StatsLog.APP_START_CHANGED__TYPE__COLD;
@@ -615,14 +586,4 @@
                         launchedActivity.appInfo.uid)
                 : null;
     }
-
-    private ArtManagerInternal getArtManagerInternal() {
-        if (mArtManagerInternal == null) {
-            // Note that this may be null.
-            // ArtManagerInternal is registered during PackageManagerService
-            // initialization which happens after ActivityManagerService.
-            mArtManagerInternal = LocalServices.getService(ArtManagerInternal.class);
-        }
-        return mArtManagerInternal;
-    }
 }
diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
index 2ece2b2..e290272 100644
--- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java
+++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java
@@ -19,20 +19,18 @@
 import android.Manifest;
 import android.annotation.UserIdInt;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
 import android.content.pm.dex.ArtManager;
 import android.content.pm.dex.ArtManager.ProfileType;
-import android.content.pm.dex.ArtManagerInternal;
 import android.content.pm.dex.DexMetadataHelper;
-import android.content.pm.dex.PackageOptimizationInfo;
 import android.os.Binder;
 import android.os.Build;
 import android.os.Handler;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
+import android.content.pm.IPackageManager;
 import android.content.pm.dex.ISnapshotRuntimeProfileCallback;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -44,13 +42,8 @@
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.Preconditions;
-import com.android.server.LocalServices;
 import com.android.server.pm.Installer;
 import com.android.server.pm.Installer.InstallerException;
-
-import dalvik.system.DexFile;
-
-import dalvik.system.VMRuntime;
 import java.io.File;
 import java.io.FileNotFoundException;
 import libcore.io.IoUtils;
@@ -93,8 +86,6 @@
         mInstaller = installer;
         mInstallLock = installLock;
         mHandler = new Handler(BackgroundThread.getHandler().getLooper());
-
-        LocalServices.addService(ArtManagerInternal.class, new ArtManagerInternalImpl());
     }
 
     @Override
@@ -406,30 +397,4 @@
         }
         return result;
     }
-
-    private class ArtManagerInternalImpl extends ArtManagerInternal {
-        @Override
-        public PackageOptimizationInfo getPackageOptimizationInfo(
-                ApplicationInfo info, String abi) {
-            String compilationReason;
-            String compilationFilter;
-            try {
-                String isa = VMRuntime.getInstructionSet(abi);
-                String[] stats = DexFile.getDexFileOptimizationStatus(info.getBaseCodePath(), isa);
-                compilationFilter = stats[0];
-                compilationReason = stats[1];
-            } catch (FileNotFoundException e) {
-                Slog.e(TAG, "Could not get optimizations status for " + info.getBaseCodePath(), e);
-                compilationFilter = "error";
-                compilationReason = "error";
-            } catch (IllegalArgumentException e) {
-                Slog.wtf(TAG, "Requested optimization status for " + info.getBaseCodePath()
-                        + " due to an invalid abi " + abi, e);
-                compilationFilter = "error";
-                compilationReason = "error";
-            }
-
-            return new PackageOptimizationInfo(compilationFilter, compilationReason);
-        }
-    }
 }