• 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  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