Loading services/sensorservice/SensorRegistrationInfo.h +59 −12 Original line number Original line Diff line number Diff line Loading @@ -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; Loading services/sensorservice/SensorService.cpp +7 −33 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 ®_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; } } Loading @@ -1254,16 +1236,8 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection, int } } if (err == NO_ERROR) { if (err == NO_ERROR) { SensorRegistrationInfo ®_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; Loading services/sensorservice/SensorService.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading
services/sensorservice/SensorRegistrationInfo.h +59 −12 Original line number Original line Diff line number Diff line Loading @@ -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; Loading
services/sensorservice/SensorService.cpp +7 −33 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 ®_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; } } Loading @@ -1254,16 +1236,8 @@ status_t SensorService::disable(const sp<SensorEventConnection>& connection, int } } if (err == NO_ERROR) { if (err == NO_ERROR) { SensorRegistrationInfo ®_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; Loading
services/sensorservice/SensorService.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -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 Loading