sensor_hub: Optimize sensor timestamp
Optimize sensor timestamp for unexpected future time
Change-Id: I5c03d8157ebecb06d4ebbe19bbce07bee5f24b13
diff --git a/sensor_hub/libsensors/CwMcuSensor.cpp b/sensor_hub/libsensors/CwMcuSensor.cpp
index ee12179..f6d5716 100644
--- a/sensor_hub/libsensors/CwMcuSensor.cpp
+++ b/sensor_hub/libsensors/CwMcuSensor.cpp
@@ -1050,7 +1050,7 @@
}
int CwMcuSensor::readEvents(sensors_event_t* data, int count) {
- int64_t mtimestamp = getTimestamp();
+ uint64_t mtimestamp;
if (count < 1) {
return -EINVAL;
@@ -1101,12 +1101,11 @@
int64_t event_cpu_diff = event_mcu_diff * time_slope;
event_cpu_time = last_cpu_timestamp[id] + event_cpu_diff;
}
- last_mcu_timestamp[id] = event_mcu_time;
- last_cpu_timestamp[id] = event_cpu_time;
pthread_mutex_unlock(&sync_timestamp_algo_mutex);
pthread_mutex_lock(&last_timestamp_mutex);
+ mtimestamp = getTimestamp();
ALOGV("readEvents: id = %d, accuracy = %d\n"
, id
, mPendingEvents[id].acceleration.status);
@@ -1118,9 +1117,11 @@
id,
event_mcu_time / NS_PER_MS,
event_cpu_time,
- (event_cpu_time - last_timestamp[id]) / NS_PER_US,
- getTimestamp());
- last_timestamp[id] = event_cpu_time;
+ (event_cpu_time - last_cpu_timestamp[id]) / NS_PER_US,
+ mtimestamp);
+ event_cpu_time = (mtimestamp > event_cpu_time) ? event_cpu_time : mtimestamp;
+ last_mcu_timestamp[id] = event_mcu_time;
+ last_cpu_timestamp[id] = event_cpu_time;
pthread_mutex_unlock(&last_timestamp_mutex);
/*** The algorithm which parsed mcu_time into cpu_time for each event ***/
diff --git a/sensor_hub/libsensors/CwMcuSensor.h b/sensor_hub/libsensors/CwMcuSensor.h
index 5d1ea14..8ebae8c 100644
--- a/sensor_hub/libsensors/CwMcuSensor.h
+++ b/sensor_hub/libsensors/CwMcuSensor.h
@@ -106,7 +106,6 @@
bool offset_reset[numSensors];
uint64_t last_mcu_timestamp[numSensors];
uint64_t last_cpu_timestamp[numSensors];
- uint64_t last_timestamp[numSensors];
pthread_t sync_time_thread;
bool init_trigger_done;