From 2c4683d5b8590a4ce6272ff7dad93f2f72e79af7 Mon Sep 17 00:00:00 2001 From: Songchun Fan Date: Tue, 25 May 2021 15:24:30 -0700 Subject: [PATCH] [metrics] implement callbacks for InstalledIncrementalPackage pulled atom BUG: 187872906 Test: 1. install 3 incremental apps; 2. run `statsd_testdrive 10114` and wait to finish; 3. observe that the result contains 3 atoms. gauge_metrics { data { bucket_info { atom { installed_incremental_package { uids: 10306 } } atom { installed_incremental_package { uids: 10307 } } atom { installed_incremental_package { uids: 10308 } } elapsed_timestamp_nanos: 561691558765 elapsed_timestamp_nanos: 561691558765 elapsed_timestamp_nanos: 561691558765 bucket_num: 9 } } } time_base_elapsed_nano_seconds: 14974700031 bucket_size_nano_seconds: 60000000000 is_active: true Change-Id: I4f1d315818af5096f4d4341de063f6a162ebaf26 --- .../stats/pull/StatsPullAtomService.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) 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