Add tags for wake lock holders.

This commit is contained in:
akwizgran
2020-08-07 12:06:03 +01:00
parent 1bab15baaf
commit 7e0d21de38
6 changed files with 32 additions and 20 deletions

View File

@@ -7,9 +7,9 @@ import java.util.concurrent.Executor;
@NotNullByDefault @NotNullByDefault
public interface AndroidWakeLockManager { public interface AndroidWakeLockManager {
AndroidWakeLock createWakeLock(); AndroidWakeLock createWakeLock(String tag);
void runWakefully(Runnable r); void runWakefully(Runnable r, String tag);
void executeWakefully(Runnable r, Executor executor); void executeWakefully(Runnable r, Executor executor, String tag);
} }

View File

@@ -35,7 +35,7 @@ class AndroidBluetoothTransportConnection
this.socket = socket; this.socket = socket;
in = timeoutMonitor.createTimeoutInputStream( in = timeoutMonitor.createTimeoutInputStream(
socket.getInputStream(), plugin.getMaxIdleTime() * 2); socket.getInputStream(), plugin.getMaxIdleTime() * 2);
wakeLock = wakeLockManager.createWakeLock(); wakeLock = wakeLockManager.createWakeLock("BluetoothConnection");
wakeLock.acquire(); wakeLock.acquire();
String address = socket.getRemoteDevice().getAddress(); String address = socket.getRemoteDevice().getAddress();
if (isValidBluetoothAddress(address)) remote.put(PROP_ADDRESS, address); if (isValidBluetoothAddress(address)) remote.put(PROP_ADDRESS, address);

View File

@@ -53,7 +53,7 @@ class AndroidTorPlugin extends TorPlugin {
maxLatency, maxIdleTime, maxLatency, maxIdleTime,
appContext.getDir("tor", MODE_PRIVATE)); appContext.getDir("tor", MODE_PRIVATE));
this.appContext = appContext; this.appContext = appContext;
wakeLock = wakeLockManager.createWakeLock(); wakeLock = wakeLockManager.createWakeLock("TorPlugin");
} }
@Override @Override

View File

@@ -73,8 +73,8 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
@Override @Override
public void startService() { public void startService() {
scheduledExecutorService.scheduleAtFixedRate( scheduledExecutorService.scheduleAtFixedRate(
() -> wakeLockManager.runWakefully(this::runDueTasks), () -> wakeLockManager.runWakefully(this::runDueTasks,
TICK_MS, TICK_MS, MILLISECONDS); "TaskTicker"), TICK_MS, TICK_MS, MILLISECONDS);
scheduleAlarm(); scheduleAlarm();
} }
@@ -89,7 +89,7 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
long now = SystemClock.elapsedRealtime(); long now = SystemClock.elapsedRealtime();
long dueMillis = now + MILLISECONDS.convert(delay, unit); long dueMillis = now + MILLISECONDS.convert(delay, unit);
Runnable wakeful = () -> Runnable wakeful = () ->
wakeLockManager.executeWakefully(task, executor); wakeLockManager.executeWakefully(task, executor, "TaskHandoff");
ScheduledTask s = new ScheduledTask(wakeful, dueMillis); ScheduledTask s = new ScheduledTask(wakeful, dueMillis);
if (dueMillis <= now) { if (dueMillis <= now) {
scheduledExecutorService.execute(s); scheduledExecutorService.execute(s);
@@ -124,7 +124,7 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
LOG.info("Ignoring alarm with PID " + extraPid LOG.info("Ignoring alarm with PID " + extraPid
+ ", current PID is " + currentPid); + ", current PID is " + currentPid);
} }
}); }, "TaskAlarm");
} }
private void runDueTasks() { private void runDueTasks() {

View File

@@ -8,6 +8,7 @@ import java.util.logging.Logger;
import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe; import javax.annotation.concurrent.ThreadSafe;
import static java.util.logging.Level.FINE;
import static java.util.logging.Logger.getLogger; import static java.util.logging.Logger.getLogger;
/** /**
@@ -23,21 +24,28 @@ class AndroidWakeLockImpl implements AndroidWakeLock {
getLogger(AndroidWakeLockImpl.class.getName()); getLogger(AndroidWakeLockImpl.class.getName());
private final SharedWakeLock sharedWakeLock; private final SharedWakeLock sharedWakeLock;
private final String tag;
private final Object lock = new Object(); private final Object lock = new Object();
@GuardedBy("lock") @GuardedBy("lock")
private boolean held = false; private boolean held = false;
AndroidWakeLockImpl(SharedWakeLock sharedWakeLock) { AndroidWakeLockImpl(SharedWakeLock sharedWakeLock, String tag) {
this.sharedWakeLock = sharedWakeLock; this.sharedWakeLock = sharedWakeLock;
this.tag = tag;
} }
@Override @Override
public void acquire() { public void acquire() {
synchronized (lock) { synchronized (lock) {
if (held) { if (held) {
LOG.fine("Already acquired"); if (LOG.isLoggable(FINE)) {
LOG.fine(tag + " already acquired");
}
} else { } else {
LOG.fine("Acquiring shared wake lock"); if (LOG.isLoggable(FINE)) {
LOG.fine(tag + " acquiring shared wake lock");
}
held = true; held = true;
sharedWakeLock.acquire(); sharedWakeLock.acquire();
} }
@@ -48,11 +56,15 @@ class AndroidWakeLockImpl implements AndroidWakeLock {
public void release() { public void release() {
synchronized (lock) { synchronized (lock) {
if (held) { if (held) {
LOG.fine("Releasing shared wake lock"); if (LOG.isLoggable(FINE)) {
LOG.fine(tag + " releasing shared wake lock");
}
held = false; held = false;
sharedWakeLock.release(); sharedWakeLock.release();
} else { } else {
LOG.fine("Already released"); if (LOG.isLoggable(FINE)) {
LOG.fine(tag + " already released");
}
} }
} }
} }

View File

@@ -51,13 +51,13 @@ class AndroidWakeLockManagerImpl implements AndroidWakeLockManager {
} }
@Override @Override
public AndroidWakeLock createWakeLock() { public AndroidWakeLock createWakeLock(String tag) {
return new AndroidWakeLockImpl(sharedWakeLock); return new AndroidWakeLockImpl(sharedWakeLock, tag);
} }
@Override @Override
public void runWakefully(Runnable r) { public void runWakefully(Runnable r, String tag) {
AndroidWakeLock wakeLock = createWakeLock(); AndroidWakeLock wakeLock = createWakeLock(tag);
wakeLock.acquire(); wakeLock.acquire();
try { try {
r.run(); r.run();
@@ -67,8 +67,8 @@ class AndroidWakeLockManagerImpl implements AndroidWakeLockManager {
} }
@Override @Override
public void executeWakefully(Runnable r, Executor executor) { public void executeWakefully(Runnable r, Executor executor, String tag) {
AndroidWakeLock wakeLock = createWakeLock(); AndroidWakeLock wakeLock = createWakeLock(tag);
wakeLock.acquire(); wakeLock.acquire();
try { try {
executor.execute(() -> { executor.execute(() -> {