1f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol/* 2f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Copyright (C) 2016 The Android Open Source Project 3f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * 4f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License"); 5f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * you may not use this file except in compliance with the License. 6f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * You may obtain a copy of the License at 7f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * 8f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * http://www.apache.org/licenses/LICENSE-2.0 9f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * 10f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Unless required by applicable law or agreed to in writing, software 11f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS, 12f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * See the License for the specific language governing permissions and 14f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * limitations under the License. 15f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol */ 16f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 17f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol#include "gtest/gtest.h" 18f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 194446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#include "chre/core/sensor_request.h" 20f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 21f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::Nanoseconds; 22f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::SensorMode; 23f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::SensorRequest; 2478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignolusing chre::SensorType; 252b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chungusing chre::kMaxIntervalLatencyNs; 2678a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol 2778a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew RossignolTEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) { 2878a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol // Verify that converting a sensor to a handle and from a handle back to a 2978a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol // sensor is a lossless conversion. The specific value of the handle is 3078a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol // unimportant, as long as it can be consistently converted back and forth. 3178a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol SensorType sensorType = SensorType::Pressure; 3278a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType); 3378a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle); 3478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol EXPECT_EQ(sensorType, SensorType::Pressure); 3578a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol 3678a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol sensorType = SensorType::Proximity; 3778a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol sensorHandle = getSensorHandleFromSensorType(sensorType); 3878a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle); 3978a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol EXPECT_EQ(sensorType, SensorType::Proximity); 4078a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol} 4178a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol 4278a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew RossignolTEST(SensorType, SensorHandleToSensorTypeUnknownHandles) { 4378a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown); 4478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown); 4578a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol} 46f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 47f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, DefaultMinimalPriority) { 48f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest request; 492d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT)); 502d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 51f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(request.getMode(), SensorMode::Off); 52f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 53f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 54f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) { 55f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest activeContinuous(SensorMode::ActiveContinuous, 56f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 57f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest activeOneShot(SensorMode::ActiveOneShot, 58f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 592d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 602d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous)); 612d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot)); 62f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 63f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 64f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 65f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 66f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 67f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) { 68f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest activeOneShot(SensorMode::ActiveOneShot, 69f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 70f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest passiveContinuous(SensorMode::PassiveContinuous, 71f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 722d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 732d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot)); 742d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous)); 75f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 76f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 77f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot); 78f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 79f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 80f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 81f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) { 82f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest passiveContinuous(SensorMode::PassiveContinuous, 83f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 84f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest passiveOneShot(SensorMode::PassiveOneShot, 85f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 862d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 872d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous)); 882d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot)); 89f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 90f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 91f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous); 92f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 93f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 94f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) { 95f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest passiveOneShot(SensorMode::PassiveOneShot, 96f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0), Nanoseconds(0)); 97f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0)); 982d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 992d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot)); 1002d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(off)); 101f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 102f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 103f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot); 104f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 105f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 106f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) { 107f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous, 108f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), Nanoseconds(10)); 109f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest highLatencyRequest(SensorMode::ActiveOneShot, 110f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), Nanoseconds(100)); 1112d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1122d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest)); 1132d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest)); 114f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 115f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10)); 116f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 117f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 118f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 119f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) { 120f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest lowFreqRequest(SensorMode::ActiveOneShot, 121f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(100), Nanoseconds(10)); 122f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest highFreqRequest(SensorMode::ActiveContinuous, 123f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), Nanoseconds(10)); 1242d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1252d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest)); 1262d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest)); 127f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 128f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10)); 129f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 130f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 131f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 132f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyDefaultFrequency) { 133f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous, 134f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT), 135f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0)); 1362d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1372d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest)); 138f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), 139f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT)); 140f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 141f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 142f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 143f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 144f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonDefaultAndDefaultFrequency) { 145f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous, 146f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT), 147f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(0)); 148f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous, 149f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(20000000), Nanoseconds(0)); 1502d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1512d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest)); 1522d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest)); 153f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000)); 154f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 155f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 156f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 157f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 158f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyAsapLatency) { 159f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous, 160f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 161f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 1622d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1632d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest)); 164f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 165f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), 166f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 167f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 168f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 169f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 170f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonAsapAndAsapLatency) { 171f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous, 172f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 173f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 174f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous, 175f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 176f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(2000)); 1772d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1782d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest)); 1792d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest)); 180f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 181f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), 182f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 183f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 184f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 185f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 186f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyDefaultLatency) { 187f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous, 188f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 189f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 1902d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 1912d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest)); 192f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 193f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), 194f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 195f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 196f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 197f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol 198f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonDefaultAndDefaultLatency) { 199f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous, 200f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 201f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 202f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous, 203f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(10), 204f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol Nanoseconds(2000)); 2052d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol SensorRequest mergedRequest; 2062d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest)); 2072d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest)); 208f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 209f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000)); 210f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 211f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol} 212474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung 213474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan ChungTEST(SensorRequest, MergeWithOff) { 214474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung SensorRequest request(SensorMode::ActiveContinuous, 215474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung Nanoseconds(10), 216474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung Nanoseconds(100)); 217474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung SensorRequest otherRequest(SensorMode::Off, 218474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung Nanoseconds(1), 219474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung Nanoseconds(1)); 220474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung EXPECT_FALSE(request.mergeWith(otherRequest)); 221474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous); 222474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung EXPECT_EQ(request.getInterval(), Nanoseconds(10)); 223474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung EXPECT_EQ(request.getLatency(), Nanoseconds(100)); 224474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung} 2252b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung 2262b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, MaxNonDefaultIntervalAndLatency) { 2272b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest request(SensorMode::ActiveContinuous, 2282b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT - 1), 2292b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT - 1)); 2302b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous); 2312b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(request.getInterval(), Nanoseconds(kMaxIntervalLatencyNs)); 2322b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(request.getLatency(), Nanoseconds(kMaxIntervalLatencyNs)); 2332b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung} 2342b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung 2352b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, HighRateLowLatencyAndLowRateHighLatency) { 2362b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest Request0(SensorMode::ActiveContinuous, 2372b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(100), Nanoseconds(0)); 2382b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest Request1(SensorMode::ActiveContinuous, 2392b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(10), Nanoseconds(2000)); 2402b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest mergedRequest; 2412b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_TRUE(mergedRequest.mergeWith(Request0)); 2422b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(100)); 2432b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 2442b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 2452b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung 2462b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_TRUE(mergedRequest.mergeWith(Request1)); 2472b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 2482b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90)); 2492b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 2502b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung} 2512b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung 2522b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, LowRateHighLatencyAndHighRateLowLatency) { 2532b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest Request0(SensorMode::ActiveContinuous, 2542b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(100), Nanoseconds(0)); 2552b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest Request1(SensorMode::ActiveContinuous, 2562b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung Nanoseconds(10), Nanoseconds(2000)); 2572b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung SensorRequest mergedRequest; 2582b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_TRUE(mergedRequest.mergeWith(Request1)); 2592b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 2602b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000)); 2612b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 2622b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung 2632b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_TRUE(mergedRequest.mergeWith(Request0)); 2642b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 2652b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90)); 2662b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 2672b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung} 268