summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-09-14 18:20:11 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-09-14 18:20:12 -0700
commit96876d205e2e20b14386010becf9b0dbbffdad2a (patch)
tree20677313d79751ed22d6b87b1477b96f64dbc529 /services
parent687f643fcaf760f794c6d56bdaebd6ae23aac0f3 (diff)
parent6f4f8e790ea9c53d113cb6dbdfc73897aec11d37 (diff)
downloadframeworks_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.cpp3
-rw-r--r--services/sensorservice/SensorDevice.cpp70
-rw-r--r--services/sensorservice/SensorDevice.h7
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;