Android CTS Verifier Sensor Test Cases (5)

来源:互联网 发布:西安vb舞蹈工作室官网 编辑:程序博客网 时间:2024/04/30 09:34

4. CTS Sensor Batching Tests

该项测试将依次测试Accelerometer, Magnetic Field, Orientation, Gyroscope, Pressure, Gravity, Rotation Vector, Magnetic Field Uncalibrated, Game Rotation Vector, Gyroscope Uncalibrated, Linear Acceleration, Geomagnetic Rotation Vector 等 Virtual Sensor 在 Fastest 和 50Hz data rate下的batching 和 flush 功能。这些 sensor 类型都是 continuous,另外还有 on-change 和 special 类型的 sensor 将在另外一个Batching测试项中测试。CTS Sensor Batching Tests 只涉及系统醒着的场景,系统休眠的相关测试将在其他用例中包含。

一些有用的背景知识:

目前按照 sensor 的连接方式可以分为两大类,一类是 sensor 直接通过 I2C/SPI 总线与 CPU 通信即
AP(Application Processor)方案;另一类是 sensor 连接在 MCU 上,MCU 上运行 Sensor
Driver, Firmware 甚至 Fusion Algorithm,MCU 再与CPU通信,这类方案称为 Sensor Hub
方案。两类方案最明显的一个区别是AP方案中,当系统进入休眠时,将无法获取 sensor 的数据和状态,而且在不唤醒系统的前提下不能对
sensor 进行任何操作;Sensor Hub 方案中由于 MCU 的存在,在系统进入休眠时,MCU 可以继续对 sensor
进行操作,也可以根据特定的需求去唤醒系统。

Batching
的目的是系统在该模式下,sensor产生的数据会临时保存在硬件的FIFO中,等时间到了,再一起上报给HAL。在这一段时间内,系统可以去处理其他事情或进入休眠,从而到达降低功耗的目的。

如果没有硬件的 FIFO 或者方案不支持 batching 功能,那么 HAL 上报的 sensorList 结构体的
fifoReservedEventCount 和 fifoMaxEventCount 字段必须置为 0. 否则 batching 和
suspend 相关的测试会失败。此种情况,batching 等价于 setDelay, max_report_latency_ns 参数对
HAL 不起作用。

AP and Hub

代码解析:

private static final int BATCHING_PERIOD = 10;  // 10 secprivate static final int RATE_50HZ = 20000; // 20 msprivate static final int RATE_FASTEST = SensorManager.SENSOR_DELAY_FASTEST;private static final int BATCHING_PADDING_TIME_S = (int) Math.ceil(BATCHING_PERIOD * 0.1f + 2); // batching时间到后,CTS 允许的等待数据上报到 APK 的时间隙(time slot), 据猜测应该是考虑到系统从睡眠中恢复需要时间。/* 对每个 sensor 做 fastest, 50Hz 的 batching 和 flush 测试 */public void testAccelerometer_fastest_batching() throws Throwable {    runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_PERIOD);}public void testAccelerometer_50hz_batching() throws Throwable {    runBatchingSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_PERIOD);}public void testAccelerometer_fastest_flush() throws Throwable {    runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_FASTEST, BATCHING_PERIOD);}public void testAccelerometer_50hz_flush() throws Throwable {    runFlushSensorTest(Sensor.TYPE_ACCELEROMETER, RATE_50HZ, BATCHING_PERIOD);}。。。/* 基本的 batching 测试 */private void runBatchingSensorTest(){    int maxBatchReportLatencyUs = (int) TimeUnit.SECONDS.toMicros(maxBatchReportLatencySec);    int testDurationSec = maxBatchReportLatencySec + BATCHING_PADDING_TIME_S;    。。。    operation.addVerification(        EventBasicVerification.getDefault(            environment, TimeUnit.SECONDS.toMicros(testDurationSec)));}

EventBasicVerification 对收到的数据进行基本的验证,如有无数据,sensor类型,时间戳同步,数据的standard deviation.
这里写图片描述
这里写图片描述

测试失败:

  1. “Failed due to (insufficient events $number/400)”,没有收到数据,或数据少于期待的个数;
  2. “Standard deviation out of range: stddev =”, 数据没有校准,或测试时设备没有静止;
  3. “Failed due to wrong sensor observed, “, HAL上报了错误的 sensor 数据;

EventBasicVerification.java
SensorBatchingTests.java

0 0
原创粉丝点击