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

Commit 94384e02 authored by Suprabh Shukla's avatar Suprabh Shukla Committed by Android (Google) Code Review
Browse files

Merge "Pipe wakeup sensor events to batterystats" into udc-dev

parents ae55bae7 0f23909a
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -128,6 +128,15 @@ public:
        remote()->transact(NOTE_RESET_FLASHLIGHT_TRANSACTION, data, &reply);
    }

    virtual binder::Status noteWakeupSensorEvent(int64_t elapsedNanos, int uid, int handle) {
        Parcel data, reply;
        data.writeInterfaceToken(IBatteryStats::getInterfaceDescriptor());
        data.writeInt64(elapsedNanos);
        data.writeInt32(uid);
        data.writeInt32(handle);
        status_t ret = remote()->transact(NOTE_WAKEUP_SENSOR_EVENT_TRANSACTION, data, &reply);
        return binder::Status::fromStatusT(ret);
    }
};

IMPLEMENT_META_INTERFACE(BatteryStats, "com.android.internal.app.IBatteryStats")
@@ -235,6 +244,16 @@ status_t BnBatteryStats::onTransact(
            reply->writeNoException();
            return NO_ERROR;
        } break;
        case NOTE_WAKEUP_SENSOR_EVENT_TRANSACTION: {
            CHECK_INTERFACE(IBatteryStats, data, reply);
            int64_t elapsedNanos = data.readInt64();
            int uid = data.readInt32();
            int handle = data.readInt32();
            noteWakeupSensorEvent(elapsedNanos, uid, handle);
            reply->writeNoException();
            return NO_ERROR;
        } break;

        default:
            return BBinder::onTransact(code, data, reply, flags);
    }
+4 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#ifndef __ANDROID_VNDK__

#include <binder/IInterface.h>
#include <binder/Status.h>

namespace android {

@@ -43,6 +44,7 @@ public:
    virtual void noteStopCamera(int uid) = 0;
    virtual void noteResetCamera() = 0;
    virtual void noteResetFlashlight() = 0;
    virtual binder::Status noteWakeupSensorEvent(int64_t elapsedNanos, int uid, int sensor) = 0;

    enum {
        NOTE_START_SENSOR_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION,
@@ -58,7 +60,8 @@ public:
        NOTE_START_CAMERA_TRANSACTION,
        NOTE_STOP_CAMERA_TRANSACTION,
        NOTE_RESET_CAMERA_TRANSACTION,
        NOTE_RESET_FLASHLIGHT_TRANSACTION
        NOTE_RESET_FLASHLIGHT_TRANSACTION,
        NOTE_WAKEUP_SENSOR_EVENT_TRANSACTION
    };
};

+8 −0
Original line number Diff line number Diff line
@@ -74,6 +74,14 @@ void BatteryService::disableSensorImpl(uid_t uid, int handle) {
    }
}

void BatteryService::noteWakeupSensorEventImpl(int64_t elapsedNanos, uid_t uid, int handle) {
    if (checkService()) {
        int64_t identity = IPCThreadState::self()->clearCallingIdentity();
        mBatteryStatService->noteWakeupSensorEvent(elapsedNanos, uid, handle);
        IPCThreadState::self()->restoreCallingIdentity(identity);
    }
}

bool BatteryService::checkService() {
    if (mBatteryStatService == nullptr) {
        const sp<IServiceManager> sm(defaultServiceManager());
+14 −0
Original line number Diff line number Diff line
@@ -19,11 +19,14 @@

#include <batterystats/IBatteryStats.h>
#include <utils/Singleton.h>
#include <utils/SortedVector.h>
#include <utils/SystemClock.h>

namespace android {
// ---------------------------------------------------------------------------

class BatteryService : public Singleton<BatteryService> {
    static constexpr int64_t WAKEUP_SENSOR_EVENT_DEBOUNCE_MS = 1000;

    friend class Singleton<BatteryService>;
    sp<IBatteryStats> mBatteryStatService;
@@ -32,6 +35,7 @@ class BatteryService : public Singleton<BatteryService> {

    void enableSensorImpl(uid_t uid, int handle);
    void disableSensorImpl(uid_t uid, int handle);
    void noteWakeupSensorEventImpl(int64_t elapsedNanos, uid_t uid, int handle);

    struct Info {
        uid_t uid;
@@ -44,6 +48,7 @@ class BatteryService : public Singleton<BatteryService> {
        }
    };

    int64_t mLastWakeupSensorEventReportedMs;
    Mutex mActivationsLock;
    SortedVector<Info> mActivations;
    bool addSensor(uid_t uid, int handle);
@@ -57,6 +62,15 @@ public:
    static void disableSensor(uid_t uid, int handle) {
        BatteryService::getInstance().disableSensorImpl(uid, handle);
    }
    static void noteWakeupSensorEvent(int64_t elapsed, uid_t uid, int handle) {
        BatteryService& instance = BatteryService::getInstance();
        const int64_t nowElapsedMs = elapsedRealtime();
        if (nowElapsedMs >= (instance.mLastWakeupSensorEventReportedMs
                              + WAKEUP_SENSOR_EVENT_DEBOUNCE_MS)) {
            instance.noteWakeupSensorEventImpl(elapsed, uid, handle);
            instance.mLastWakeupSensorEventReportedMs = nowElapsedMs;
        }
    }
};

// ---------------------------------------------------------------------------
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <sensor/SensorEventQueue.h>

#include "vec.h"
#include "BatteryService.h"
#include "SensorEventConnection.h"
#include "SensorDevice.h"

@@ -391,6 +392,8 @@ status_t SensorService::SensorEventConnection::sendEvents(
    if (hasSensorAccess()) {
        index_wake_up_event = findWakeUpSensorEventLocked(scratch, count);
        if (index_wake_up_event >= 0) {
            BatteryService::noteWakeupSensorEvent(scratch[index_wake_up_event].timestamp,
                                                  mUid, scratch[index_wake_up_event].sensor);
            scratch[index_wake_up_event].flags |= WAKE_UP_SENSOR_EVENT_NEEDS_ACK;
            ++mWakeLockRefCount;
#if DEBUG_CONNECTIONS