Fix VtsHalSensorsV2_0TargetTest
During VTS testing, when many sensors are quickly enabled, the load on the Sensorhub side will be too heavy, and then continue to send sensor enable instructions and Sensor Flush instructions. These instructions sent by the Kernel driver to the Sensorhub through inter-core communication cannot be responded to in a timely manner. After the Kernel side judges the timeout, it will determine that the enable fails; after the enable fails, it cannot continue to test the flush or return the expected flush data. ten sensors is tested as a group Bug: 339763843 Test: run vts -m VtsHalSensorsV2_0TargetTest (cherry picked from https://android-review.googlesource.com/q/commit:09952885e441bcf0d8f0bf0834ff46608b07e0d0) Merged-In: I6f6d36d1e3c98b85b412189c3f97163c0945a7ab Change-Id: I6f6d36d1e3c98b85b412189c3f97163c0945a7ab
This commit is contained in:
parent
9d0352bf56
commit
8659a96281
1 changed files with 41 additions and 29 deletions
|
@ -604,7 +604,16 @@ void SensorsHidlTest::runFlushTest(const std::vector<SensorInfoType>& sensors, b
|
|||
EventCallback callback;
|
||||
getEnvironment()->registerCallback(&callback);
|
||||
|
||||
for (const SensorInfoType& sensor : sensors) {
|
||||
// 10 sensors per group
|
||||
constexpr size_t kSensorsPerGroup = 10;
|
||||
for (size_t sensorOffset = 0; sensorOffset < sensors.size();
|
||||
sensorOffset += kSensorsPerGroup) {
|
||||
std::vector<SensorInfoType> sensorGroup(
|
||||
sensors.begin() + sensorOffset,
|
||||
sensors.begin() +
|
||||
std::min(sensorOffset + kSensorsPerGroup, sensors.size()));
|
||||
|
||||
for (const SensorInfoType& sensor : sensorGroup) {
|
||||
// Configure and activate the sensor
|
||||
batch(sensor.sensorHandle, sensor.maxDelay, 0 /* maxReportLatencyNs */);
|
||||
activate(sensor.sensorHandle, activateSensor);
|
||||
|
@ -615,7 +624,8 @@ void SensorsHidlTest::runFlushTest(const std::vector<SensorInfoType>& sensors, b
|
|||
<< "Flush " << i << "/" << flushCalls << ": "
|
||||
<< " handle=0x" << std::hex << std::setw(8) << std::setfill('0')
|
||||
<< sensor.sensorHandle << std::dec
|
||||
<< " type=" << static_cast<int>(sensor.type) << " name=" << sensor.name);
|
||||
<< " type=" << static_cast<int>(sensor.type)
|
||||
<< " name=" << sensor.name);
|
||||
|
||||
Result flushResult = flush(sensor.sensorHandle);
|
||||
EXPECT_EQ(flushResult, expectedResponse);
|
||||
|
@ -623,24 +633,26 @@ void SensorsHidlTest::runFlushTest(const std::vector<SensorInfoType>& sensors, b
|
|||
}
|
||||
|
||||
// Wait up to one second for the flush events
|
||||
callback.waitForFlushEvents(sensors, flushCalls, milliseconds(1000) /* timeout */);
|
||||
callback.waitForFlushEvents(sensorGroup, flushCalls, milliseconds(1000) /* timeout */);
|
||||
|
||||
// Deactivate all sensors after waiting for flush events so pending flush events are not
|
||||
// abandoned by the HAL.
|
||||
for (const SensorInfoType& sensor : sensors) {
|
||||
for (const SensorInfoType& sensor : sensorGroup) {
|
||||
activate(sensor.sensorHandle, false);
|
||||
}
|
||||
getEnvironment()->unregisterCallback();
|
||||
|
||||
// Check that the correct number of flushes are present for each sensor
|
||||
for (const SensorInfoType& sensor : sensors) {
|
||||
for (const SensorInfoType& sensor : sensorGroup) {
|
||||
SCOPED_TRACE(::testing::Message()
|
||||
<< " handle=0x" << std::hex << std::setw(8) << std::setfill('0')
|
||||
<< sensor.sensorHandle << std::dec << " type=" << static_cast<int>(sensor.type)
|
||||
<< sensor.sensorHandle << std::dec
|
||||
<< " type=" << static_cast<int>(sensor.type)
|
||||
<< " name=" << sensor.name);
|
||||
ASSERT_EQ(callback.getFlushCount(sensor.sensorHandle), expectedFlushCount);
|
||||
}
|
||||
}
|
||||
getEnvironment()->unregisterCallback();
|
||||
}
|
||||
|
||||
TEST_P(SensorsHidlTest, FlushSensor) {
|
||||
// Find a sensor that is not a one-shot sensor
|
||||
|
|
Loading…
Reference in a new issue