Loading cmds/statsd/src/atoms.proto +1 −1 Original line number Diff line number Diff line Loading @@ -436,7 +436,7 @@ message Atom { DeviceCalculatedPowerBlameOther device_calculated_power_blame_other = 10041 [(module) = "framework"]; ProcessMemoryHighWaterMark process_memory_high_water_mark = 10042 [(module) = "framework"]; BatteryLevel battery_level = 10043; BatteryLevel battery_level = 10043 [(module) = "framework"]; BuildInformation build_information = 10044 [(module) = "framework"]; BatteryCycleCount battery_cycle_count = 10045; DebugElapsedClock debug_elapsed_clock = 10046 [(module) = "framework"]; Loading cmds/statsd/src/external/ResourceHealthManagerPuller.cpp +0 −6 Original line number Diff line number Diff line Loading @@ -91,12 +91,6 @@ bool ResourceHealthManagerPuller::PullInternal(vector<shared_ptr<LogEvent>>* dat ptr->write(v.legacy.batteryVoltage); ptr->init(); data->push_back(ptr); } else if (mTagId == android::util::BATTERY_LEVEL) { auto ptr = make_shared<LogEvent>(android::util::BATTERY_LEVEL, wallClockTimestampNs, elapsedTimestampNs); ptr->write(v.legacy.batteryLevel); ptr->init(); data->push_back(ptr); } else if (mTagId == android::util::BATTERY_CYCLE_COUNT) { auto ptr = make_shared<LogEvent>(android::util::BATTERY_CYCLE_COUNT, wallClockTimestampNs, elapsedTimestampNs); Loading cmds/statsd/src/external/StatsPullerManager.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -74,10 +74,6 @@ StatsPullerManager::StatsPullerManager() {{.atomTag = android::util::BATTERY_VOLTAGE}, new ResourceHealthManagerPuller(android::util::BATTERY_VOLTAGE)}, // battery_level {{.atomTag = android::util::BATTERY_LEVEL}, new ResourceHealthManagerPuller(android::util::BATTERY_LEVEL)}, // battery_cycle_count {{.atomTag = android::util::BATTERY_CYCLE_COUNT}, new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}, Loading services/core/java/com/android/server/BatteryService.java +22 −11 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.content.ContentResolver; Loading Loading @@ -1318,8 +1319,7 @@ public final class BatteryService extends SystemService { * * @hide Should only be used internally. */ @VisibleForTesting static final class HealthServiceWrapper { public static final class HealthServiceWrapper { private static final String TAG = "HealthServiceWrapper"; public static final String INSTANCE_HEALTHD = "backup"; public static final String INSTANCE_VENDOR = "default"; Loading @@ -1341,20 +1341,28 @@ public final class BatteryService extends SystemService { * init should be called after constructor. For testing purposes, init is not called by * constructor. */ HealthServiceWrapper() { public HealthServiceWrapper() { } IHealth getLastService() { public IHealth getLastService() { return mLastService.get(); } /** * See {@link #init(Callback, IServiceManagerSupplier, IHealthSupplier)} */ public void init() throws RemoteException, NoSuchElementException { init(/* callback= */null, new HealthServiceWrapper.IServiceManagerSupplier() {}, new HealthServiceWrapper.IHealthSupplier() {}); } /** * Start monitoring registration of new IHealth services. Only instances that are in * {@code sAllInstances} and in device / framework manifest are used. This function should * only be called once. * * mCallback.onRegistration() is called synchronously (aka in init thread) before * this method returns. * this method returns if callback is not null. * * @throws RemoteException transaction error when talking to IServiceManager * @throws NoSuchElementException if one of the following cases: Loading @@ -1362,18 +1370,17 @@ public final class BatteryService extends SystemService { * - none of {@code sAllInstances} are in manifests (i.e. not * available on this device), or none of these instances are available to current * process. * @throws NullPointerException when callback is null or supplier is null * @throws NullPointerException when supplier is null */ void init(Callback callback, void init(@Nullable Callback callback, IServiceManagerSupplier managerSupplier, IHealthSupplier healthSupplier) throws RemoteException, NoSuchElementException, NullPointerException { if (callback == null || managerSupplier == null || healthSupplier == null) if (managerSupplier == null || healthSupplier == null) { throw new NullPointerException(); } IServiceManager manager; mCallback = callback; mHealthSupplier = healthSupplier; // Initialize mLastService and call callback for the first time (in init thread) Loading @@ -1399,7 +1406,11 @@ public final class BatteryService extends SystemService { "No IHealth service instance among %s is available. Perhaps no permission?", sAllInstances.toString())); } if (callback != null) { mCallback = callback; mCallback.onRegistration(null, newService, mInstanceName); } // Register for future service registrations traceBegin("HealthInitRegisterNotification"); Loading services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +43 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.health.V2_0.IHealth; import android.net.ConnectivityManager; import android.net.INetworkStatsService; import android.net.Network; Loading Loading @@ -119,6 +120,7 @@ import com.android.internal.os.PowerProfile; import com.android.internal.os.ProcessCpuTracker; import com.android.internal.os.StoragedUidIoStatsReader; import com.android.internal.util.FrameworkStatsLog; import com.android.server.BatteryService; import com.android.server.BinderCallsStatsService; import com.android.server.LocalServices; import com.android.server.SystemService; Loading Loading @@ -239,6 +241,8 @@ public class StatsPullAtomService extends SystemService { private File mBaseDir; private BatteryService.HealthServiceWrapper mHealthService; @Nullable private KernelCpuThreadReaderDiff mKernelCpuThreadReader; Loading Loading @@ -373,6 +377,8 @@ public class StatsPullAtomService extends SystemService { return pullNotificationRemoteViews(atomTag, data); case FrameworkStatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED: return pullDangerousPermissionState(atomTag, data); case FrameworkStatsLog.BATTERY_LEVEL: return pullBatteryLevel(atomTag, data); default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } Loading Loading @@ -438,6 +444,14 @@ public class StatsPullAtomService extends SystemService { // Used by PROC_STATS and PROC_STATS_PKG_PROC atoms mBaseDir.mkdirs(); // Initialize HealthService mHealthService = new BatteryService.HealthServiceWrapper(); try { mHealthService.init(); } catch (RemoteException e) { Slog.e(TAG, "failed to initialize healthHalWrapper"); } } void registerEventListeners() { Loading Loading @@ -519,6 +533,7 @@ public class StatsPullAtomService extends SystemService { registerNotificationRemoteViews(); registerDangerousPermissionState(); registerDangerousPermissionStateSampled(); registerBatteryLevel(); } private INetworkStatsService getINetworkStatsService() { Loading Loading @@ -2961,6 +2976,34 @@ public class StatsPullAtomService extends SystemService { ); } private void registerBatteryLevel() { int tagId = FrameworkStatsLog.BATTERY_LEVEL; mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values BackgroundThread.getExecutor(), mStatsCallbackImpl ); } int pullBatteryLevel(int atomTag, List<StatsEvent> pulledData) { IHealth healthService = mHealthService.getLastService(); if (healthService == null) { return StatsManager.PULL_SKIP; } try { healthService.getHealthInfo((result, value) -> { StatsEvent e = StatsEvent.newBuilder() .setAtomId(atomTag) .writeInt(value.legacy.batteryLevel) .build(); pulledData.add(e); }); } catch (RemoteException e) { return StatsManager.PULL_SKIP; } return StatsManager.PULL_SUCCESS; } // Thermal event received from vendor thermal management subsystem private static final class ThermalEventListener extends IThermalEventListener.Stub { Loading Loading
cmds/statsd/src/atoms.proto +1 −1 Original line number Diff line number Diff line Loading @@ -436,7 +436,7 @@ message Atom { DeviceCalculatedPowerBlameOther device_calculated_power_blame_other = 10041 [(module) = "framework"]; ProcessMemoryHighWaterMark process_memory_high_water_mark = 10042 [(module) = "framework"]; BatteryLevel battery_level = 10043; BatteryLevel battery_level = 10043 [(module) = "framework"]; BuildInformation build_information = 10044 [(module) = "framework"]; BatteryCycleCount battery_cycle_count = 10045; DebugElapsedClock debug_elapsed_clock = 10046 [(module) = "framework"]; Loading
cmds/statsd/src/external/ResourceHealthManagerPuller.cpp +0 −6 Original line number Diff line number Diff line Loading @@ -91,12 +91,6 @@ bool ResourceHealthManagerPuller::PullInternal(vector<shared_ptr<LogEvent>>* dat ptr->write(v.legacy.batteryVoltage); ptr->init(); data->push_back(ptr); } else if (mTagId == android::util::BATTERY_LEVEL) { auto ptr = make_shared<LogEvent>(android::util::BATTERY_LEVEL, wallClockTimestampNs, elapsedTimestampNs); ptr->write(v.legacy.batteryLevel); ptr->init(); data->push_back(ptr); } else if (mTagId == android::util::BATTERY_CYCLE_COUNT) { auto ptr = make_shared<LogEvent>(android::util::BATTERY_CYCLE_COUNT, wallClockTimestampNs, elapsedTimestampNs); Loading
cmds/statsd/src/external/StatsPullerManager.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -74,10 +74,6 @@ StatsPullerManager::StatsPullerManager() {{.atomTag = android::util::BATTERY_VOLTAGE}, new ResourceHealthManagerPuller(android::util::BATTERY_VOLTAGE)}, // battery_level {{.atomTag = android::util::BATTERY_LEVEL}, new ResourceHealthManagerPuller(android::util::BATTERY_LEVEL)}, // battery_cycle_count {{.atomTag = android::util::BATTERY_CYCLE_COUNT}, new ResourceHealthManagerPuller(android::util::BATTERY_CYCLE_COUNT)}, Loading
services/core/java/com/android/server/BatteryService.java +22 −11 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server; import static com.android.internal.logging.nano.MetricsProto.MetricsEvent; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.content.ContentResolver; Loading Loading @@ -1318,8 +1319,7 @@ public final class BatteryService extends SystemService { * * @hide Should only be used internally. */ @VisibleForTesting static final class HealthServiceWrapper { public static final class HealthServiceWrapper { private static final String TAG = "HealthServiceWrapper"; public static final String INSTANCE_HEALTHD = "backup"; public static final String INSTANCE_VENDOR = "default"; Loading @@ -1341,20 +1341,28 @@ public final class BatteryService extends SystemService { * init should be called after constructor. For testing purposes, init is not called by * constructor. */ HealthServiceWrapper() { public HealthServiceWrapper() { } IHealth getLastService() { public IHealth getLastService() { return mLastService.get(); } /** * See {@link #init(Callback, IServiceManagerSupplier, IHealthSupplier)} */ public void init() throws RemoteException, NoSuchElementException { init(/* callback= */null, new HealthServiceWrapper.IServiceManagerSupplier() {}, new HealthServiceWrapper.IHealthSupplier() {}); } /** * Start monitoring registration of new IHealth services. Only instances that are in * {@code sAllInstances} and in device / framework manifest are used. This function should * only be called once. * * mCallback.onRegistration() is called synchronously (aka in init thread) before * this method returns. * this method returns if callback is not null. * * @throws RemoteException transaction error when talking to IServiceManager * @throws NoSuchElementException if one of the following cases: Loading @@ -1362,18 +1370,17 @@ public final class BatteryService extends SystemService { * - none of {@code sAllInstances} are in manifests (i.e. not * available on this device), or none of these instances are available to current * process. * @throws NullPointerException when callback is null or supplier is null * @throws NullPointerException when supplier is null */ void init(Callback callback, void init(@Nullable Callback callback, IServiceManagerSupplier managerSupplier, IHealthSupplier healthSupplier) throws RemoteException, NoSuchElementException, NullPointerException { if (callback == null || managerSupplier == null || healthSupplier == null) if (managerSupplier == null || healthSupplier == null) { throw new NullPointerException(); } IServiceManager manager; mCallback = callback; mHealthSupplier = healthSupplier; // Initialize mLastService and call callback for the first time (in init thread) Loading @@ -1399,7 +1406,11 @@ public final class BatteryService extends SystemService { "No IHealth service instance among %s is available. Perhaps no permission?", sAllInstances.toString())); } if (callback != null) { mCallback = callback; mCallback.onRegistration(null, newService, mInstanceName); } // Register for future service registrations traceBegin("HealthInitRegisterNotification"); Loading
services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +43 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import android.content.pm.UserInfo; import android.hardware.biometrics.BiometricsProtoEnums; import android.hardware.face.FaceManager; import android.hardware.fingerprint.FingerprintManager; import android.hardware.health.V2_0.IHealth; import android.net.ConnectivityManager; import android.net.INetworkStatsService; import android.net.Network; Loading Loading @@ -119,6 +120,7 @@ import com.android.internal.os.PowerProfile; import com.android.internal.os.ProcessCpuTracker; import com.android.internal.os.StoragedUidIoStatsReader; import com.android.internal.util.FrameworkStatsLog; import com.android.server.BatteryService; import com.android.server.BinderCallsStatsService; import com.android.server.LocalServices; import com.android.server.SystemService; Loading Loading @@ -239,6 +241,8 @@ public class StatsPullAtomService extends SystemService { private File mBaseDir; private BatteryService.HealthServiceWrapper mHealthService; @Nullable private KernelCpuThreadReaderDiff mKernelCpuThreadReader; Loading Loading @@ -373,6 +377,8 @@ public class StatsPullAtomService extends SystemService { return pullNotificationRemoteViews(atomTag, data); case FrameworkStatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED: return pullDangerousPermissionState(atomTag, data); case FrameworkStatsLog.BATTERY_LEVEL: return pullBatteryLevel(atomTag, data); default: throw new UnsupportedOperationException("Unknown tagId=" + atomTag); } Loading Loading @@ -438,6 +444,14 @@ public class StatsPullAtomService extends SystemService { // Used by PROC_STATS and PROC_STATS_PKG_PROC atoms mBaseDir.mkdirs(); // Initialize HealthService mHealthService = new BatteryService.HealthServiceWrapper(); try { mHealthService.init(); } catch (RemoteException e) { Slog.e(TAG, "failed to initialize healthHalWrapper"); } } void registerEventListeners() { Loading Loading @@ -519,6 +533,7 @@ public class StatsPullAtomService extends SystemService { registerNotificationRemoteViews(); registerDangerousPermissionState(); registerDangerousPermissionStateSampled(); registerBatteryLevel(); } private INetworkStatsService getINetworkStatsService() { Loading Loading @@ -2961,6 +2976,34 @@ public class StatsPullAtomService extends SystemService { ); } private void registerBatteryLevel() { int tagId = FrameworkStatsLog.BATTERY_LEVEL; mStatsManager.registerPullAtomCallback( tagId, null, // use default PullAtomMetadata values BackgroundThread.getExecutor(), mStatsCallbackImpl ); } int pullBatteryLevel(int atomTag, List<StatsEvent> pulledData) { IHealth healthService = mHealthService.getLastService(); if (healthService == null) { return StatsManager.PULL_SKIP; } try { healthService.getHealthInfo((result, value) -> { StatsEvent e = StatsEvent.newBuilder() .setAtomId(atomTag) .writeInt(value.legacy.batteryLevel) .build(); pulledData.add(e); }); } catch (RemoteException e) { return StatsManager.PULL_SKIP; } return StatsManager.PULL_SUCCESS; } // Thermal event received from vendor thermal management subsystem private static final class ThermalEventListener extends IThermalEventListener.Stub { Loading