• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
TEST(SensorType,LosslessSensorHandleToSensorTypeAndBack)26 TEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) {
27   // Verify that converting a sensor to a handle and from a handle back to a
28   // sensor is a lossless conversion. The specific value of the handle is
29   // unimportant, as long as it can be consistently converted back and forth.
30   SensorType sensorType = SensorType::Pressure;
31   uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType);
32   sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
33   EXPECT_EQ(sensorType, SensorType::Pressure);
34 
35   sensorType = SensorType::Proximity;
36   sensorHandle = getSensorHandleFromSensorType(sensorType);
37   sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
38   EXPECT_EQ(sensorType, SensorType::Proximity);
39 }
40 
TEST(SensorType,SensorHandleToSensorTypeUnknownHandles)41 TEST(SensorType, SensorHandleToSensorTypeUnknownHandles) {
42   EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown);
43   EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown);
44 }
45 
TEST(SensorRequest,DefaultMinimalPriority)46 TEST(SensorRequest, DefaultMinimalPriority) {
47   SensorRequest request;
48   EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
49   EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
50   EXPECT_EQ(request.getMode(), SensorMode::Off);
51 }
52 
TEST(SensorRequest,ActiveContinuousIsHigherPriorityThanActiveOneShot)53 TEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) {
54   SensorRequest activeContinuous(SensorMode::ActiveContinuous,
55                                  Nanoseconds(0), Nanoseconds(0));
56   SensorRequest activeOneShot(SensorMode::ActiveOneShot,
57                               Nanoseconds(0), Nanoseconds(0));
58   SensorRequest mergedRequest;
59   EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous));
60   EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot));
61   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
62   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
63   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
64 }
65 
TEST(SensorRequest,ActiveOneShotIsHigherPriorityThanPassiveContinuous)66 TEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) {
67   SensorRequest activeOneShot(SensorMode::ActiveOneShot,
68                               Nanoseconds(0), Nanoseconds(0));
69   SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
70                                   Nanoseconds(0), Nanoseconds(0));
71   SensorRequest mergedRequest;
72   EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot));
73   EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous));
74   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
75   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
76   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot);
77 
78 }
79 
TEST(SensorRequest,PassiveContinuousIsHigherPriorityThanPassiveOneShot)80 TEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) {
81   SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
82                                   Nanoseconds(0), Nanoseconds(0));
83   SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
84                                Nanoseconds(0), Nanoseconds(0));
85   SensorRequest mergedRequest;
86   EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous));
87   EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot));
88   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
89   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
90   EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous);
91 }
92 
TEST(SensorRequest,PassiveOneShotIsHigherPriorityThanOff)93 TEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) {
94   SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
95                                Nanoseconds(0), Nanoseconds(0));
96   SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0));
97   SensorRequest mergedRequest;
98   EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot));
99   EXPECT_FALSE(mergedRequest.mergeWith(off));
100   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
101   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
102   EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot);
103 }
104 
TEST(SensorRequest,LowerLatencyIsHigherPriorityThanHigherLatency)105 TEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) {
106   SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous,
107                                   Nanoseconds(10), Nanoseconds(10));
108   SensorRequest highLatencyRequest(SensorMode::ActiveOneShot,
109                                    Nanoseconds(10), Nanoseconds(100));
110   SensorRequest mergedRequest;
111   EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest));
112   EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest));
113   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
114   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
115   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
116 }
117 
TEST(SensorRequest,HigherFrequencyIsHigherPriorityThanLowerFrequency)118 TEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) {
119   SensorRequest lowFreqRequest(SensorMode::ActiveOneShot,
120                                Nanoseconds(100), Nanoseconds(10));
121   SensorRequest highFreqRequest(SensorMode::ActiveContinuous,
122                                 Nanoseconds(10), Nanoseconds(10));
123   SensorRequest mergedRequest;
124   EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest));
125   EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest));
126   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
127   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
128   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
129 }
130 
TEST(SensorRequest,OnlyDefaultFrequency)131 TEST(SensorRequest, OnlyDefaultFrequency) {
132   SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
133                                    Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
134                                    Nanoseconds(0));
135   SensorRequest mergedRequest;
136   EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
137   EXPECT_EQ(mergedRequest.getInterval(),
138             Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
139   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
140   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
141 }
142 
TEST(SensorRequest,NonDefaultAndDefaultFrequency)143 TEST(SensorRequest, NonDefaultAndDefaultFrequency) {
144   SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
145                                    Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
146                                    Nanoseconds(0));
147   SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous,
148                                       Nanoseconds(20000000), Nanoseconds(0));
149   SensorRequest mergedRequest;
150   EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
151   EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest));
152   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000));
153   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
154   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
155 }
156 
TEST(SensorRequest,OnlyAsapLatency)157 TEST(SensorRequest, OnlyAsapLatency) {
158   SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
159                                    Nanoseconds(10),
160                                    Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
161   SensorRequest mergedRequest;
162   EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
163   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
164   EXPECT_EQ(mergedRequest.getLatency(),
165             Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
166   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
167 }
168 
TEST(SensorRequest,NonAsapAndAsapLatency)169 TEST(SensorRequest, NonAsapAndAsapLatency) {
170   SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
171                                    Nanoseconds(10),
172                                    Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
173   SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous,
174                                       Nanoseconds(10),
175                                       Nanoseconds(2000));
176   SensorRequest mergedRequest;
177   EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
178   EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest));
179   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
180   EXPECT_EQ(mergedRequest.getLatency(),
181             Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
182   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
183 }
184 
TEST(SensorRequest,OnlyDefaultLatency)185 TEST(SensorRequest, OnlyDefaultLatency) {
186   SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
187                                       Nanoseconds(10),
188                                       Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
189   SensorRequest mergedRequest;
190   EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
191   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
192   EXPECT_EQ(mergedRequest.getLatency(),
193             Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
194   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
195 }
196 
TEST(SensorRequest,NonDefaultAndDefaultLatency)197 TEST(SensorRequest, NonDefaultAndDefaultLatency) {
198   SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
199                                       Nanoseconds(10),
200                                       Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
201   SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous,
202                                          Nanoseconds(10),
203                                          Nanoseconds(2000));
204   SensorRequest mergedRequest;
205   EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
206   EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest));
207   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
208   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
209   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
210 }
211