summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorezio84 <brabus84@gmail.com>2018-06-14 15:00:19 +0200
committerGeorg Veichtlbauer <georg@vware.at>2023-04-28 20:19:16 +0200
commitf086ef1e7f207cae1dcc1c2378076fd682053d91 (patch)
tree92ffaeda02b2cd4ae8dfd3ea9ea4f9f4324de8c1
parenteafcbb8793618e23913adb76f779ce628e829a56 (diff)
msm8998-common: pocketmode: use ExecutorService for listener registration
Replicate what Google did for SystemUI in this commit. aosp-mirror/platform_frameworks_base@fabc743 Registering a sensor seems to be an expensive operation, and we do it on each screen-on event, so moving it to an asynchronous task looks like a good idea anyway. By moving all non-essential binder calls of the main thread or to the next frame, we bring this down to 5ms, such that window animation and Keyguard animation starts about at the same time. The interesting part about the ExecutorService: "Memory consistency effects: Actions in a thread prior to the submission of a Runnable or Callable task to an ExecutorService happen-before any actions taken by that task, which in turn happen-before the result is retrieved via Future.get()." (from https://developer.android.com/reference/java/util/concurrent/ExecutorService) Change-Id: I453e64a7c4d40b6f49fb97f955a6a166ae5d58d5
-rw-r--r--pocketmode/src/org/lineageos/pocketmode/ProximitySensor.java24
1 files changed, 19 insertions, 5 deletions
diff --git a/pocketmode/src/org/lineageos/pocketmode/ProximitySensor.java b/pocketmode/src/org/lineageos/pocketmode/ProximitySensor.java
index 2ae51ae6..680a2fb1 100644
--- a/pocketmode/src/org/lineageos/pocketmode/ProximitySensor.java
+++ b/pocketmode/src/org/lineageos/pocketmode/ProximitySensor.java
@@ -27,6 +27,10 @@ import android.util.Log;
import java.io.IOException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
public class ProximitySensor implements SensorEventListener {
private static final boolean DEBUG = false;
@@ -37,11 +41,17 @@ public class ProximitySensor implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
private Context mContext;
+ private ExecutorService mExecutorService;
public ProximitySensor(Context context) {
mContext = context;
mSensorManager = mContext.getSystemService(SensorManager.class);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
+ mExecutorService = Executors.newSingleThreadExecutor();
+ }
+
+ private Future<?> submit(Runnable runnable) {
+ return mExecutorService.submit(runnable);
}
@Override
@@ -64,14 +74,18 @@ public class ProximitySensor implements SensorEventListener {
protected void enable() {
if (DEBUG) Log.d(TAG, "Enabling");
- mSensorManager.registerListener(this, mSensor,
- SensorManager.SENSOR_DELAY_NORMAL);
+ submit(() -> {
+ mSensorManager.registerListener(this, mSensor,
+ SensorManager.SENSOR_DELAY_NORMAL);
+ });
}
protected void disable() {
if (DEBUG) Log.d(TAG, "Disabling");
- mSensorManager.unregisterListener(this, mSensor);
- // Ensure FP is left enabled
- setFPProximityState(/* isNear */ false);
+ mExecutorService.submit(() -> {
+ mSensorManager.unregisterListener(this, mSensor);
+ // Ensure FP is left enabled
+ setFPProximityState(/* isNear */ false);
+ });
}
}