OSDN Git Service

Sensor VTS testBatchingOperation flakiness fix
[android-x86/hardware-interfaces.git] / sensors / 1.0 / vts / functional / VtsHalSensorsV1_0TargetTest.cpp
index d21b512..388c77c 100644 (file)
  */
 
 #define LOG_TAG "sensors_hidl_hal_test"
+#include <VtsHalHidlTargetTestBase.h>
 #include <android-base/logging.h>
 #include <android/hardware/sensors/1.0/ISensors.h>
 #include <android/hardware/sensors/1.0/types.h>
-#include <android/log.h>
 #include <cutils/ashmem.h>
+#include <hardware/sensors.h>  // for sensor type strings
+#include <log/log.h>
 #include <utils/SystemClock.h>
-#include <VtsHalHidlTargetTestBase.h>
-#include <hardware/sensors.h>       // for sensor type strings
 
 #include <algorithm>
 #include <cinttypes>
@@ -200,19 +200,18 @@ void SensorsHidlEnvironment::pollingThread(
   bool needExit = *stop;
 
   while(!needExit) {
-    env->sensors->poll(1,
-        [&](auto result, const auto &events, const auto &dynamicSensorsAdded) {
+      env->sensors->poll(64, [&](auto result, const auto& events, const auto& dynamicSensorsAdded) {
           if (result != Result::OK
               || (events.size() == 0 && dynamicSensorsAdded.size() == 0)
               || *stop) {
-            needExit = true;
-            return;
+              needExit = true;
+              return;
           }
 
-          if (events.size() > 0) {
-            env->addEvent(events[0]);
+          for (const auto& e : events) {
+              env->addEvent(e);
           }
-        });
+      });
   }
   ALOGD("polling thread end");
 }
@@ -616,7 +615,7 @@ void SensorsHidlTest::assertTypeMatchStringType(SensorType type, const hidl_stri
 
   switch (type) {
 #define CHECK_TYPE_STRING_FOR_SENSOR_TYPE(type) \
-    case SensorType::type: ASSERT_STREQ(SENSOR_STRING_TYPE_ ## type, stringType); break;
+    case SensorType::type: ASSERT_STREQ(SENSOR_STRING_TYPE_ ## type, stringType.c_str()); break;
     CHECK_TYPE_STRING_FOR_SENSOR_TYPE(ACCELEROMETER);
     CHECK_TYPE_STRING_FOR_SENSOR_TYPE(ACCELEROMETER_UNCALIBRATED);
     CHECK_TYPE_STRING_FOR_SENSOR_TYPE(ADDITIONAL_INFO);
@@ -698,6 +697,7 @@ void SensorsHidlTest::assertDelayMatchReportMode(
 SensorFlagBits SensorsHidlTest::expectedReportModeForType(SensorType type) {
   switch (type) {
     case SensorType::ACCELEROMETER:
+    case SensorType::ACCELEROMETER_UNCALIBRATED:
     case SensorType::GYROSCOPE:
     case SensorType::MAGNETIC_FIELD:
     case SensorType::ORIENTATION:
@@ -720,14 +720,16 @@ SensorFlagBits SensorsHidlTest::expectedReportModeForType(SensorType type) {
     case SensorType::AMBIENT_TEMPERATURE:
     case SensorType::HEART_RATE:
     case SensorType::DEVICE_ORIENTATION:
-    case SensorType::MOTION_DETECT:
     case SensorType::STEP_COUNTER:
+    case SensorType::LOW_LATENCY_OFFBODY_DETECT:
       return SensorFlagBits::ON_CHANGE_MODE;
 
     case SensorType::SIGNIFICANT_MOTION:
     case SensorType::WAKE_GESTURE:
     case SensorType::GLANCE_GESTURE:
     case SensorType::PICK_UP_GESTURE:
+    case SensorType::MOTION_DETECT:
+    case SensorType::STATIONARY_DETECT:
       return SensorFlagBits::ONE_SHOT_MODE;
 
     case SensorType::STEP_DETECTOR:
@@ -1178,16 +1180,17 @@ void SensorsHidlTest::testBatchingOperation(SensorType type) {
   usleep(batchingPeriodInNs / 1000 * 8 / 10);
 
   SensorsHidlEnvironment::Instance()->setCollection(true);
-  // 0.8 + 0.3 times the batching period
-  // plus some time for the event to deliver
-  events = collectEvents(
-      batchingPeriodInNs / 1000 * 3 / 10,
-        minFifoCount, true /*clearBeforeStart*/, false /*change collection*/);
+  // clean existing collections
+  collectEvents(0 /*timeLimitUs*/, 0/*nEventLimit*/,
+        true /*clearBeforeStart*/, false /*change collection*/);
 
+  // 0.8 + 0.2 times the batching period
+  usleep(batchingPeriodInNs / 1000 * 8 / 10);
   ASSERT_EQ(flush(handle), Result::OK);
 
+  // plus some time for the event to deliver
   events = collectEvents(allowedBatchDeliverTimeNs / 1000,
-        minFifoCount, true /*clearBeforeStart*/, false /*change collection*/);
+        minFifoCount, false /*clearBeforeStart*/, false /*change collection*/);
 
   SensorsHidlEnvironment::Instance()->setCollection(false);
   ASSERT_EQ(activate(handle, 0), Result::OK);
@@ -1200,7 +1203,7 @@ void SensorsHidlTest::testBatchingOperation(SensorType type) {
   }
 
   // at least reach 90% of advertised capacity
-  ASSERT_GT(nEvent, (size_t)(batchingPeriodInNs / minSamplingPeriodInNs * 9 / 10));
+  ASSERT_GT(nEvent, (size_t)(minFifoCount * 9 / 10));
 }
 
 // Test if sensor hal can do accelerometer batching properly