diff options
| -rw-r--r-- | include/gui/ISensorEventConnection.h | 2 | ||||
| -rw-r--r-- | include/gui/SensorEventQueue.h | 2 | ||||
| -rw-r--r-- | libs/gui/ISensorEventConnection.cpp | 6 | ||||
| -rw-r--r-- | libs/gui/SensorEventQueue.cpp | 4 | ||||
| -rw-r--r-- | libs/input/InputTransport.cpp | 10 | ||||
| -rw-r--r-- | services/sensorservice/SensorService.cpp | 22 | ||||
| -rw-r--r-- | services/sensorservice/SensorService.h | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/DispSync.cpp | 1 | ||||
| -rw-r--r-- | services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp | 2 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 21 |
11 files changed, 54 insertions, 20 deletions
diff --git a/include/gui/ISensorEventConnection.h b/include/gui/ISensorEventConnection.h index 00eecc4796..f64c6b8604 100644 --- a/include/gui/ISensorEventConnection.h +++ b/include/gui/ISensorEventConnection.h @@ -39,7 +39,7 @@ public: virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs, nsecs_t maxBatchReportLatencyNs, int reservedFlags) = 0; virtual status_t setEventRate(int handle, nsecs_t ns) = 0; - virtual status_t flushSensor(int handle) = 0; + virtual status_t flush() = 0; }; // ---------------------------------------------------------------------------- diff --git a/include/gui/SensorEventQueue.h b/include/gui/SensorEventQueue.h index a3a9daa6d4..0bfc7a0dfc 100644 --- a/include/gui/SensorEventQueue.h +++ b/include/gui/SensorEventQueue.h @@ -74,7 +74,7 @@ public: status_t enableSensor(int32_t handle, int32_t samplingPeriodUs, int maxBatchReportLatencyUs, int reservedFlags) const; status_t disableSensor(int32_t handle) const; - status_t flushSensor(int32_t handle) const; + status_t flush() const; private: sp<Looper> getLooper() const; diff --git a/libs/gui/ISensorEventConnection.cpp b/libs/gui/ISensorEventConnection.cpp index a80c661cb3..28fcb53d8f 100644 --- a/libs/gui/ISensorEventConnection.cpp +++ b/libs/gui/ISensorEventConnection.cpp @@ -77,10 +77,9 @@ public: return reply.readInt32(); } - virtual status_t flushSensor(int handle) { + virtual status_t flush() { Parcel data, reply; data.writeInterfaceToken(ISensorEventConnection::getInterfaceDescriptor()); - data.writeInt32(handle); remote()->transact(FLUSH_SENSOR, data, &reply); return reply.readInt32(); } @@ -122,8 +121,7 @@ status_t BnSensorEventConnection::onTransact( } break; case FLUSH_SENSOR: { CHECK_INTERFACE(ISensorEventConnection, data, reply); - int handle = data.readInt32(); - status_t result = flushSensor(handle); + status_t result = flush(); reply->writeInt32(result); return NO_ERROR; } break; diff --git a/libs/gui/SensorEventQueue.cpp b/libs/gui/SensorEventQueue.cpp index ab50c1d730..c3656718db 100644 --- a/libs/gui/SensorEventQueue.cpp +++ b/libs/gui/SensorEventQueue.cpp @@ -132,8 +132,8 @@ status_t SensorEventQueue::enableSensor(int32_t handle, int32_t samplingPeriodUs us2ns(maxBatchReportLatencyUs), reservedFlags); } -status_t SensorEventQueue::flushSensor(int32_t handle) const { - return mSensorEventConnection->flushSensor(handle); +status_t SensorEventQueue::flush() const { + return mSensorEventConnection->flush(); } status_t SensorEventQueue::disableSensor(int32_t handle) const { diff --git a/libs/input/InputTransport.cpp b/libs/input/InputTransport.cpp index d6507f4601..9bd7fc6eb3 100644 --- a/libs/input/InputTransport.cpp +++ b/libs/input/InputTransport.cpp @@ -376,13 +376,13 @@ InputConsumer::~InputConsumer() { bool InputConsumer::isTouchResamplingEnabled() { char value[PROPERTY_VALUE_MAX]; - int length = property_get("debug.inputconsumer.resample", value, NULL); + int length = property_get("ro.input.noresample", value, NULL); if (length > 0) { - if (!strcmp("0", value)) { + if (!strcmp("1", value)) { return false; } - if (strcmp("1", value)) { - ALOGD("Unrecognized property value for 'debug.inputconsumer.resample'. " + if (strcmp("0", value)) { + ALOGD("Unrecognized property value for 'ro.input.noresample'. " "Use '1' or '0'."); } } @@ -511,7 +511,7 @@ status_t InputConsumer::consumeBatch(InputEventFactoryInterface* factory, status_t result; for (size_t i = mBatches.size(); i-- > 0; ) { Batch& batch = mBatches.editItemAt(i); - if (frameTime < 0) { + if (frameTime < 0 || !mResampleTouch) { result = consumeSamples(factory, batch, batch.samples.size(), outSeq, outEvent); mBatches.removeAt(i); diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index b26e5722fa..af605deb66 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -679,8 +679,12 @@ status_t SensorService::flushSensor(const sp<SensorEventConnection>& connection, int handle) { if (mInitCheck != NO_ERROR) return mInitCheck; SensorInterface* sensor = mSensorMap.valueFor(handle); - if (sensor == NULL) { - return BAD_VALUE; + if (sensor == NULL) { + return BAD_VALUE; + } + if (sensor->getSensor().getType() == SENSOR_TYPE_SIGNIFICANT_MOTION) { + ALOGE("flush called on Significant Motion sensor"); + return INVALID_OPERATION; } SensorDevice& dev(SensorDevice::getInstance()); @@ -934,8 +938,18 @@ status_t SensorService::SensorEventConnection::setEventRate( return mService->setEventRate(this, handle, samplingPeriodNs); } -status_t SensorService::SensorEventConnection::flushSensor(int handle) { - return mService->flushSensor(this, handle); +status_t SensorService::SensorEventConnection::flush() { + Mutex::Autolock _l(mConnectionLock); + status_t err(NO_ERROR); + for (size_t i = 0; i < mSensorInfo.size(); ++i) { + const int handle = mSensorInfo.keyAt(i); + status_t err_flush = mService->flushSensor(this, handle); + if (err_flush != NO_ERROR) { + ALOGE("Flush error handle=%d %s", handle, strerror(-err_flush)); + } + err = (err_flush != NO_ERROR) ? err_flush : err; + } + return err; } // --------------------------------------------------------------------------- diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 2311bff290..2d40071a48 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -79,7 +79,7 @@ class SensorService : virtual status_t enableDisable(int handle, bool enabled, nsecs_t samplingPeriodNs, nsecs_t maxBatchReportLatencyNs, int reservedFlags); virtual status_t setEventRate(int handle, nsecs_t samplingPeriodNs); - virtual status_t flushSensor(int handle); + virtual status_t flush(); // Count the number of flush complete events which are about to be dropped in the buffer. // Increment mPendingFlushEventsToSend in mSensorInfo. These flush complete events will be // sent separately before the next batch of events. diff --git a/services/surfaceflinger/DispSync.cpp b/services/surfaceflinger/DispSync.cpp index bff304e3e8..167c6f04be 100644 --- a/services/surfaceflinger/DispSync.cpp +++ b/services/surfaceflinger/DispSync.cpp @@ -397,6 +397,7 @@ void DispSync::setPeriod(nsecs_t period) { Mutex::Autolock lock(mMutex); mPeriod = period; mPhase = 0; + mThread->updateModel(mPeriod, mPhase); } void DispSync::updateModelLocked() { diff --git a/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp index 1cd8cb34cd..521a5d2619 100644 --- a/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp +++ b/services/surfaceflinger/RenderEngine/GLES11RenderEngine.cpp @@ -46,7 +46,7 @@ GLES11RenderEngine::GLES11RenderEngine() { } } pack565; - const uint16_t protTexData[] = { pack565(0x03, 0x03, 0x03) }; + const uint16_t protTexData[] = { 0 }; glGenTextures(1, &mProtectedTexName); glBindTexture(GL_TEXTURE_2D, mProtectedTexName); glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); diff --git a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp index 7112ca8d21..a2a6270fd3 100644 --- a/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp +++ b/services/surfaceflinger/RenderEngine/GLES20RenderEngine.cpp @@ -50,7 +50,7 @@ GLES20RenderEngine::GLES20RenderEngine() : } } pack565; - const uint16_t protTexData[] = { pack565(0x03, 0x03, 0x03) }; + const uint16_t protTexData[] = { 0 }; glGenTextures(1, &mProtectedTexName); glBindTexture(GL_TEXTURE_2D, mProtectedTexName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 3733ede88f..4a1373e882 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -2982,6 +2982,27 @@ status_t SurfaceFlinger::captureScreenImplLocked( renderScreenImplLocked(hw, reqWidth, reqHeight, minLayerZ, maxLayerZ, true); + // Create a sync point and wait on it, so we know the buffer is + // ready before we pass it along. We can't trivially call glFlush(), + // so we use a wait flag instead. + // TODO: pass a sync fd to queueBuffer() and let the consumer wait. + EGLSyncKHR sync = eglCreateSyncKHR(mEGLDisplay, EGL_SYNC_FENCE_KHR, NULL); + if (sync != EGL_NO_SYNC_KHR) { + EGLint result = eglClientWaitSyncKHR(mEGLDisplay, sync, + EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, 2000000000 /*2 sec*/); + EGLint eglErr = eglGetError(); + eglDestroySyncKHR(mEGLDisplay, sync); + if (result == EGL_TIMEOUT_EXPIRED_KHR) { + ALOGW("captureScreen: fence wait timed out"); + } else { + ALOGW_IF(eglErr != EGL_SUCCESS, + "captureScreen: error waiting on EGL fence: %#x", eglErr); + } + } else { + ALOGW("captureScreen: error creating EGL fence: %#x", eglGetError()); + // not fatal + } + if (DEBUG_SCREENSHOTS) { uint32_t* pixels = new uint32_t[reqWidth*reqHeight]; getRenderEngine().readPixels(0, 0, reqWidth, reqHeight, pixels); |