diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/DexOptHelper.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/DexOptHelper.java b/services/core/java/com/android/server/pm/DexOptHelper.java index 3abf3a5ab4bf..ecfc768a874e 100644 --- a/services/core/java/com/android/server/pm/DexOptHelper.java +++ b/services/core/java/com/android/server/pm/DexOptHelper.java @@ -50,13 +50,17 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.ApexStagedEvent; import android.content.pm.Flags; +import android.content.pm.IPackageManagerNative; +import android.content.pm.IStagedApexObserver; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.SharedLibraryInfo; import android.content.pm.dex.ArtManager; import android.os.Binder; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Trace; @@ -1054,6 +1058,10 @@ public final class DexOptHelper { artManager.scheduleBackgroundDexoptJob(); } }, new IntentFilter(Intent.ACTION_LOCKED_BOOT_COMPLETED)); + + if (Flags.useArtServiceV2()) { + StagedApexObserver.registerForStagedApexUpdates(artManager); + } } /** @@ -1168,4 +1176,32 @@ public final class DexOptHelper { && dexoptOptions.isCompilationEnabled() && !isApex; } + + private static class StagedApexObserver extends IStagedApexObserver.Stub { + private final @NonNull ArtManagerLocal mArtManager; + + static void registerForStagedApexUpdates(@NonNull ArtManagerLocal artManager) { + IPackageManagerNative packageNative = IPackageManagerNative.Stub.asInterface( + ServiceManager.getService("package_native")); + if (packageNative == null) { + Log.e(TAG, "No IPackageManagerNative"); + return; + } + + try { + packageNative.registerStagedApexObserver(new StagedApexObserver(artManager)); + } catch (RemoteException e) { + Log.e(TAG, "Failed to register staged apex observer", e); + } + } + + private StagedApexObserver(@NonNull ArtManagerLocal artManager) { + mArtManager = artManager; + } + + @Override + public void onApexStaged(@NonNull ApexStagedEvent event) { + mArtManager.onApexStaged(event.stagedApexModuleNames); + } + } } |