diff options
author | Mathias Agopian <mathias@google.com> | 2011-09-14 18:20:11 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-09-14 18:20:12 -0700 |
commit | 96876d205e2e20b14386010becf9b0dbbffdad2a (patch) | |
tree | 20677313d79751ed22d6b87b1477b96f64dbc529 /services | |
parent | 687f643fcaf760f794c6d56bdaebd6ae23aac0f3 (diff) | |
parent | 6f4f8e790ea9c53d113cb6dbdfc73897aec11d37 (diff) | |
download | frameworks_base-96876d205e2e20b14386010becf9b0dbbffdad2a.zip frameworks_base-96876d205e2e20b14386010becf9b0dbbffdad2a.tar.gz frameworks_base-96876d205e2e20b14386010becf9b0dbbffdad2a.tar.bz2 |
Merge "improve sensorservice dumpsys"
Diffstat (limited to 'services')
-rw-r--r-- | services/sensorservice/Fusion.cpp | 3 | ||||
-rw-r--r-- | services/sensorservice/SensorDevice.cpp | 70 | ||||
-rw-r--r-- | services/sensorservice/SensorDevice.h | 7 |
3 files changed, 51 insertions, 29 deletions
diff --git a/services/sensorservice/Fusion.cpp b/services/sensorservice/Fusion.cpp index 0ab86c3..d76f19c 100644 --- a/services/sensorservice/Fusion.cpp +++ b/services/sensorservice/Fusion.cpp @@ -167,6 +167,9 @@ Fusion::Fusion() { Bm.y = 1; Bm.z = 0; + x0 = 0; + x1 = 0; + init(); } diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp index 38d498c..d82a7e2 100644 --- a/services/sensorservice/SensorDevice.cpp +++ b/services/sensorservice/SensorDevice.cpp @@ -138,9 +138,18 @@ void SensorDevice::dump(String8& result, char* buffer, size_t SIZE) Mutex::Autolock _l(mLock); for (size_t i=0 ; i<size_t(count) ; i++) { - snprintf(buffer, SIZE, "handle=0x%08x, active-count=%d\n", + const Info& info = mActivationCount.valueFor(list[i].handle); + snprintf(buffer, SIZE, "handle=0x%08x, active-count=%d, rates(ms)={ ", list[i].handle, - mActivationCount.valueFor(list[i].handle).rates.size()); + info.rates.size()); + result.append(buffer); + for (size_t j=0 ; j<info.rates.size() ; j++) { + snprintf(buffer, SIZE, "%4.1f%s", + info.rates.valueAt(j) / 1e6f, + j<info.rates.size()-1 ? ", " : ""); + result.append(buffer); + } + snprintf(buffer, SIZE, " }, selected=%4.1f ms\n", info.delay / 1e6f); result.append(buffer); } } @@ -217,17 +226,9 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled) } } - if (!actuateHardware || enabled) { + { // scope for the lock Mutex::Autolock _l(mLock); - nsecs_t ns = info.rates.valueAt(0); - for (size_t i=1 ; i<info.rates.size() ; i++) { - if (info.rates.valueAt(i) < ns) { - nsecs_t cur = info.rates.valueAt(i); - if (cur < ns) { - ns = cur; - } - } - } + nsecs_t ns = info.selectDelay(); mSensorDevice->setDelay(mSensorDevice, handle, ns); } @@ -237,24 +238,39 @@ status_t SensorDevice::activate(void* ident, int handle, int enabled) status_t SensorDevice::setDelay(void* ident, int handle, int64_t ns) { if (!mSensorDevice) return NO_INIT; + Mutex::Autolock _l(mLock); Info& info( mActivationCount.editValueFor(handle) ); - { // scope for lock - Mutex::Autolock _l(mLock); - ssize_t index = info.rates.indexOfKey(ident); - if (index < 0) return BAD_INDEX; - info.rates.editValueAt(index) = ns; - ns = info.rates.valueAt(0); - for (size_t i=1 ; i<info.rates.size() ; i++) { - nsecs_t cur = info.rates.valueAt(i); - if (cur < ns) { - ns = cur; - } - } - } + status_t err = info.setDelayForIdent(ident, ns); + if (err < 0) return err; + ns = info.selectDelay(); + return mSensorDevice->setDelay(mSensorDevice, handle, ns); +} - //LOGD("setDelay: ident=%p, handle=%d, ns=%lld", ident, handle, ns); +// --------------------------------------------------------------------------- - return mSensorDevice->setDelay(mSensorDevice, handle, ns); +status_t SensorDevice::Info::setDelayForIdent(void* ident, int64_t ns) +{ + ssize_t index = rates.indexOfKey(ident); + if (index < 0) { + LOGE("Info::setDelayForIdent(ident=%p, ns=%lld) failed (%s)", + ident, ns, strerror(-index)); + return BAD_INDEX; + } + rates.editValueAt(index) = ns; + return NO_ERROR; +} + +nsecs_t SensorDevice::Info::selectDelay() +{ + nsecs_t ns = rates.valueAt(0); + for (size_t i=1 ; i<rates.size() ; i++) { + nsecs_t cur = rates.valueAt(i); + if (cur < ns) { + ns = cur; + } + } + delay = ns; + return ns; } // --------------------------------------------------------------------------- diff --git a/services/sensorservice/SensorDevice.h b/services/sensorservice/SensorDevice.h index c19b2ce..728b6cb 100644 --- a/services/sensorservice/SensorDevice.h +++ b/services/sensorservice/SensorDevice.h @@ -37,11 +37,14 @@ class SensorDevice : public Singleton<SensorDevice> { friend class Singleton<SensorDevice>; struct sensors_poll_device_t* mSensorDevice; struct sensors_module_t* mSensorModule; - Mutex mLock; // protect mActivationCount[].rates + mutable Mutex mLock; // protect mActivationCount[].rates // fixed-size array after construction struct Info { - Info() { } + Info() : delay(0) { } KeyedVector<void*, nsecs_t> rates; + nsecs_t delay; + status_t setDelayForIdent(void* ident, int64_t ns); + nsecs_t selectDelay(); }; DefaultKeyedVector<int, Info> mActivationCount; |