diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index e96fd0f5dd..29302ee436 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -262,7 +262,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "use_modseq", "uid_command", "perform_expunge", "uid_expunge", "auth_plain", "auth_login", "auth_ntlm", "auth_sasl", "auth_apop", "use_top", "keep_alive_poll", "empty_pool", "idle_done", "logarithmic_backoff", - "exact_alarms", "op_wakelock", "infra", "dkim_verify", "dup_msgids", "global_keywords", "test_iab" + "exact_alarms", "infra", "dkim_verify", "dup_msgids", "global_keywords", "test_iab" }; private final static String[] RESET_QUESTIONS = new String[]{ @@ -417,7 +417,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swIdleDone = view.findViewById(R.id.swIdleDone); swLogarithmicBackoff = view.findViewById(R.id.swLogarithmicBackoff); swExactAlarms = view.findViewById(R.id.swExactAlarms); - swOpWakelock = view.findViewById(R.id.swOpWakelock); swInfra = view.findViewById(R.id.swInfra); swDupMsgId = view.findViewById(R.id.swDupMsgId); etKeywords = view.findViewById(R.id.etKeywords); @@ -1428,13 +1427,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); - swOpWakelock.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { - prefs.edit().putBoolean("op_wakelock", checked).apply(); - } - }); - swInfra.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -2135,7 +2127,6 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swIdleDone.setChecked(prefs.getBoolean("idle_done", true)); swLogarithmicBackoff.setChecked(prefs.getBoolean("logarithmic_backoff", true)); swExactAlarms.setChecked(prefs.getBoolean("exact_alarms", true)); - swOpWakelock.setChecked(prefs.getBoolean("op_wakelock", false)); swInfra.setChecked(prefs.getBoolean("infra", false)); swDupMsgId.setChecked(prefs.getBoolean("dup_msgids", false)); etKeywords.setText(prefs.getString("global_keywords", null)); diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index adcfe4697d..8d872e7d03 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -178,6 +178,7 @@ public class Helper { static final float LOW_LIGHT = 0.6f; + static final int WAKELOCK_MAX = 30 * 60 * 1000; // milliseconds static final int BUFFER_SIZE = 8192; // Same as in Files class static final long MIN_REQUIRED_SPACE = 100 * 1000L * 1000L; static final int AUTOLOCK_GRACE = 15; // seconds diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 75ea214ad3..85408d00a8 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -84,9 +84,6 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar private static final int CONNECTIVITY_DELAY = 5000; // milliseconds private static final int PROGRESS_UPDATE_INTERVAL = 1000; // milliseconds - // 10 min @ 128 kbit/s = 7.5 MiB - private static final long WAKELOCK_MAX = 10 * 60 * 1000L; // milliseconds - static final int PI_SEND = 1; @Override @@ -355,8 +352,9 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar }; private void processOperations(List ops) { + long start = new Date().getTime(); try { - wlOutbox.acquire(WAKELOCK_MAX * ops.size()); + wlOutbox.acquire(Helper.WAKELOCK_MAX); DB db = DB.getInstance(this); EntityFolder outbox = db.folder().getOutbox(); @@ -467,7 +465,10 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar db.folder().setFolderSyncState(outbox.id, null); } } finally { - wlOutbox.release(); + if (wlOutbox.isHeld()) + wlOutbox.release(); + else + Log.i("send release elapse=" + (new Date().getTime() - start)); } } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index dc3d59c69c..d289c19da2 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -149,10 +149,6 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences private static final int FAST_FAIL_COUNT = 3; private static final int FETCH_YIELD_DURATION = 50; // milliseconds private static final long WATCHDOG_INTERVAL = 60 * 60 * 1000L; // milliseconds - private static final long WAKELOCK_ACCOUNT_MAX = 3 * 60 * 1000L; // milliseconds - private static final long WAKELOCK_CONTENT_MAX = 10 * 60 * 1000L; // milliseconds - private static final long WAKELOCK_OPERATION_MAX = 10 * 1000L; // milliseconds - private static final int MESSAGES_HOUR_AVG = 10; private static final String ACTION_NEW_MESSAGE_COUNT = BuildConfig.APPLICATION_ID + ".NEW_MESSAGE_COUNT"; @@ -471,8 +467,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#init") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Scheduling, "### init " + accountNetworkState); @@ -500,9 +497,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences db.endTransaction(); } } finally { - if (!wl.isHeld()) - Log.e("state#init released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#init released elapse=" + (new Date().getTime() - start)); } } }); @@ -528,8 +526,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#start") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); Map crumb = new HashMap<>(); crumb.put("account", accountNetworkState.accountState.id.toString()); @@ -547,9 +546,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } catch (Throwable ex) { Log.e(ex); } finally { - if (!wl.isHeld()) - Log.e("state#start released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#start released elapse=" + (new Date().getTime() - start)); } } }); @@ -567,8 +567,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#stop") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); Map crumb = new HashMap<>(); crumb.put("account", accountNetworkState.accountState.id.toString()); @@ -588,9 +589,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } catch (Throwable ex) { Log.e(ex); } finally { - if (!wl.isHeld()) - Log.e("state#stop released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#stop released elapse=" + (new Date().getTime() - start)); } } }); @@ -603,8 +605,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#delete") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); DB db = DB.getInstance(ServiceSynchronize.this); db.account().deleteAccount(accountNetworkState.accountState.id); @@ -616,9 +619,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } catch (Throwable ex) { Log.e(ex); } finally { - if (!wl.isHeld()) - Log.e("state#delete released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#delete released elapse=" + (new Date().getTime() - start)); } } }); @@ -628,8 +632,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#quit") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Scheduling, "### quit eventId=" + eventId); @@ -671,9 +676,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } catch (Throwable ex) { Log.e(ex); } finally { - if (!wl.isHeld()) - Log.e("state#quit released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#quit released elapse=" + (new Date().getTime() - start)); } } }); @@ -685,16 +691,18 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences queue.submit(new RunnableEx("state#backup#exec") { @Override public void delegate() { + long start = new Date().getTime(); try { - wl.acquire(WAKELOCK_ACCOUNT_MAX); + wl.acquire(Helper.WAKELOCK_MAX); MessageClassifier.save(ServiceSynchronize.this); } catch (Throwable ex) { Log.e(ex); } finally { - if (!wl.isHeld()) - Log.e("state#backup released"); - wl.release(); + if (wl.isHeld()) + wl.release(); + else + Log.e("state#backup released elapse=" + (new Date().getTime() - start)); } } }); @@ -1490,8 +1498,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences final PowerManager.WakeLock wlMessage = pm.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID + ":account." + account.id + ".message"); + long start = new Date().getTime(); try { - wlAccount.acquire(WAKELOCK_ACCOUNT_MAX); + wlAccount.acquire(Helper.WAKELOCK_MAX); boolean forced = false; final DB db = DB.getInstance(this); @@ -1564,9 +1573,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } lastStillHere.setTime(now); } - } else + } else { + long start = new Date().getTime(); try { - wlFolder.acquire(WAKELOCK_OPERATION_MAX); + wlFolder.acquire(Helper.WAKELOCK_MAX); EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, account, account.name + " alert: " + message); @@ -1583,10 +1593,12 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences Log.w(ex); } } finally { - if (!wlFolder.isHeld()) - Log.e("folder notice released"); - wlFolder.release(); + if (wlFolder.isHeld()) + wlFolder.release(); + else + Log.e("folder notice released elapse=" + (new Date().getTime() - start)); } + } } }); @@ -1596,8 +1608,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences executor.submit(new RunnableEx("purge#exec") { @Override public void delegate() { + long start = new Date().getTime(); try { - wlAccount.acquire(WAKELOCK_ACCOUNT_MAX); + wlAccount.acquire(Helper.WAKELOCK_MAX); // Close cached connections Log.i(account.name + " Empty connection pool"); @@ -1605,9 +1618,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } catch (Throwable ex) { Log.e(ex); } finally { - if (!wlAccount.isHeld()) - Log.e("purge released"); - wlAccount.release(); + if (wlAccount.isHeld()) + wlAccount.release(); + else + Log.e("purge released elapse=" + (new Date().getTime() - start)); } } }); @@ -1697,24 +1711,27 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences iservice.getStore().addFolderListener(new FolderAdapter() { @Override public void folderCreated(FolderEvent e) { + long start = new Date().getTime(); try { - wlFolder.acquire(WAKELOCK_OPERATION_MAX); + wlFolder.acquire(Helper.WAKELOCK_MAX); String name = e.getFolder().getFullName(); Log.i("Folder created=" + name); if (db.folder().getFolderByName(account.id, name) == null) reload(ServiceSynchronize.this, account.id, false, "folder created"); } finally { - if (!wlFolder.isHeld()) - Log.e("folder created released"); - wlFolder.release(); + if (wlFolder.isHeld()) + wlFolder.release(); + else + Log.e("folder created released elapse=" + (new Date().getTime() - start)); } } @Override public void folderRenamed(FolderEvent e) { + long start = new Date().getTime(); try { - wlFolder.acquire(WAKELOCK_OPERATION_MAX); + wlFolder.acquire(Helper.WAKELOCK_MAX); String old = e.getFolder().getFullName(); String name = e.getNewFolder().getFullName(); @@ -1725,32 +1742,36 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (count != 0) reload(ServiceSynchronize.this, account.id, false, "folder renamed"); } finally { - if (!wlFolder.isHeld()) - Log.e("folder renamed released"); - wlFolder.release(); + if (wlFolder.isHeld()) + wlFolder.release(); + else + Log.e("folder renamed released elapse=" + (new Date().getTime() - start)); } } @Override public void folderDeleted(FolderEvent e) { + long start = new Date().getTime(); try { - wlFolder.acquire(WAKELOCK_OPERATION_MAX); + wlFolder.acquire(Helper.WAKELOCK_MAX); String name = e.getFolder().getFullName(); Log.i("Folder deleted=" + name); if (db.folder().getFolderByName(account.id, name) != null) reload(ServiceSynchronize.this, account.id, false, "folder deleted"); } finally { - if (!wlFolder.isHeld()) - Log.e("folder deleted released"); - wlFolder.release(); + if (wlFolder.isHeld()) + wlFolder.release(); + else + Log.e("folder deleted released elapse=" + (new Date().getTime() - start)); } } @Override public void folderChanged(FolderEvent e) { + long start = new Date().getTime(); try { - wlFolder.acquire(WAKELOCK_OPERATION_MAX); + wlFolder.acquire(Helper.WAKELOCK_MAX); String name = e.getFolder().getFullName(); EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Account, account, @@ -1759,9 +1780,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (folder != null && folder.selectable) EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { - if (!wlFolder.isHeld()) - Log.e("folder changed released"); - wlFolder.release(); + if (wlFolder.isHeld()) + wlFolder.release(); + else + Log.e("folder changed released elapse=" + (new Date().getTime() - start)); } } }); @@ -1870,8 +1892,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences ifolder.addMessageCountListener(new MessageCountAdapter() { @Override public void messagesAdded(MessageCountEvent e) { + long start = new Date().getTime(); try { - wlMessage.acquire(WAKELOCK_OPERATION_MAX * e.getMessages().length); + wlMessage.acquire(Helper.WAKELOCK_MAX); fetch(folder, ifolder, e.getMessages(), false, false, "added"); Thread.sleep(FETCH_YIELD_DURATION); } catch (Throwable ex) { @@ -1880,16 +1903,18 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences account.name + "/" + folder.name + " added " + Log.formatThrowable(ex, false)); EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { - if (!wlMessage.isHeld()) - Log.e("message added released"); - wlMessage.release(); + if (wlMessage.isHeld()) + wlMessage.release(); + else + Log.e("message added released elapse=" + (new Date().getTime() - start)); } } @Override public void messagesRemoved(MessageCountEvent e) { + long start = new Date().getTime(); try { - wlMessage.acquire(WAKELOCK_OPERATION_MAX * e.getMessages().length); + wlMessage.acquire(Helper.WAKELOCK_MAX); fetch(folder, ifolder, e.getMessages(), false, true, "removed"); Thread.sleep(FETCH_YIELD_DURATION); } catch (Throwable ex) { @@ -1898,9 +1923,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences account.name + "/" + folder.name + " removed " + Log.formatThrowable(ex, false)); EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { - if (!wlMessage.isHeld()) - Log.e("message removed released"); - wlMessage.release(); + if (wlMessage.isHeld()) + wlMessage.release(); + else + Log.e("message removed released elapse=" + (new Date().getTime() - start)); } } }); @@ -1911,8 +1937,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences ifolder.addMessageChangedListener(new MessageChangedListener() { @Override public void messageChanged(MessageChangedEvent e) { + long start = new Date().getTime(); try { - wlMessage.acquire(WAKELOCK_OPERATION_MAX); + wlMessage.acquire(Helper.WAKELOCK_MAX); Message imessage = e.getMessage(); fetch(folder, ifolder, new Message[]{imessage}, true, false, "changed"); Thread.sleep(FETCH_YIELD_DURATION); @@ -1922,9 +1949,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences account.name + "/" + folder.name + " changed " + Log.formatThrowable(ex, false)); EntityOperation.sync(ServiceSynchronize.this, folder.id, false); } finally { - if (!wlMessage.isHeld()) - Log.e("message changed released"); - wlMessage.release(); + if (wlMessage.isHeld()) + wlMessage.release(); + else + Log.e("message changed released elapse=" + (new Date().getTime() - start)); } } }); @@ -2113,58 +2141,16 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences public void run() { super.run(); - long timeout = 0; - boolean op_wakelock = prefs.getBoolean("op_wakelock", false); - long start = new Date().getTime(); try { + wlOperations.acquire(Helper.WAKELOCK_MAX); + List partition; synchronized (partitions) { partition = partitions.get(key); partitions.remove(key); } - // Estimate maximum execution duration - if (mapFolders.get(folder) == null) { - // Connect, sync folder list -> 3 minutes - timeout += WAKELOCK_ACCOUNT_MAX; - } - for (TupleOperationEx op : partition) - if (EntityOperation.SYNC.equals(op.name)) - if (folder.last_sync == null || - (folder.initialize != 0 && - account.protocol == EntityAccount.TYPE_IMAP)) { - // 30 days -> 20 hours - int hours = (folder.initialize == 0 ? 30 : folder.initialize) * 24; - timeout += WAKELOCK_OPERATION_MAX * hours * MESSAGES_HOUR_AVG; - } else { - long hours = (start - folder.last_sync) / (3600 * 1000L) + 1; - // 10 messages/hour -> 100 seconds - timeout += WAKELOCK_OPERATION_MAX * hours * MESSAGES_HOUR_AVG; - } - else if (EntityOperation.ADD.equals(op.name) || - EntityOperation.BODY.equals(op.name) || - EntityOperation.ATTACHMENT.equals(op.name) || - EntityOperation.RAW.equals(op.name) || - (EntityOperation.FETCH.equals(op.name) && folder.download)) - timeout += WAKELOCK_CONTENT_MAX; // -> 10 minutes - else if (EntityOperation.MOVE.equals(op.name) || - EntityOperation.COPY.equals(op.name)) - timeout += WAKELOCK_OPERATION_MAX * 2; // -> 20 seconds - else - timeout += WAKELOCK_OPERATION_MAX; // -> 10 seconds - - if (op_wakelock) - wlOperations.acquire(timeout); - else - wlOperations.acquire(); - - Log.i(account.name + "/" + folder.name + - " executing partition=" + key + - " serial=" + serial + - " operations=" + partition.size() + - " wakelock=" + (timeout / 1000) + "s"); - Map crumb = new HashMap<>(); crumb.put("account", folder.account == null ? null : Long.toString(folder.account)); crumb.put("folder", folder.name + "/" + folder.type + ":" + folder.id); @@ -2291,17 +2277,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences Log.e(ex); } finally { long elapsed = new Date().getTime() - start; - if (!wlOperations.isHeld() || elapsed > timeout) { - String msg = key + " released" + - " elapsed=" + elapsed + - " timeout=" + timeout + - " enforced=" + op_wakelock + - " held=" + wlOperations.isHeld() + - " host=" + account.host; - Log.e(msg); - EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Debug, msg); - } - wlOperations.release(); + if (wlOperations.isHeld()) + wlOperations.release(); + else + Log.e(key + " released elapse=" + (new Date().getTime() - start)); } } }); @@ -2483,16 +2462,18 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences AlarmManagerCompatEx.setAndAllowWhileIdle(ServiceSynchronize.this, am, AlarmManager.RTC_WAKEUP, trigger, pi); try { - if (!wlAccount.isHeld()) - Log.e("keeping alive released"); - wlAccount.release(); + if (wlAccount.isHeld()) + wlAccount.release(); + else + Log.e("keeping alive released elapse=" + (new Date().getTime() - start)); state.acquire(2 * duration, false); Log.i("### " + account.name + " keeping alive"); } catch (InterruptedException ex) { EntityLog.log(this, EntityLog.Type.Account, account, account.name + " waited state=" + state); } finally { - wlAccount.acquire(WAKELOCK_ACCOUNT_MAX); + start = new Date().getTime(); + wlAccount.acquire(Helper.WAKELOCK_MAX); } } finally { am.cancel(pi); @@ -2737,15 +2718,17 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences try { db.account().setAccountBackoff(account.id, trigger); - if (!wlAccount.isHeld()) - Log.e("backoff released"); - wlAccount.release(); + if (wlAccount.isHeld()) + wlAccount.release(); + else + Log.e("backoff released elapse=" + (new Date().getTime() - start)); state.acquire(2 * backoff * 1000L, true); Log.i("### " + account.name + " backoff done"); } catch (InterruptedException ex) { Log.w(account.name + " backoff " + ex.toString()); } finally { - wlAccount.acquire(WAKELOCK_ACCOUNT_MAX); + start = new Date().getTime(); + wlAccount.acquire(Helper.WAKELOCK_MAX); db.account().setAccountBackoff(account.id, null); } } finally { @@ -2762,9 +2745,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } finally { EntityLog.log(this, EntityLog.Type.Account, account, account.name + " stopped running=" + state.isRunning()); - if (!wlAccount.isHeld()) - Log.e("account released"); - wlAccount.release(); + if (wlAccount.isHeld()) + wlAccount.release(); + else + Log.e("account released elapse=" + (new Date().getTime() - start)); } } diff --git a/app/src/main/java/eu/faircode/email/SimpleTask.java b/app/src/main/java/eu/faircode/email/SimpleTask.java index b9658a02f4..9504b22d91 100644 --- a/app/src/main/java/eu/faircode/email/SimpleTask.java +++ b/app/src/main/java/eu/faircode/email/SimpleTask.java @@ -70,7 +70,6 @@ public abstract class SimpleTask implements LifecycleObserver { private static Context themedContext = null; private static final List tasks = new ArrayList<>(); - private static final int MAX_WAKELOCK = 30 * 60 * 1000; // milliseconds private static final int REPORT_AFTER = 15 * 60 * 1000; // milliseconds static final String ACTION_TASK_COUNT = BuildConfig.APPLICATION_ID + ".ACTION_TASK_COUNT"; @@ -198,15 +197,15 @@ public abstract class SimpleTask implements LifecycleObserver { @Override public void run() { // Run in background thread + long start = new Date().getTime(); try { if (keepawake) wl.acquire(); else - wl.acquire(MAX_WAKELOCK); + wl.acquire(Helper.WAKELOCK_MAX); if (log) Log.i("Executing task=" + name); - long start = new Date().getTime(); data = onExecute(tcontext, args); elapsed = new Date().getTime() - start; if (log) @@ -220,6 +219,8 @@ public abstract class SimpleTask implements LifecycleObserver { } finally { if (wl.isHeld()) wl.release(); + else if (!keepawake) + Log.e(name + " released elapse=" + (new Date().getTime() - start)); } // Run on UI thread diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index f8263bee37..9b60d89742 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -1497,17 +1497,6 @@ app:layout_constraintTop_toBottomOf="@id/tvLogarithmicBackoffHint" app:switchPadding="12dp" /> - - Poll on keep-alive Empty connection pool Use exact timers - Operation wakelock timeout Show infrastructure Duplicates by message ID Global keywords