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

Commit c7d2e83e authored by Peng Xu's avatar Peng Xu Committed by Android (Google) Code Review
Browse files

Merge "Add uid and pid information into recent sensor registeration log"

parents 62743d73 51224681
Loading
Loading
Loading
Loading
+59 −12
Original line number Original line Diff line number Diff line
@@ -17,29 +17,76 @@
#ifndef ANDROID_SENSOR_REGISTRATION_INFO_H
#ifndef ANDROID_SENSOR_REGISTRATION_INFO_H
#define ANDROID_SENSOR_REGISTRATION_INFO_H
#define ANDROID_SENSOR_REGISTRATION_INFO_H


#include "SensorServiceUtils.h"
#include <utils/Thread.h>
#include <iomanip>
#include <sstream>

namespace android {
namespace android {


class SensorService;
class SensorService;


struct SensorService::SensorRegistrationInfo {
class SensorService::SensorRegistrationInfo : public SensorServiceUtil::Dumpable {
    int32_t mSensorHandle;
public:
    String8 mPackageName;
    bool mActivated;
    int32_t mSamplingRateUs;
    int32_t mMaxReportLatencyUs;
    int32_t mHour, mMin, mSec;

    SensorRegistrationInfo() : mPackageName() {
    SensorRegistrationInfo() : mPackageName() {
        mSensorHandle = mSamplingRateUs = mMaxReportLatencyUs = INT32_MIN;
        mSensorHandle = mSamplingRateUs = mMaxReportLatencyUs = INT32_MIN;
        mHour = mMin = mSec = INT32_MIN;
        mHour = mMin = mSec = INT8_MIN;
        mActivated = false;
        mActivated = false;
    }
    }


    SensorRegistrationInfo(int32_t handle, const String8 &packageName,
                           int32_t samplingRateNs, int32_t maxReportLatencyNs, bool activate) {
        mSensorHandle = handle;
        mPackageName = packageName;

        mSamplingRateUs = static_cast<int32_t>(samplingRateNs/1000);
        mMaxReportLatencyUs = static_cast<int32_t>(maxReportLatencyNs/1000);
        mActivated = activate;

        IPCThreadState *thread = IPCThreadState::self();
        mPid = (thread != nullptr) ? thread->getCallingPid() : -1;
        mUid = (thread != nullptr) ? thread->getCallingUid() : -1;

        time_t rawtime = time(NULL);
        struct tm * timeinfo = localtime(&rawtime);
        mHour = static_cast<int8_t>(timeinfo->tm_hour);
        mMin = static_cast<int8_t>(timeinfo->tm_min);
        mSec = static_cast<int8_t>(timeinfo->tm_sec);
    }

    static bool isSentinel(const SensorRegistrationInfo& info) {
    static bool isSentinel(const SensorRegistrationInfo& info) {
       return (info.mHour == INT32_MIN &&
       return (info.mHour == INT8_MIN &&
               info.mMin == INT32_MIN &&
               info.mMin == INT8_MIN &&
               info.mSec == INT32_MIN);
               info.mSec == INT8_MIN);
    }

    // Dumpable interface
    virtual std::string dump() const override {
        std::ostringstream ss;
        ss << std::setfill('0') << std::setw(2) << static_cast<int>(mHour) << ":"
           << std::setw(2) << static_cast<int>(mMin) << ":"
           << std::setw(2) << static_cast<int>(mSec)
           << (mActivated ? " +" : " -")
           << " 0x" << std::hex << std::setw(8) << mSensorHandle << std::dec
           << std::setfill(' ') << " pid=" << std::setw(5) << mPid
           << " uid=" << std::setw(5) << mUid << " package=" << mPackageName;
        if (mActivated) {
           ss  << " samplingPeriod=" << mSamplingRateUs << "us"
               << " batchingPeriod=" << mMaxReportLatencyUs << "us";
        };
        return ss.str();
    }
    }

private:
    int32_t mSensorHandle;
    String8 mPackageName;
    pid_t   mPid;
    uid_t   mUid;
    int32_t mSamplingRateUs;
    int32_t mMaxReportLatencyUs;
    bool mActivated;
    int8_t mHour, mMin, mSec;

};
};


} // namespace android;
} // namespace android;
+7 −33
Original line number Original line Diff line number Diff line
@@ -480,17 +480,7 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) {
                        SENSOR_REGISTRATIONS_BUF_SIZE;
                        SENSOR_REGISTRATIONS_BUF_SIZE;
                    continue;
                    continue;
                }
                }
                if (reg_info.mActivated) {
                result.appendFormat("%s\n", reg_info.dump().c_str());
                   result.appendFormat("%02d:%02d:%02d activated handle=0x%08x "
                           "samplingRate=%dus maxReportLatency=%dus package=%s\n",
                           reg_info.mHour, reg_info.mMin, reg_info.mSec, reg_info.mSensorHandle,
                           reg_info.mSamplingRateUs, reg_info.mMaxReportLatencyUs,
                           reg_info.mPackageName.string());
                } else {
                   result.appendFormat("%02d:%02d:%02d de-activated handle=0x%08x package=%s\n",
                           reg_info.mHour, reg_info.mMin, reg_info.mSec,
                           reg_info.mSensorHandle, reg_info.mPackageName.string());
                }
                currentIndex = (currentIndex - 1 + SENSOR_REGISTRATIONS_BUF_SIZE) %
                currentIndex = (currentIndex - 1 + SENSOR_REGISTRATIONS_BUF_SIZE) %
                        SENSOR_REGISTRATIONS_BUF_SIZE;
                        SENSOR_REGISTRATIONS_BUF_SIZE;
            } while(startIndex != currentIndex);
            } while(startIndex != currentIndex);
@@ -1220,18 +1210,10 @@ status_t SensorService::enable(const sp<SensorEventConnection>& connection,


    if (err == NO_ERROR) {
    if (err == NO_ERROR) {
        connection->updateLooperRegistration(mLooper);
        connection->updateLooperRegistration(mLooper);
        SensorRegistrationInfo &reg_info =

            mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex);
        mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex) =
        reg_info.mSensorHandle = handle;
                SensorRegistrationInfo(handle, connection->getPackageName(),
        reg_info.mSamplingRateUs = samplingPeriodNs/1000;
                                       samplingPeriodNs, maxBatchReportLatencyNs, true);
        reg_info.mMaxReportLatencyUs = maxBatchReportLatencyNs/1000;
        reg_info.mActivated = true;
        reg_info.mPackageName = connection->getPackageName();
        time_t rawtime = time(NULL);
        struct tm * timeinfo = localtime(&rawtime);
        reg_info.mHour = timeinfo->tm_hour;
        reg_info.mMin = timeinfo->tm_min;
        reg_info.mSec = timeinfo->tm_sec;
        mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
        mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
    }
    }


@@ -1254,16 +1236,8 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection, int


    }
    }
    if (err == NO_ERROR) {
    if (err == NO_ERROR) {
        SensorRegistrationInfo &reg_info =
        mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex) =
            mLastNSensorRegistrations.editItemAt(mNextSensorRegIndex);
                SensorRegistrationInfo(handle, connection->getPackageName(), 0, 0, false);
        reg_info.mActivated = false;
        reg_info.mPackageName= connection->getPackageName();
        reg_info.mSensorHandle = handle;
        time_t rawtime = time(NULL);
        struct tm * timeinfo = localtime(&rawtime);
        reg_info.mHour = timeinfo->tm_hour;
        reg_info.mMin = timeinfo->tm_min;
        reg_info.mSec = timeinfo->tm_sec;
        mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
        mNextSensorRegIndex = (mNextSensorRegIndex + 1) % SENSOR_REGISTRATIONS_BUF_SIZE;
    }
    }
    return err;
    return err;
+1 −1
Original line number Original line Diff line number Diff line
@@ -91,7 +91,7 @@ private:
    // nested class/struct for internal use
    // nested class/struct for internal use
    class SensorRecord;
    class SensorRecord;
    class SensorEventAckReceiver;
    class SensorEventAckReceiver;
    struct SensorRegistrationInfo;
    class SensorRegistrationInfo;


    enum Mode {
    enum Mode {
       // The regular operating mode where any application can register/unregister/call flush on
       // The regular operating mode where any application can register/unregister/call flush on