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

Commit bc09cc2a authored by Suprabh Shukla's avatar Suprabh Shukla Committed by Automerger Merge Worker
Browse files

Merge "Pipe potential wakeup events from sensor service" into udc-dev am: cb5bc8ee

parents 1467cd25 cb5bc8ee
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -449,6 +449,27 @@ public abstract class SensorManager {
        return list;
    }

    /**
     * Returns the {@link Sensor} object identified by the given sensor handle.
     *
     * The raw sensor handle integer is an implementation detail and as such this method should only
     * be used by internal system components.
     *
     * @param sensorHandle The integer handle uniquely identifying the sensor.
     * @return A Sensor object identified by the given {@code sensorHandle}, if such a sensor
     * exists, {@code null} otherwise.
     *
     * @hide
     */
    public @Nullable Sensor getSensorByHandle(int sensorHandle) {
        for (final Sensor sensor : getFullSensorList()) {
            if (sensor.getHandle() == sensorHandle) {
                return sensor;
            }
        }
        return null;
    }

    /**
     * Use this method to get a list of available dynamic sensors of a certain type.
     * Make multiple calls to get sensors of different types or use
+6 −0
Original line number Diff line number Diff line
@@ -220,6 +220,12 @@ public class SystemSensorManager extends SensorManager {
        return fullList;
    }

    /** @hide */
    @Override
    public Sensor getSensorByHandle(int sensorHandle) {
        return mHandleToSensor.get(sensorHandle);
    }

    /** @hide */
    @Override
    protected List<Sensor> getFullDynamicSensorList() {
+1 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ interface IBatteryStats {
    void noteResetCamera();
    @EnforcePermission("UPDATE_DEVICE_STATS")
    void noteResetFlashlight();
    void noteWakeupSensorEvent(long elapsedNanos, int uid, int handle);

    // Remaining methods are only used in Java.
    @EnforcePermission("BATTERY_STATS")
+22 −1
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.power.stats.PowerEntity;
import android.hardware.power.stats.State;
import android.hardware.power.stats.StateResidency;
@@ -149,7 +151,6 @@ public final class BatteryStatsService extends IBatteryStats.Stub

    private final PowerProfile mPowerProfile;
    final BatteryStatsImpl mStats;
    @GuardedBy("mWakeupStats")
    final CpuWakeupStats mCpuWakeupStats;
    private final BatteryUsageStatsStore mBatteryUsageStatsStore;
    private final BatteryStatsImpl.UserInfoProvider mUserManagerUserInfoProvider;
@@ -1260,6 +1261,26 @@ public final class BatteryStatsService extends IBatteryStats.Stub
                null, sensor, FrameworkStatsLog.SENSOR_STATE_CHANGED__STATE__ON);
    }

    @Override
    public void noteWakeupSensorEvent(long elapsedNanos, int uid, int sensorHandle) {
        final int callingUid = Binder.getCallingUid();
        if (callingUid != Process.SYSTEM_UID) {
            throw new SecurityException("Calling uid " + callingUid + " is not system uid");
        }

        final SensorManager sm = mContext.getSystemService(SensorManager.class);
        final Sensor sensor = sm.getSensorByHandle(sensorHandle);
        if (sensor == null) {
            Slog.w(TAG, "Unknown sensor handle " + sensorHandle
                    + " received in noteWakeupSensorEvent");
            return;
        }
        Slog.i(TAG, "Sensor " + sensor + " wakeup event at " + elapsedNanos + " sent to uid "
                + uid);
        // TODO (b/275436924): Remove log and pipe to CpuWakeupStats for wakeup attribution
        // This method should return as quickly as possible. Use mHandler#post to do longer work.
    }

    @Override
    @EnforcePermission(UPDATE_DEVICE_STATS)
    public void noteStopSensor(final int uid, final int sensor) {