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;