Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 788bf76b authored by Jeffrey Huang's avatar Jeffrey Huang Committed by Android (Google) Code Review
Browse files

Merge changes I888e4b05,Iea5266d4

* changes:
  Migrate PullWifiBytesTransfer java puller
  Stubs for pull/register java pullers
parents a6fb9db9 3ee8e203
Loading
Loading
Loading
Loading
+52 −29
Original line number Diff line number Diff line
@@ -815,31 +815,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
        }
    }

    private void pullWifiBytesTransfer(
            int tagId, long elapsedNanos, long wallClockNanos,
            List<StatsLogEventWrapper> pulledData) {
        long token = Binder.clearCallingIdentity();
        try {
            // TODO: Consider caching the following call to get BatteryStatsInternal.
            BatteryStatsInternal bs = LocalServices.getService(BatteryStatsInternal.class);
            String[] ifaces = bs.getWifiIfaces();
            if (ifaces.length == 0) {
                return;
            }
            if (mNetworkStatsService == null) {
                Slog.e(TAG, "NetworkStats Service is not available!");
                return;
            }
            // Combine all the metrics per Uid into one record.
            NetworkStats stats = mNetworkStatsService.getDetailedUidStats(ifaces).groupedByUid();
            addNetworkStats(tagId, pulledData, stats, false);
        } catch (RemoteException e) {
            Slog.e(TAG, "Pulling netstats for wifi bytes has error", e);
        } finally {
            Binder.restoreCallingIdentity(token);
        }
    }

    private void pullWifiBytesTransferByFgBg(
            int tagId, long elapsedNanos, long wallClockNanos,
            List<StatsLogEventWrapper> pulledData) {
@@ -2316,149 +2291,180 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
        long elapsedNanos = SystemClock.elapsedRealtimeNanos();
        long wallClockNanos = SystemClock.currentTimeMicro() * 1000L;
        switch (tagId) {
            case StatsLog.WIFI_BYTES_TRANSFER: {
                pullWifiBytesTransfer(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }
            
            case StatsLog.MOBILE_BYTES_TRANSFER: {
                pullMobileBytesTransfer(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.WIFI_BYTES_TRANSFER_BY_FG_BG: {
                pullWifiBytesTransferByFgBg(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.MOBILE_BYTES_TRANSFER_BY_FG_BG: {
                pullMobileBytesTransferByFgBg(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.BLUETOOTH_BYTES_TRANSFER: {
                pullBluetoothBytesTransfer(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.KERNEL_WAKELOCK: {
                pullKernelWakelock(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CPU_TIME_PER_FREQ: {
                pullCpuTimePerFreq(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CPU_TIME_PER_UID: {
                pullKernelUidCpuTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CPU_TIME_PER_UID_FREQ: {
                pullKernelUidCpuFreqTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CPU_CLUSTER_TIME: {
                pullKernelUidCpuClusterTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CPU_ACTIVE_TIME: {
                pullKernelUidCpuActiveTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.WIFI_ACTIVITY_INFO: {
                pullWifiActivityInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.MODEM_ACTIVITY_INFO: {
                pullModemActivityInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.BLUETOOTH_ACTIVITY_INFO: {
                pullBluetoothActivityInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.SYSTEM_UPTIME: {
                pullSystemUpTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.SYSTEM_ELAPSED_REALTIME: {
                pullSystemElapsedRealtime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROCESS_MEMORY_STATE: {
                pullProcessMemoryState(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROCESS_MEMORY_HIGH_WATER_MARK: {
                pullProcessMemoryHighWaterMark(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROCESS_MEMORY_SNAPSHOT: {
                pullProcessMemorySnapshot(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.SYSTEM_ION_HEAP_SIZE: {
                pullSystemIonHeapSize(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROCESS_SYSTEM_ION_HEAP_SIZE: {
                pullProcessSystemIonHeapSize(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.BINDER_CALLS: {
                pullBinderCallsStats(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.BINDER_CALLS_EXCEPTIONS: {
                pullBinderCallsStatsExceptions(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.LOOPER_STATS: {
                pullLooperStats(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DISK_STATS: {
                pullDiskStats(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DIRECTORY_USAGE: {
                pullDirectoryUsage(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.APP_SIZE: {
                pullAppSize(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.CATEGORY_SIZE: {
                pullCategorySize(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.NUM_FINGERPRINTS_ENROLLED: {
                pullNumBiometricsEnrolled(BiometricsProtoEnums.MODALITY_FINGERPRINT, tagId,
                        elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.NUM_FACES_ENROLLED: {
                pullNumBiometricsEnrolled(BiometricsProtoEnums.MODALITY_FACE, tagId, elapsedNanos,
                        wallClockNanos, ret);
                break;
            }

            case StatsLog.PROC_STATS: {
                pullProcessStats(ProcessStats.REPORT_ALL, tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROC_STATS_PKG_PROC: {
                pullProcessStats(ProcessStats.REPORT_PKG_PROC_STATS, tagId, elapsedNanos,
                        wallClockNanos, ret);
                break;
            }

            case StatsLog.DISK_IO: {
                pullDiskIo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.POWER_PROFILE: {
                pullPowerProfile(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.BUILD_INFORMATION: {
                pullBuildInformation(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.PROCESS_CPU_TIME: {
                pullProcessCpuTime(tagId, elapsedNanos, wallClockNanos, ret);
                break;
@@ -2467,73 +2473,90 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
                pullCpuTimePerThreadFreq(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DEVICE_CALCULATED_POWER_USE: {
                pullDeviceCalculatedPowerUse(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DEVICE_CALCULATED_POWER_BLAME_UID: {
                pullDeviceCalculatedPowerBlameUid(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DEVICE_CALCULATED_POWER_BLAME_OTHER: {
                pullDeviceCalculatedPowerBlameOther(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.TEMPERATURE: {
                pullTemperature(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.COOLING_DEVICE: {
                pullCoolingDevices(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DEBUG_ELAPSED_CLOCK: {
                pullDebugElapsedClock(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DEBUG_FAILING_ELAPSED_CLOCK: {
                pullDebugFailingElapsedClock(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.ROLE_HOLDER: {
                pullRoleHolders(elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.DANGEROUS_PERMISSION_STATE: {
                pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE, elapsedNanos,
                        wallClockNanos, ret);
                break;
            }

            case StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED: {
                pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED,
                        elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.TIME_ZONE_DATA_INFO: {
                pullTimeZoneDataInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.EXTERNAL_STORAGE_INFO: {
                pullExternalStorageInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.APPS_ON_EXTERNAL_STORAGE_INFO: {
                pullAppsOnExternalStorageInfo(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.FACE_SETTINGS: {
                pullFaceSettings(tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.APP_OPS: {
                pullAppOps(elapsedNanos, wallClockNanos, ret);
                break;
            }

            case StatsLog.NOTIFICATION_REMOTE_VIEWS: {
                pullNotificationStats(NotificationManagerService.REPORT_REMOTE_VIEWS,
                        tagId, elapsedNanos, wallClockNanos, ret);
                break;
            }

            default:
                Slog.w(TAG, "No such tagId data as " + tagId);
                return null;
+62 −4
Original line number Diff line number Diff line
@@ -59,161 +59,200 @@ namespace statsd {
const int64_t NO_ALARM_UPDATE = INT64_MAX;

std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
        // wifi_bytes_transfer
        {{.atomTag = android::util::WIFI_BYTES_TRANSFER},
         {.additiveFields = {2, 3, 4, 5},
          .puller = new StatsCompanionServicePuller(android::util::WIFI_BYTES_TRANSFER)}},

        // wifi_bytes_transfer_by_fg_bg
        {{.atomTag = android::util::WIFI_BYTES_TRANSFER_BY_FG_BG},
         {.additiveFields = {3, 4, 5, 6},
          .puller = new StatsCompanionServicePuller(android::util::WIFI_BYTES_TRANSFER_BY_FG_BG)}},

        // mobile_bytes_transfer
        {{.atomTag = android::util::MOBILE_BYTES_TRANSFER},
         {.additiveFields = {2, 3, 4, 5},
          .puller = new StatsCompanionServicePuller(android::util::MOBILE_BYTES_TRANSFER)}},

        // mobile_bytes_transfer_by_fg_bg
        {{.atomTag = android::util::MOBILE_BYTES_TRANSFER_BY_FG_BG},
         {.additiveFields = {3, 4, 5, 6},
          .puller =
                  new StatsCompanionServicePuller(android::util::MOBILE_BYTES_TRANSFER_BY_FG_BG)}},

        // bluetooth_bytes_transfer
        {{.atomTag = android::util::BLUETOOTH_BYTES_TRANSFER},
         {.additiveFields = {2, 3},
          .puller = new StatsCompanionServicePuller(android::util::BLUETOOTH_BYTES_TRANSFER)}},

        // kernel_wakelock
        {{.atomTag = android::util::KERNEL_WAKELOCK},
         {.puller = new StatsCompanionServicePuller(android::util::KERNEL_WAKELOCK)}},

        // subsystem_sleep_state
        {{.atomTag = android::util::SUBSYSTEM_SLEEP_STATE},
         {.puller = new SubsystemSleepStatePuller()}},

        // on_device_power_measurement
        {{.atomTag = android::util::ON_DEVICE_POWER_MEASUREMENT},
         {.puller = new PowerStatsPuller()}},

        // cpu_time_per_freq
        {{.atomTag = android::util::CPU_TIME_PER_FREQ},
         {.additiveFields = {3},
          .puller = new StatsCompanionServicePuller(android::util::CPU_TIME_PER_FREQ)}},

        // cpu_time_per_uid
        {{.atomTag = android::util::CPU_TIME_PER_UID},
         {.additiveFields = {2, 3},
          .puller = new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID)}},

        // cpu_time_per_uid_freq
        // the throttling is 3sec, handled in
        // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader
        {{.atomTag = android::util::CPU_TIME_PER_UID_FREQ},
         {.additiveFields = {4},
          .puller = new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID_FREQ)}},

        // cpu_active_time
        // the throttling is 3sec, handled in
        // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader
        {{.atomTag = android::util::CPU_ACTIVE_TIME},
         {.additiveFields = {2},
          .puller = new StatsCompanionServicePuller(android::util::CPU_ACTIVE_TIME)}},

        // cpu_cluster_time
        // the throttling is 3sec, handled in
        // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader
        {{.atomTag = android::util::CPU_CLUSTER_TIME},
         {.additiveFields = {3},
          .puller = new StatsCompanionServicePuller(android::util::CPU_CLUSTER_TIME)}},

        // wifi_activity_energy_info
        {{.atomTag = android::util::WIFI_ACTIVITY_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_INFO)}},

        // modem_activity_info
        {{.atomTag = android::util::MODEM_ACTIVITY_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::MODEM_ACTIVITY_INFO)}},

        // bluetooth_activity_info
        {{.atomTag = android::util::BLUETOOTH_ACTIVITY_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::BLUETOOTH_ACTIVITY_INFO)}},

        // system_elapsed_realtime
        {{.atomTag = android::util::SYSTEM_ELAPSED_REALTIME},
         {.coolDownNs = NS_PER_SEC,
          .puller = new StatsCompanionServicePuller(android::util::SYSTEM_ELAPSED_REALTIME),
          .pullTimeoutNs = NS_PER_SEC / 2,
         }},

        // system_uptime
        {{.atomTag = android::util::SYSTEM_UPTIME},
         {.puller = new StatsCompanionServicePuller(android::util::SYSTEM_UPTIME)}},

        // remaining_battery_capacity
        {{.atomTag = android::util::REMAINING_BATTERY_CAPACITY},
         {.puller = new ResourceHealthManagerPuller(android::util::REMAINING_BATTERY_CAPACITY)}},

        // full_battery_capacity
        {{.atomTag = android::util::FULL_BATTERY_CAPACITY},
         {.puller = new ResourceHealthManagerPuller(android::util::FULL_BATTERY_CAPACITY)}},

        // battery_voltage
        {{.atomTag = android::util::BATTERY_VOLTAGE},
         {.puller = new ResourceHealthManagerPuller(android::util::BATTERY_VOLTAGE)}},

        // battery_level
        {{.atomTag = android::util::BATTERY_LEVEL},
         {.puller = new ResourceHealthManagerPuller(android::util::BATTERY_LEVEL)}},

        // battery_cycle_count
        {{.atomTag = android::util::BATTERY_CYCLE_COUNT},
         {.puller = new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}},

        // process_memory_state
        {{.atomTag = android::util::PROCESS_MEMORY_STATE},
         {.additiveFields = {4, 5, 6, 7, 8},
          .puller = new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_STATE)}},

        // process_memory_high_water_mark
        {{.atomTag = android::util::PROCESS_MEMORY_HIGH_WATER_MARK},
         {.puller =
                  new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_HIGH_WATER_MARK)}},

        // process_memory_snapshot
        {{.atomTag = android::util::PROCESS_MEMORY_SNAPSHOT},
         {.puller = new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_SNAPSHOT)}},

        // system_ion_heap_size
        {{.atomTag = android::util::SYSTEM_ION_HEAP_SIZE},
         {.puller = new StatsCompanionServicePuller(android::util::SYSTEM_ION_HEAP_SIZE)}},

        // process_system_ion_heap_size
        {{.atomTag = android::util::PROCESS_SYSTEM_ION_HEAP_SIZE},
         {.puller = new StatsCompanionServicePuller(android::util::PROCESS_SYSTEM_ION_HEAP_SIZE)}},

        // temperature
        {{.atomTag = android::util::TEMPERATURE},
         {.puller = new StatsCompanionServicePuller(android::util::TEMPERATURE)}},

        // cooling_device
        {{.atomTag = android::util::COOLING_DEVICE},
         {.puller = new StatsCompanionServicePuller(android::util::COOLING_DEVICE)}},

        // binder_calls
        {{.atomTag = android::util::BINDER_CALLS},
         {.additiveFields = {4, 5, 6, 8, 12},
          .puller = new StatsCompanionServicePuller(android::util::BINDER_CALLS)}},

        // binder_calls_exceptions
        {{.atomTag = android::util::BINDER_CALLS_EXCEPTIONS},
         {.puller = new StatsCompanionServicePuller(android::util::BINDER_CALLS_EXCEPTIONS)}},

        // looper_stats
        {{.atomTag = android::util::LOOPER_STATS},
         {.additiveFields = {5, 6, 7, 8, 9},
          .puller = new StatsCompanionServicePuller(android::util::LOOPER_STATS)}},

        // Disk Stats
        {{.atomTag = android::util::DISK_STATS},
         {.puller = new StatsCompanionServicePuller(android::util::DISK_STATS)}},

        // Directory usage
        {{.atomTag = android::util::DIRECTORY_USAGE},
         {.puller = new StatsCompanionServicePuller(android::util::DIRECTORY_USAGE)}},

        // Size of app's code, data, and cache
        {{.atomTag = android::util::APP_SIZE},
         {.puller = new StatsCompanionServicePuller(android::util::APP_SIZE)}},

        // Size of specific categories of files. Eg. Music.
        {{.atomTag = android::util::CATEGORY_SIZE},
         {.puller = new StatsCompanionServicePuller(android::util::CATEGORY_SIZE)}},

        // Number of fingerprints enrolled for each user.
        {{.atomTag = android::util::NUM_FINGERPRINTS_ENROLLED},
         {.puller = new StatsCompanionServicePuller(android::util::NUM_FINGERPRINTS_ENROLLED)}},

        // Number of faces enrolled for each user.
        {{.atomTag = android::util::NUM_FACES_ENROLLED},
         {.puller = new StatsCompanionServicePuller(android::util::NUM_FACES_ENROLLED)}},

        // ProcStats.
        {{.atomTag = android::util::PROC_STATS},
         {.puller = new StatsCompanionServicePuller(android::util::PROC_STATS)}},

        // ProcStatsPkgProc.
        {{.atomTag = android::util::PROC_STATS_PKG_PROC},
         {.puller = new StatsCompanionServicePuller(android::util::PROC_STATS_PKG_PROC)}},

        // Disk I/O stats per uid.
        {{.atomTag = android::util::DISK_IO},
         {.additiveFields = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
          .coolDownNs = 3 * NS_PER_SEC,
          .puller = new StatsCompanionServicePuller(android::util::DISK_IO)}},

        // PowerProfile constants for power model calculations.
        {{.atomTag = android::util::POWER_PROFILE},
         {.puller = new StatsCompanionServicePuller(android::util::POWER_PROFILE)}},

        // Process cpu stats. Min cool-down is 5 sec, inline with what AcitivityManagerService uses.
        {{.atomTag = android::util::PROCESS_CPU_TIME},
         {.coolDownNs = 5 * NS_PER_SEC /* min cool-down in seconds*/,
@@ -221,64 +260,83 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
        {{.atomTag = android::util::CPU_TIME_PER_THREAD_FREQ},
         {.additiveFields = {7, 9, 11, 13, 15, 17, 19, 21},
          .puller = new StatsCompanionServicePuller(android::util::CPU_TIME_PER_THREAD_FREQ)}},

        // DeviceCalculatedPowerUse.
        {{.atomTag = android::util::DEVICE_CALCULATED_POWER_USE},
         {.puller = new StatsCompanionServicePuller(android::util::DEVICE_CALCULATED_POWER_USE)}},

        // DeviceCalculatedPowerBlameUid.
        {{.atomTag = android::util::DEVICE_CALCULATED_POWER_BLAME_UID},
         {.puller = new StatsCompanionServicePuller(
                  android::util::DEVICE_CALCULATED_POWER_BLAME_UID)}},

        // DeviceCalculatedPowerBlameOther.
        {{.atomTag = android::util::DEVICE_CALCULATED_POWER_BLAME_OTHER},
         {.puller = new StatsCompanionServicePuller(
                  android::util::DEVICE_CALCULATED_POWER_BLAME_OTHER)}},

        // DebugElapsedClock.
        {{.atomTag = android::util::DEBUG_ELAPSED_CLOCK},
         {.additiveFields = {1, 2, 3, 4},
          .puller = new StatsCompanionServicePuller(android::util::DEBUG_ELAPSED_CLOCK)}},

        // DebugFailingElapsedClock.
        {{.atomTag = android::util::DEBUG_FAILING_ELAPSED_CLOCK},
         {.additiveFields = {1, 2, 3, 4},
          .puller = new StatsCompanionServicePuller(android::util::DEBUG_FAILING_ELAPSED_CLOCK)}},

        // BuildInformation.
        {{.atomTag = android::util::BUILD_INFORMATION},
         {.puller = new StatsCompanionServicePuller(android::util::BUILD_INFORMATION)}},

        // RoleHolder.
        {{.atomTag = android::util::ROLE_HOLDER},
         {.puller = new StatsCompanionServicePuller(android::util::ROLE_HOLDER)}},

        // PermissionState.
        {{.atomTag = android::util::DANGEROUS_PERMISSION_STATE},
         {.puller = new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE)}},

        // TrainInfo.
        {{.atomTag = android::util::TRAIN_INFO}, {.puller = new TrainInfoPuller()}},

        // TimeZoneDataInfo.
        {{.atomTag = android::util::TIME_ZONE_DATA_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::TIME_ZONE_DATA_INFO)}},

        // ExternalStorageInfo
        {{.atomTag = android::util::EXTERNAL_STORAGE_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::EXTERNAL_STORAGE_INFO)}},

        // GpuStatsGlobalInfo
        {{.atomTag = android::util::GPU_STATS_GLOBAL_INFO},
         {.puller = new GpuStatsPuller(android::util::GPU_STATS_GLOBAL_INFO)}},

        // GpuStatsAppInfo
        {{.atomTag = android::util::GPU_STATS_APP_INFO},
         {.puller = new GpuStatsPuller(android::util::GPU_STATS_APP_INFO)}},

        // AppsOnExternalStorageInfo
        {{.atomTag = android::util::APPS_ON_EXTERNAL_STORAGE_INFO},
         {.puller = new StatsCompanionServicePuller(android::util::APPS_ON_EXTERNAL_STORAGE_INFO)}},

        // Face Settings
        {{.atomTag = android::util::FACE_SETTINGS},
         {.puller = new StatsCompanionServicePuller(android::util::FACE_SETTINGS)}},

        // App ops
        {{.atomTag = android::util::APP_OPS},
         {.puller = new StatsCompanionServicePuller(android::util::APP_OPS)}},

        // VmsClientStats
        {{.atomTag = android::util::VMS_CLIENT_STATS},
         {.additiveFields = {5, 6, 7, 8, 9, 10},
          .puller = new CarStatsPuller(android::util::VMS_CLIENT_STATS)}},

        // NotiifcationRemoteViews.
        {{.atomTag = android::util::NOTIFICATION_REMOTE_VIEWS},
         {.puller = new StatsCompanionServicePuller(android::util::NOTIFICATION_REMOTE_VIEWS)}},

        // PermissionStateSampled.
        {{.atomTag = android::util::DANGEROUS_PERMISSION_STATE_SAMPLED},
         {.puller =
+783 −1

File changed.

Preview size limit exceeded, changes collapsed.