From e1fe683154ca6655d63231feca1a4550960b6253 Mon Sep 17 00:00:00 2001 From: utkabobr Date: Wed, 2 Apr 2025 17:10:02 +0300 Subject: [PATCH] Schedule truetime as non-critical task --- .../ru/ytkab0bp/slicebeam/boot/AppBoot.java | 35 ++++++++++++++++--- .../ru/ytkab0bp/slicebeam/boot/BootTask.java | 1 + .../slicebeam/boot/ClearModelCacheTask.java | 1 + .../slicebeam/boot/CloudInitTask.java | 1 + .../ytkab0bp/slicebeam/boot/TrueTimeTask.java | 3 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/AppBoot.java b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/AppBoot.java index c74c423..15516bc 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/AppBoot.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/AppBoot.java @@ -22,7 +22,17 @@ public class AppBoot { public static void run(List tasks) { long start = System.currentTimeMillis(); AppBoot.tasks = tasks; - AppBoot.latch = new CountDownLatch(tasks.size()); + int size = tasks.size(); + for (int i = 0, s = tasks.size(); i < s; i++) { + BootTask task = tasks.get(i); + if (task.nonCritical) { + if (!task.workerThread) { + throw new IllegalArgumentException("Can't schedule non-critical task on main thread"); + } + size--; + } + } + AppBoot.latch = new CountDownLatch(size); for (int i = 0, s = tasks.size(); i < s; i++) { BootTask task = tasks.get(i); @@ -40,14 +50,21 @@ public class AppBoot { } } Log.d("boot", "Boot in " + (System.currentTimeMillis() - start) + "ms"); + tryShutdown(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + private static void tryShutdown() { + if (completed.size() == tasks.size()) { executor.shutdown(); executor = null; + tasks = null; pendingMain = null; pendingTasks = null; completed = null; latch = null; - } catch (InterruptedException e) { - throw new RuntimeException(e); } } @@ -57,7 +74,11 @@ public class AppBoot { executor.submit(() -> { task.run.run(); completed.put(task.index, true); - latch.countDown(); + if (!task.nonCritical) { + latch.countDown(); + } else { + tryShutdown(); + } if (!isContinue) { continueTasks(fromMain); @@ -67,7 +88,11 @@ public class AppBoot { Runnable r = () -> { task.run.run(); completed.put(task.index, true); - latch.countDown(); + if (!task.nonCritical) { + latch.countDown(); + } else { + tryShutdown(); + } if (!isContinue) { continueTasks(fromMain); diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/BootTask.java b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/BootTask.java index dd79e61..662853e 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/BootTask.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/BootTask.java @@ -8,6 +8,7 @@ public class BootTask { public final Runnable run; public boolean workerThread; public int priority; + public boolean nonCritical; /* package */ int index; diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/ClearModelCacheTask.java b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/ClearModelCacheTask.java index 272815d..40ace98 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/ClearModelCacheTask.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/ClearModelCacheTask.java @@ -15,6 +15,7 @@ public class ClearModelCacheTask extends BootTask { } } }); + nonCritical = true; onWorker(); } } diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/CloudInitTask.java b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/CloudInitTask.java index 84cdb02..1f5bcd1 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/CloudInitTask.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/CloudInitTask.java @@ -8,5 +8,6 @@ public class CloudInitTask extends BootTask { public CloudInitTask() { super(Arrays.asList(PrefsTask.class, TrueTimeTask.class, LoadSlic3rConfigTask.class), CloudController::init); onWorker(); + nonCritical = true; } } diff --git a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/TrueTimeTask.java b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/TrueTimeTask.java index c799787..e63476d 100644 --- a/app/src/main/java/ru/ytkab0bp/slicebeam/boot/TrueTimeTask.java +++ b/app/src/main/java/ru/ytkab0bp/slicebeam/boot/TrueTimeTask.java @@ -9,7 +9,7 @@ public class TrueTimeTask extends BootTask { super(() -> { for (int i = 0; i < 2; i++) { try { - TrueTime.build().withNtpHost("1.ru.pool.ntp.org").initialize(); + TrueTime.build().withNtpHost("1.ru.pool.ntp.org").withConnectionTimeout(300).initialize(); break; } catch (IOException ignore) { try { @@ -19,5 +19,6 @@ public class TrueTimeTask extends BootTask { } }); onWorker(); + nonCritical = true; } }