一.摘要
在一些传感器异常的问题中我们常常需要看最近的sensor日志,那么我们可以通过dumpsys sensorservice来看最近sensor上报的数据。
二.日志的初始化已经记录
我们在SensorService.cpp中有一个std::unordered_map<int, RecentEventLogger*> mRecentEvent;对象,这个对象是专门用来记录sensor日志的,每个sensor注册时会添加到这个mRecentEvent中
const Sensor& SensorService::registerSensor(SensorInterface* s, bool isDebug, bool isVirtual) {
int handle = s->getSensor().getHandle();
int type = s->getSensor().getType();
if (mSensors.add(handle, s, isDebug, isVirtual)){
mRecentEvent.emplace(handle, new RecentEventLogger(type));
return s->getSensor();
} else {
return mSensors.getNonSensor();
}
}
RecentEventLogger的构造方法:
RecentEventLogger::RecentEventLogger(int sensorType) :
mSensorType(sensorType), mEventSize(eventSizeBySensorType(mSensorType)),
mRecentEvents(logSizeBySensorType(sensorType)), mMaskData(false),
mIsLastEventCurrent(false) {
// blank
}
这里会初始化mSensorType,mEventSize,mRecentEvents,mMaskData,mIsLastEventCurrent。
我们看到logSizeBySensorType(sensorType):
constexpr size_t LOG_SIZE = 10;
constexpr size_t LOG_SIZE_LARGE = 50; // larger samples for debugging
size_t RecentEventLogger::logSizeBySensorType(int sensorType) {
return (sensorType == SENSOR_TYPE_STEP_COUNTER ||
sensorType == SENSOR_TYPE_SIGNIFICANT_MOTION ||
sensorType == SENSOR_TYPE_ACCELEROMETER ||
sensorType == SENSOR_TYPE_LIGHT) ? LOG_SIZE_LARGE : LOG_SIZE;
}
这里会根据不同的sensor来初始化mRecentEvents的大