Android CTS Verifier Sensor Test Cases (5)

本文详细介绍了CTSSensorBatchingTests的功能,包括对多种虚拟传感器在不同速率下的批处理和刷新测试流程。探讨了两种传感器方案的区别,并解释了批处理的目的及实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 sec
private static final int RATE_50HZ = 20000; // 20 ms
private 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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值