1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "gtest/gtest.h" 18 19 #include "chre/core/sensor_request.h" 20 21 using chre::Nanoseconds; 22 using chre::SensorMode; 23 using chre::SensorRequest; 24 using chre::SensorType; 25 using chre::kMaxIntervalLatencyNs; 26 TEST(SensorType,LosslessSensorHandleToSensorTypeAndBack)27 TEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) { 28 // Verify that converting a sensor to a handle and from a handle back to a 29 // sensor is a lossless conversion. The specific value of the handle is 30 // unimportant, as long as it can be consistently converted back and forth. 31 SensorType sensorType = SensorType::Pressure; 32 uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType); 33 sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle); 34 EXPECT_EQ(sensorType, SensorType::Pressure); 35 36 sensorType = SensorType::Proximity; 37 sensorHandle = getSensorHandleFromSensorType(sensorType); 38 sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle); 39 EXPECT_EQ(sensorType, SensorType::Proximity); 40 } 41 TEST(SensorType,SensorHandleToSensorTypeUnknownHandles)42 TEST(SensorType, SensorHandleToSensorTypeUnknownHandles) { 43 EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown); 44 EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown); 45 } 46 TEST(SensorRequest,DefaultMinimalPriority)47 TEST(SensorRequest, DefaultMinimalPriority) { 48 SensorRequest request; 49 EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT)); 50 EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 51 EXPECT_EQ(request.getMode(), SensorMode::Off); 52 } 53 TEST(SensorRequest,ActiveContinuousIsHigherPriorityThanActiveOneShot)54 TEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) { 55 SensorRequest activeContinuous(SensorMode::ActiveContinuous, 56 Nanoseconds(0), Nanoseconds(0)); 57 SensorRequest activeOneShot(SensorMode::ActiveOneShot, 58 Nanoseconds(0), Nanoseconds(0)); 59 SensorRequest mergedRequest; 60 EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous)); 61 EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot)); 62 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 63 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 64 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 65 } 66 TEST(SensorRequest,ActiveOneShotIsHigherPriorityThanPassiveContinuous)67 TEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) { 68 SensorRequest activeOneShot(SensorMode::ActiveOneShot, 69 Nanoseconds(0), Nanoseconds(0)); 70 SensorRequest passiveContinuous(SensorMode::PassiveContinuous, 71 Nanoseconds(0), Nanoseconds(0)); 72 SensorRequest mergedRequest; 73 EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot)); 74 EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous)); 75 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 76 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 77 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot); 78 79 } 80 TEST(SensorRequest,PassiveContinuousIsHigherPriorityThanPassiveOneShot)81 TEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) { 82 SensorRequest passiveContinuous(SensorMode::PassiveContinuous, 83 Nanoseconds(0), Nanoseconds(0)); 84 SensorRequest passiveOneShot(SensorMode::PassiveOneShot, 85 Nanoseconds(0), Nanoseconds(0)); 86 SensorRequest mergedRequest; 87 EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous)); 88 EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot)); 89 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 90 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 91 EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous); 92 } 93 TEST(SensorRequest,PassiveOneShotIsHigherPriorityThanOff)94 TEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) { 95 SensorRequest passiveOneShot(SensorMode::PassiveOneShot, 96 Nanoseconds(0), Nanoseconds(0)); 97 SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0)); 98 SensorRequest mergedRequest; 99 EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot)); 100 EXPECT_FALSE(mergedRequest.mergeWith(off)); 101 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0)); 102 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 103 EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot); 104 } 105 TEST(SensorRequest,LowerLatencyIsHigherPriorityThanHigherLatency)106 TEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) { 107 SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous, 108 Nanoseconds(10), Nanoseconds(10)); 109 SensorRequest highLatencyRequest(SensorMode::ActiveOneShot, 110 Nanoseconds(10), Nanoseconds(100)); 111 SensorRequest mergedRequest; 112 EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest)); 113 EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest)); 114 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 115 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10)); 116 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 117 } 118 TEST(SensorRequest,HigherFrequencyIsHigherPriorityThanLowerFrequency)119 TEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) { 120 SensorRequest lowFreqRequest(SensorMode::ActiveOneShot, 121 Nanoseconds(100), Nanoseconds(10)); 122 SensorRequest highFreqRequest(SensorMode::ActiveContinuous, 123 Nanoseconds(10), Nanoseconds(10)); 124 SensorRequest mergedRequest; 125 EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest)); 126 EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest)); 127 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 128 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10)); 129 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 130 } 131 TEST(SensorRequest,OnlyDefaultFrequency)132 TEST(SensorRequest, OnlyDefaultFrequency) { 133 SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous, 134 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT), 135 Nanoseconds(0)); 136 SensorRequest mergedRequest; 137 EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest)); 138 EXPECT_EQ(mergedRequest.getInterval(), 139 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT)); 140 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 141 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 142 } 143 TEST(SensorRequest,NonDefaultAndDefaultFrequency)144 TEST(SensorRequest, NonDefaultAndDefaultFrequency) { 145 SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous, 146 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT), 147 Nanoseconds(0)); 148 SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous, 149 Nanoseconds(20000000), Nanoseconds(0)); 150 SensorRequest mergedRequest; 151 EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest)); 152 EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest)); 153 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000)); 154 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 155 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 156 } 157 TEST(SensorRequest,OnlyAsapLatency)158 TEST(SensorRequest, OnlyAsapLatency) { 159 SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous, 160 Nanoseconds(10), 161 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 162 SensorRequest mergedRequest; 163 EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest)); 164 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 165 EXPECT_EQ(mergedRequest.getLatency(), 166 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 167 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 168 } 169 TEST(SensorRequest,NonAsapAndAsapLatency)170 TEST(SensorRequest, NonAsapAndAsapLatency) { 171 SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous, 172 Nanoseconds(10), 173 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 174 SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous, 175 Nanoseconds(10), 176 Nanoseconds(2000)); 177 SensorRequest mergedRequest; 178 EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest)); 179 EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest)); 180 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 181 EXPECT_EQ(mergedRequest.getLatency(), 182 Nanoseconds(CHRE_SENSOR_LATENCY_ASAP)); 183 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 184 } 185 TEST(SensorRequest,OnlyDefaultLatency)186 TEST(SensorRequest, OnlyDefaultLatency) { 187 SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous, 188 Nanoseconds(10), 189 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 190 SensorRequest mergedRequest; 191 EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest)); 192 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 193 EXPECT_EQ(mergedRequest.getLatency(), 194 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 195 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 196 } 197 TEST(SensorRequest,NonDefaultAndDefaultLatency)198 TEST(SensorRequest, NonDefaultAndDefaultLatency) { 199 SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous, 200 Nanoseconds(10), 201 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT)); 202 SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous, 203 Nanoseconds(10), 204 Nanoseconds(2000)); 205 SensorRequest mergedRequest; 206 EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest)); 207 EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest)); 208 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 209 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000)); 210 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 211 } 212 TEST(SensorRequest,MergeWithOff)213 TEST(SensorRequest, MergeWithOff) { 214 SensorRequest request(SensorMode::ActiveContinuous, 215 Nanoseconds(10), 216 Nanoseconds(100)); 217 SensorRequest otherRequest(SensorMode::Off, 218 Nanoseconds(1), 219 Nanoseconds(1)); 220 EXPECT_FALSE(request.mergeWith(otherRequest)); 221 EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous); 222 EXPECT_EQ(request.getInterval(), Nanoseconds(10)); 223 EXPECT_EQ(request.getLatency(), Nanoseconds(100)); 224 } 225 TEST(SensorRequest,MaxNonDefaultIntervalAndLatency)226 TEST(SensorRequest, MaxNonDefaultIntervalAndLatency) { 227 SensorRequest request(SensorMode::ActiveContinuous, 228 Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT - 1), 229 Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT - 1)); 230 EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous); 231 EXPECT_EQ(request.getInterval(), Nanoseconds(kMaxIntervalLatencyNs)); 232 EXPECT_EQ(request.getLatency(), Nanoseconds(kMaxIntervalLatencyNs)); 233 } 234 TEST(SensorRequest,HighRateLowLatencyAndLowRateHighLatency)235 TEST(SensorRequest, HighRateLowLatencyAndLowRateHighLatency) { 236 SensorRequest Request0(SensorMode::ActiveContinuous, 237 Nanoseconds(100), Nanoseconds(0)); 238 SensorRequest Request1(SensorMode::ActiveContinuous, 239 Nanoseconds(10), Nanoseconds(2000)); 240 SensorRequest mergedRequest; 241 EXPECT_TRUE(mergedRequest.mergeWith(Request0)); 242 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(100)); 243 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0)); 244 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 245 246 EXPECT_TRUE(mergedRequest.mergeWith(Request1)); 247 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 248 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90)); 249 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 250 } 251 TEST(SensorRequest,LowRateHighLatencyAndHighRateLowLatency)252 TEST(SensorRequest, LowRateHighLatencyAndHighRateLowLatency) { 253 SensorRequest Request0(SensorMode::ActiveContinuous, 254 Nanoseconds(100), Nanoseconds(0)); 255 SensorRequest Request1(SensorMode::ActiveContinuous, 256 Nanoseconds(10), Nanoseconds(2000)); 257 SensorRequest mergedRequest; 258 EXPECT_TRUE(mergedRequest.mergeWith(Request1)); 259 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 260 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000)); 261 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 262 263 EXPECT_TRUE(mergedRequest.mergeWith(Request0)); 264 EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10)); 265 EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90)); 266 EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous); 267 } 268