diff options
| -rw-r--r-- | services/sensorservice/RecentEventLogger.cpp | 24 | ||||
| -rw-r--r-- | services/sensorservice/RecentEventLogger.h | 3 | ||||
| -rw-r--r-- | services/sensorservice/SensorService.cpp | 9 |
3 files changed, 28 insertions, 8 deletions
diff --git a/services/sensorservice/RecentEventLogger.cpp b/services/sensorservice/RecentEventLogger.cpp index 754b60393d..62e9ce0616 100644 --- a/services/sensorservice/RecentEventLogger.cpp +++ b/services/sensorservice/RecentEventLogger.cpp @@ -31,7 +31,7 @@ namespace { RecentEventLogger::RecentEventLogger(int sensorType) : mSensorType(sensorType), mEventSize(eventSizeBySensorType(mSensorType)), - mRecentEvents(logSizeBySensorType(sensorType)) { + mRecentEvents(logSizeBySensorType(sensorType)), mMaskData(false) { // blank } @@ -60,18 +60,30 @@ std::string RecentEventLogger::dump() const { (int) ns2ms(ev.mWallTime.tv_nsec)); // data - if (mSensorType == SENSOR_TYPE_STEP_COUNTER) { - buffer.appendFormat("%" PRIu64 ", ", ev.mEvent.u64.step_counter); - } else { - for (size_t k = 0; k < mEventSize; ++k) { - buffer.appendFormat("%.2f, ", ev.mEvent.data[k]); + if (!mMaskData) { + if (mSensorType == SENSOR_TYPE_STEP_COUNTER) { + buffer.appendFormat("%" PRIu64 ", ", ev.mEvent.u64.step_counter); + } else { + for (size_t k = 0; k < mEventSize; ++k) { + buffer.appendFormat("%.2f, ", ev.mEvent.data[k]); + } } + } else { + buffer.append("[value masked]"); } buffer.append("\n"); } return std::string(buffer.string()); } +void RecentEventLogger::setFormat(std::string format) { + if (format == "mask_data" ) { + mMaskData = true; + } else { + mMaskData = false; + } +} + bool RecentEventLogger::populateLastEvent(sensors_event_t *event) const { std::lock_guard<std::mutex> lk(mLock); diff --git a/services/sensorservice/RecentEventLogger.h b/services/sensorservice/RecentEventLogger.h index 4f9bc4af1a..8b15e5a007 100644 --- a/services/sensorservice/RecentEventLogger.h +++ b/services/sensorservice/RecentEventLogger.h @@ -43,6 +43,7 @@ public: // Dumpable interface virtual std::string dump() const override; + virtual void setFormat(std::string format) override; protected: struct SensorEventLog { @@ -57,6 +58,8 @@ protected: mutable std::mutex mLock; RingBuffer<SensorEventLog> mRecentEvents; + bool mMaskData; + private: static size_t logSizeBySensorType(int sensorType); }; diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index dbd06244cb..2930637664 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -322,6 +322,7 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) { IPCThreadState::self()->getCallingPid(), IPCThreadState::self()->getCallingUid()); } else { + bool privileged = IPCThreadState::self()->getCallingUid() == 0; if (args.size() > 2) { return INVALID_OPERATION; } @@ -393,8 +394,12 @@ status_t SensorService::dump(int fd, const Vector<String16>& args) { result.append("Recent Sensor events:\n"); for (auto&& i : mRecentEvent) { sp<SensorInterface> s = mSensors.getInterface(i.first); - if (!i.second->isEmpty() && - s->getSensor().getRequiredPermission().isEmpty()) { + if (!i.second->isEmpty()) { + if (privileged || s->getSensor().getRequiredPermission().isEmpty()) { + i.second->setFormat("normal"); + } else { + i.second->setFormat("mask_data"); + } // if there is events and sensor does not need special permission. result.appendFormat("%s: ", s->getSensor().getName().string()); result.append(i.second->dump().c_str()); |