@@ -138,9 +138,18 @@ void SensorDevice::dump(String8& result, char* buffer, size_t SIZE)
138138
139139 Mutex::Autolock _l (mLock );
140140 for (size_t i=0 ; i<size_t (count) ; i++) {
141- snprintf (buffer, SIZE, " handle=0x%08x, active-count=%d\n " ,
141+ const Info& info = mActivationCount .valueFor (list[i].handle );
142+ snprintf (buffer, SIZE, " handle=0x%08x, active-count=%d, rates(ms)={ " ,
142143 list[i].handle ,
143- mActivationCount .valueFor (list[i].handle ).rates .size ());
144+ info.rates .size ());
145+ result.append (buffer);
146+ for (size_t j=0 ; j<info.rates .size () ; j++) {
147+ snprintf (buffer, SIZE, " %4.1f%s" ,
148+ info.rates .valueAt (j) / 1e6f,
149+ j<info.rates .size ()-1 ? " , " : " " );
150+ result.append (buffer);
151+ }
152+ snprintf (buffer, SIZE, " }, selected=%4.1f ms\n " , info.delay / 1e6f);
144153 result.append (buffer);
145154 }
146155}
@@ -217,17 +226,9 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled)
217226 }
218227 }
219228
220- if (!actuateHardware || enabled) {
229+ { // scope for the lock
221230 Mutex::Autolock _l (mLock );
222- nsecs_t ns = info.rates .valueAt (0 );
223- for (size_t i=1 ; i<info.rates .size () ; i++) {
224- if (info.rates .valueAt (i) < ns) {
225- nsecs_t cur = info.rates .valueAt (i);
226- if (cur < ns) {
227- ns = cur;
228- }
229- }
230- }
231+ nsecs_t ns = info.selectDelay ();
231232 mSensorDevice ->setDelay (mSensorDevice , handle, ns);
232233 }
233234
@@ -237,24 +238,39 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled)
237238status_t SensorDevice::setDelay (void * ident, int handle, int64_t ns)
238239{
239240 if (!mSensorDevice ) return NO_INIT;
241+ Mutex::Autolock _l (mLock );
240242 Info& info ( mActivationCount .editValueFor (handle) );
241- { // scope for lock
242- Mutex::Autolock _l (mLock );
243- ssize_t index = info.rates .indexOfKey (ident);
244- if (index < 0 ) return BAD_INDEX;
245- info.rates .editValueAt (index) = ns;
246- ns = info.rates .valueAt (0 );
247- for (size_t i=1 ; i<info.rates .size () ; i++) {
248- nsecs_t cur = info.rates .valueAt (i);
249- if (cur < ns) {
250- ns = cur;
251- }
252- }
253- }
243+ status_t err = info.setDelayForIdent (ident, ns);
244+ if (err < 0 ) return err;
245+ ns = info.selectDelay ();
246+ return mSensorDevice ->setDelay (mSensorDevice , handle, ns);
247+ }
254248
255- // LOGD("setDelay: ident=%p, handle=%d, ns=%lld", ident, handle, ns);
249+ // ---------------------------------------------------------------------------
256250
257- return mSensorDevice ->setDelay (mSensorDevice , handle, ns);
251+ status_t SensorDevice::Info::setDelayForIdent (void * ident, int64_t ns)
252+ {
253+ ssize_t index = rates.indexOfKey (ident);
254+ if (index < 0 ) {
255+ LOGE (" Info::setDelayForIdent(ident=%p, ns=%lld) failed (%s)" ,
256+ ident, ns, strerror (-index));
257+ return BAD_INDEX;
258+ }
259+ rates.editValueAt (index) = ns;
260+ return NO_ERROR;
261+ }
262+
263+ nsecs_t SensorDevice::Info::selectDelay ()
264+ {
265+ nsecs_t ns = rates.valueAt (0 );
266+ for (size_t i=1 ; i<rates.size () ; i++) {
267+ nsecs_t cur = rates.valueAt (i);
268+ if (cur < ns) {
269+ ns = cur;
270+ }
271+ }
272+ delay = ns;
273+ return ns;
258274}
259275
260276// ---------------------------------------------------------------------------
0 commit comments