Skip to content

Commit 6f4f8e7

Browse files
committed
improve sensorservice dumpsys
Change-Id: I8b53d5cab884c3aca16d95df5fbf288368d52e8b
1 parent 1fbe7a8 commit 6f4f8e7

File tree

3 files changed

+51
-29
lines changed

3 files changed

+51
-29
lines changed

services/sensorservice/Fusion.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,9 @@ Fusion::Fusion() {
167167
Bm.y = 1;
168168
Bm.z = 0;
169169

170+
x0 = 0;
171+
x1 = 0;
172+
170173
init();
171174
}
172175

services/sensorservice/SensorDevice.cpp

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
237238
status_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
// ---------------------------------------------------------------------------

services/sensorservice/SensorDevice.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,14 @@ class SensorDevice : public Singleton<SensorDevice> {
3737
friend class Singleton<SensorDevice>;
3838
struct sensors_poll_device_t* mSensorDevice;
3939
struct sensors_module_t* mSensorModule;
40-
Mutex mLock; // protect mActivationCount[].rates
40+
mutable Mutex mLock; // protect mActivationCount[].rates
4141
// fixed-size array after construction
4242
struct Info {
43-
Info() { }
43+
Info() : delay(0) { }
4444
KeyedVector<void*, nsecs_t> rates;
45+
nsecs_t delay;
46+
status_t setDelayForIdent(void* ident, int64_t ns);
47+
nsecs_t selectDelay();
4548
};
4649
DefaultKeyedVector<int, Info> mActivationCount;
4750

0 commit comments

Comments
 (0)