From: Peng Xu Date: Tue, 2 Aug 2016 01:12:11 +0000 (-0700) Subject: Tune SensorService thread priority, lower sensor event latency X-Git-Tag: android-x86-7.1-r1~119^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=98d30f627e;p=android-x86%2Fframeworks-native.git Tune SensorService thread priority, lower sensor event latency Change SensorService priority to SCHED_FIFO 10 to ensure sensor events to be delivered to apps in consistent short time even if system is under load. Bug: 30105910 Change-Id: I5ddf7061b75cf46b54e16476d20bbc888024aa43 --- diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index 0c4dc26917..a24740be74 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include #include @@ -71,6 +72,7 @@ bool SensorService::sHmacGlobalKeyIsValid = false; #define SENSOR_SERVICE_DIR "/data/system/sensor_service" #define SENSOR_SERVICE_HMAC_KEY_FILE SENSOR_SERVICE_DIR "/hmac_key" +#define SENSOR_SERVICE_SCHED_FIFO_PRIORITY 10 // Permissions. static const String16 sDump("android.permission.DUMP"); @@ -117,6 +119,15 @@ bool SensorService::initializeHmacKey() { return true; } +// Set main thread to SCHED_FIFO to lower sensor event latency when system is under load +void SensorService::enableSchedFifoMode() { + struct sched_param param = {0}; + param.sched_priority = SENSOR_SERVICE_SCHED_FIFO_PRIORITY; + if (sched_setscheduler(getTid(), SCHED_FIFO | SCHED_RESET_ON_FORK, ¶m) != 0) { + ALOGE("Couldn't set SCHED_FIFO for SensorService thread"); + } +} + void SensorService::onFirstRef() { ALOGD("nuSensorService starting..."); SensorDevice& dev(SensorDevice::getInstance()); @@ -261,6 +272,9 @@ void SensorService::onFirstRef() { mAckReceiver = new SensorEventAckReceiver(this); mAckReceiver->run("SensorEventAckReceiver", PRIORITY_URGENT_DISPLAY); run("SensorService", PRIORITY_URGENT_DISPLAY); + + // priority can only be changed after run + enableSchedFifoMode(); } } } diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 68d4154a49..1e1ea5ab4a 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -215,6 +215,8 @@ private: // Either read from storage or create a new one. static bool initializeHmacKey(); + // Enable SCHED_FIFO priority for thread + void enableSchedFifoMode(); static uint8_t sHmacGlobalKey[128]; static bool sHmacGlobalKeyIsValid;