[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
This commit is contained in:
Songchun Fan
2021-05-25 15:24:30 -07:00
parent c06af26cc0
commit 2c4683d5b8

View File

@@ -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<StatsEvent> 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<PackageInfo> 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