Loading services/sensorservice/SensorDirectConnection.cpp +25 −9 Original line number Diff line number Diff line Loading @@ -26,12 +26,17 @@ namespace android { using util::ProtoOutputStream; SensorService::SensorDirectConnection::SensorDirectConnection(const sp<SensorService>& service, uid_t uid, const sensors_direct_mem_t *mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mMem(*mem), SensorService::SensorDirectConnection::SensorDirectConnection( const sp<SensorService>& service, uid_t uid, pid_t pid, const sensors_direct_mem_t* mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mPid(pid), mMem(*mem), mHalChannelHandle(halChannelHandle), mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mUserId = multiuser_get_user_id(mUid); ALOGD_IF(DEBUG_CONNECTIONS, "Created SensorDirectConnection"); } Loading Loading @@ -62,10 +67,21 @@ void SensorService::SensorDirectConnection::onFirstRef() { void SensorService::SensorDirectConnection::dump(String8& result) const { Mutex::Autolock _l(mConnectionLock); result.appendFormat("\tPackage %s, HAL channel handle %d, total sensor activated %zu\n", String8(mOpPackageName).c_str(), getHalChannelHandle(), mActivated.size()); for (auto &i : mActivated) { result.appendFormat("\t\tSensor %#08x, rate %d\n", i.first, i.second); result.appendFormat("\t%s | HAL channel handle %d | uid %d | pid %d\n", String8(mOpPackageName).c_str(), getHalChannelHandle(), mUid, mPid); result.appendFormat("\tActivated sensor count: %zu\n", mActivated.size()); dumpSensorInfoWithLock(result, mActivated); result.appendFormat("\tBackup sensor (opened but UID idle) count: %zu\n", mActivatedBackup.size()); dumpSensorInfoWithLock(result, mActivatedBackup); } void SensorService::SensorDirectConnection::dumpSensorInfoWithLock( String8& result, std::unordered_map<int, int> sensors) const { for (auto& i : sensors) { result.appendFormat("\t\t%s 0x%08x | rate %d\n", mService->getSensorName(i.first).c_str(), i.first, i.second); } } Loading services/sensorservice/SensorDirectConnection.h +11 −5 Original line number Diff line number Diff line Loading @@ -17,9 +17,10 @@ #ifndef ANDROID_SENSOR_DIRECT_CONNECTION_H #define ANDROID_SENSOR_DIRECT_CONNECTION_H #include <optional> #include <android-base/thread_annotations.h> #include <stdint.h> #include <sys/types.h> #include <optional> #include <binder/BinderService.h> Loading @@ -37,7 +38,7 @@ class BitTube; class SensorService::SensorDirectConnection: public BnSensorEventConnection { public: SensorDirectConnection(const sp<SensorService>& service, uid_t uid, SensorDirectConnection(const sp<SensorService>& service, uid_t uid, pid_t pid, const sensors_direct_mem_t* mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId); void dump(String8& result) const; Loading Loading @@ -94,8 +95,13 @@ private: // Recover sensor requests previously capped by capRates(). void uncapRates(); // Dumps a set of sensor infos. void dumpSensorInfoWithLock(String8& result, std::unordered_map<int, int> sensors) const EXCLUSIVE_LOCKS_REQUIRED(mConnectionLock); const sp<SensorService> mService; const uid_t mUid; const pid_t mPid; const sensors_direct_mem_t mMem; const int32_t mHalChannelHandle; const String16 mOpPackageName; Loading services/sensorservice/SensorEventConnection.cpp +6 −7 Original line number Diff line number Diff line Loading @@ -90,15 +90,14 @@ void SensorService::SensorEventConnection::dump(String8& result) { result.append("NORMAL\n"); } result.appendFormat("\t %s | WakeLockRefCount %d | uid %d | cache size %d | " "max cache size %d\n", mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize, mMaxCacheSize); "max cache size %d | has sensor access: %s\n", mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize, mMaxCacheSize, hasSensorAccess() ? "true" : "false"); for (auto& it : mSensorInfo) { const FlushInfo& flushInfo = it.second; result.appendFormat("\t %s 0x%08x | status: %s | pending flush events %d \n", mService->getSensorName(it.first).c_str(), it.first, flushInfo.mFirstFlushPending ? "First flush pending" : "active", result.appendFormat("\t %s 0x%08x | first flush pending: %s | pending flush events %d \n", mService->getSensorName(it.first).c_str(), it.first, flushInfo.mFirstFlushPending ? "true" : "false", flushInfo.mPendingFlushEventsToSend); } #if DEBUG_CONNECTIONS Loading services/sensorservice/SensorService.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -682,14 +682,14 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) { mSensorPrivacyPolicy->isSensorPrivacyEnabled() ? "enabled" : "disabled"); const auto& activeConnections = connLock.getActiveConnections(); result.appendFormat("%zd active connections\n", activeConnections.size()); result.appendFormat("%zd open event connections\n", activeConnections.size()); for (size_t i=0 ; i < activeConnections.size() ; i++) { result.appendFormat("Connection Number: %zu \n", i); activeConnections[i]->dump(result); } const auto& directConnections = connLock.getDirectConnections(); result.appendFormat("%zd direct connections\n", directConnections.size()); result.appendFormat("%zd open direct connections\n", directConnections.size()); for (size_t i = 0 ; i < directConnections.size() ; i++) { result.appendFormat("Direct connection %zu:\n", i); directConnections[i]->dump(result); Loading Loading @@ -1729,7 +1729,10 @@ sp<ISensorEventConnection> SensorService::createSensorDirectConnection( ALOGE("SensorDevice::registerDirectChannel returns %d", channelHandle); } else { mem.handle = clone; conn = new SensorDirectConnection(this, uid, &mem, channelHandle, opPackageName, deviceId); IPCThreadState* thread = IPCThreadState::self(); pid_t pid = (thread != nullptr) ? thread->getCallingPid() : -1; conn = new SensorDirectConnection(this, uid, pid, &mem, channelHandle, opPackageName, deviceId); } if (conn == nullptr) { Loading Loading
services/sensorservice/SensorDirectConnection.cpp +25 −9 Original line number Diff line number Diff line Loading @@ -26,12 +26,17 @@ namespace android { using util::ProtoOutputStream; SensorService::SensorDirectConnection::SensorDirectConnection(const sp<SensorService>& service, uid_t uid, const sensors_direct_mem_t *mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mMem(*mem), SensorService::SensorDirectConnection::SensorDirectConnection( const sp<SensorService>& service, uid_t uid, pid_t pid, const sensors_direct_mem_t* mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId) : mService(service), mUid(uid), mPid(pid), mMem(*mem), mHalChannelHandle(halChannelHandle), mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mOpPackageName(opPackageName), mDeviceId(deviceId), mDestroyed(false) { mUserId = multiuser_get_user_id(mUid); ALOGD_IF(DEBUG_CONNECTIONS, "Created SensorDirectConnection"); } Loading Loading @@ -62,10 +67,21 @@ void SensorService::SensorDirectConnection::onFirstRef() { void SensorService::SensorDirectConnection::dump(String8& result) const { Mutex::Autolock _l(mConnectionLock); result.appendFormat("\tPackage %s, HAL channel handle %d, total sensor activated %zu\n", String8(mOpPackageName).c_str(), getHalChannelHandle(), mActivated.size()); for (auto &i : mActivated) { result.appendFormat("\t\tSensor %#08x, rate %d\n", i.first, i.second); result.appendFormat("\t%s | HAL channel handle %d | uid %d | pid %d\n", String8(mOpPackageName).c_str(), getHalChannelHandle(), mUid, mPid); result.appendFormat("\tActivated sensor count: %zu\n", mActivated.size()); dumpSensorInfoWithLock(result, mActivated); result.appendFormat("\tBackup sensor (opened but UID idle) count: %zu\n", mActivatedBackup.size()); dumpSensorInfoWithLock(result, mActivatedBackup); } void SensorService::SensorDirectConnection::dumpSensorInfoWithLock( String8& result, std::unordered_map<int, int> sensors) const { for (auto& i : sensors) { result.appendFormat("\t\t%s 0x%08x | rate %d\n", mService->getSensorName(i.first).c_str(), i.first, i.second); } } Loading
services/sensorservice/SensorDirectConnection.h +11 −5 Original line number Diff line number Diff line Loading @@ -17,9 +17,10 @@ #ifndef ANDROID_SENSOR_DIRECT_CONNECTION_H #define ANDROID_SENSOR_DIRECT_CONNECTION_H #include <optional> #include <android-base/thread_annotations.h> #include <stdint.h> #include <sys/types.h> #include <optional> #include <binder/BinderService.h> Loading @@ -37,7 +38,7 @@ class BitTube; class SensorService::SensorDirectConnection: public BnSensorEventConnection { public: SensorDirectConnection(const sp<SensorService>& service, uid_t uid, SensorDirectConnection(const sp<SensorService>& service, uid_t uid, pid_t pid, const sensors_direct_mem_t* mem, int32_t halChannelHandle, const String16& opPackageName, int deviceId); void dump(String8& result) const; Loading Loading @@ -94,8 +95,13 @@ private: // Recover sensor requests previously capped by capRates(). void uncapRates(); // Dumps a set of sensor infos. void dumpSensorInfoWithLock(String8& result, std::unordered_map<int, int> sensors) const EXCLUSIVE_LOCKS_REQUIRED(mConnectionLock); const sp<SensorService> mService; const uid_t mUid; const pid_t mPid; const sensors_direct_mem_t mMem; const int32_t mHalChannelHandle; const String16 mOpPackageName; Loading
services/sensorservice/SensorEventConnection.cpp +6 −7 Original line number Diff line number Diff line Loading @@ -90,15 +90,14 @@ void SensorService::SensorEventConnection::dump(String8& result) { result.append("NORMAL\n"); } result.appendFormat("\t %s | WakeLockRefCount %d | uid %d | cache size %d | " "max cache size %d\n", mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize, mMaxCacheSize); "max cache size %d | has sensor access: %s\n", mPackageName.c_str(), mWakeLockRefCount, mUid, mCacheSize, mMaxCacheSize, hasSensorAccess() ? "true" : "false"); for (auto& it : mSensorInfo) { const FlushInfo& flushInfo = it.second; result.appendFormat("\t %s 0x%08x | status: %s | pending flush events %d \n", mService->getSensorName(it.first).c_str(), it.first, flushInfo.mFirstFlushPending ? "First flush pending" : "active", result.appendFormat("\t %s 0x%08x | first flush pending: %s | pending flush events %d \n", mService->getSensorName(it.first).c_str(), it.first, flushInfo.mFirstFlushPending ? "true" : "false", flushInfo.mPendingFlushEventsToSend); } #if DEBUG_CONNECTIONS Loading
services/sensorservice/SensorService.cpp +6 −3 Original line number Diff line number Diff line Loading @@ -682,14 +682,14 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) { mSensorPrivacyPolicy->isSensorPrivacyEnabled() ? "enabled" : "disabled"); const auto& activeConnections = connLock.getActiveConnections(); result.appendFormat("%zd active connections\n", activeConnections.size()); result.appendFormat("%zd open event connections\n", activeConnections.size()); for (size_t i=0 ; i < activeConnections.size() ; i++) { result.appendFormat("Connection Number: %zu \n", i); activeConnections[i]->dump(result); } const auto& directConnections = connLock.getDirectConnections(); result.appendFormat("%zd direct connections\n", directConnections.size()); result.appendFormat("%zd open direct connections\n", directConnections.size()); for (size_t i = 0 ; i < directConnections.size() ; i++) { result.appendFormat("Direct connection %zu:\n", i); directConnections[i]->dump(result); Loading Loading @@ -1729,7 +1729,10 @@ sp<ISensorEventConnection> SensorService::createSensorDirectConnection( ALOGE("SensorDevice::registerDirectChannel returns %d", channelHandle); } else { mem.handle = clone; conn = new SensorDirectConnection(this, uid, &mem, channelHandle, opPackageName, deviceId); IPCThreadState* thread = IPCThreadState::self(); pid_t pid = (thread != nullptr) ? thread->getCallingPid() : -1; conn = new SensorDirectConnection(this, uid, pid, &mem, channelHandle, opPackageName, deviceId); } if (conn == nullptr) { Loading