diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index a82c91e2352b3..dc868b325900d 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -126,6 +126,7 @@ import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.connectivity.WifiActivityEnergyInfo; +import android.os.incremental.IncrementalManager; import android.os.storage.DiskInfo; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; @@ -426,6 +427,7 @@ public class StatsPullAtomService extends SystemService { private final Object mHealthHalLock = new Object(); private final Object mAttributedAppOpsLock = new Object(); private final Object mSettingsStatsLock = new Object(); + private final Object mInstalledIncrementalPackagesLock = new Object(); public StatsPullAtomService(Context context) { super(context); @@ -695,6 +697,10 @@ public class StatsPullAtomService extends SystemService { synchronized (mSettingsStatsLock) { return pullSettingsStatsLocked(atomTag, data); } + case FrameworkStatsLog.INSTALLED_INCREMENTAL_PACKAGE: + synchronized (mInstalledIncrementalPackagesLock) { + return pullInstalledIncrementalPackagesLocked(atomTag, data); + } default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } @@ -877,6 +883,7 @@ public class StatsPullAtomService extends SystemService { registerBatteryVoltage(); registerBatteryCycleCount(); registerSettingsStats(); + registerInstalledIncrementalPackages(); } private void initAndRegisterNetworkStatsPullers() { @@ -3949,6 +3956,31 @@ public class StatsPullAtomService extends SystemService { return StatsManager.PULL_SUCCESS; } + private void registerInstalledIncrementalPackages() { + int tagId = FrameworkStatsLog.INSTALLED_INCREMENTAL_PACKAGE; + mStatsManager.setPullAtomCallback( + tagId, + null, // use default PullAtomMetadata values + DIRECT_EXECUTOR, + mStatsCallbackImpl + ); + } + + int pullInstalledIncrementalPackagesLocked(int atomTag, List pulledData) { + final PackageManager pm = mContext.getPackageManager(); + if (!pm.hasSystemFeature(PackageManager.FEATURE_INCREMENTAL_DELIVERY)) { + // Incremental is not enabled on this device. The result list will be empty. + return StatsManager.PULL_SUCCESS; + } + List installedPackages = pm.getInstalledPackages(0); + for (PackageInfo pi : installedPackages) { + if (IncrementalManager.isIncrementalPath(pi.applicationInfo.getBaseCodePath())) { + pulledData.add(FrameworkStatsLog.buildStatsEvent(atomTag, pi.applicationInfo.uid)); + } + } + return StatsManager.PULL_SUCCESS; + } + // Thermal event received from vendor thermal management subsystem private static final class ThermalEventListener extends IThermalEventListener.Stub { @Override